-
Notifications
You must be signed in to change notification settings - Fork 3
Novel 스타일링 문제
Novel은 StarterKit이라는 Extension을 이용하여 스타일을 적용할 수 있다.
const starterKit = StarterKit.configure({
bulletList: {
HTMLAttributes: {
class: cx("list-disc list-outside leading-3 -mt-2"),
},
},
orderedList: {
HTMLAttributes: {
class: cx("list-decimal list-outside leading-3 -mt-2"),
},
},
listItem: {
HTMLAttributes: {
class: cx("leading-normal -mb-2"),
},
},
...
})
위와 같이 StarterKit
의 configure
메서드를 이용하면 어떤 Node에 대한 스타일링 tailwind로 수정할 수 있다.
[novel.sh]
Novel의 예시 페이지에서는 아래와 같이 heading에 기본 설정이 적용되어 있다.
하지만 Novel의 깃허브 소스코드를 아무리 찾아봐도 StarterKit Extension에 스타일링에 관한 것이 작성되어 있지 않았다.
그러면 Novel은 이런 설정을 어디서 한 것일까?
[StarterKit
설정이 동일한 우리 프로젝트]
개발자 도구로부터 역추적 해보기로했다.
https://github.com/steven-tey/novel/blob/main/apps/web/styles/globals.css
이 css 속성은 global.css로부터 스타일이 적용됨을 볼 수 있다.
이 파일과 line을 따라가보니 아래와 같이 되어있었다.
@tailwind components;
@tailwind components
는 Tailwind CSS에서 미리 정의된 UI 컴포넌트와 관련된 유틸리티를 포함하도록 하는 지시어이다.
즉, 그냥 tailwindcss에서 제공하는 공용 컴포넌트 ui다.
아직까지는 잘 모르겠어서 아래와 같은 내용을 구글에 검색해보았다.
.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *))
검색 결과에 tailwindcss-typography
라는 라이브러리가 나왔다.
https://github.com/tailwindlabs/tailwindcss-typography
이 tailwindcss-typography
플러그인은 Markdown에서 렌더링한 HTML와 같이 제어할 수 없는 일반적인 HTML에 아름다운 Typography 기본 설정을 추가해준다.
이 플러그인을 사용하려면 상위 HTML 요소에 prose
클래스를 추가하면 된다.
그리고나서 Novel Editor의 div 요소를 살펴봤는데 prose
클래스가 들어가 있는 것을 볼 수 있었다.
(또한 package.json을 보니 tailwindcss-typography
가 설치 되어있었다)
즉, 이 tailwindcss-typography
를 사용하여 기본 스타일링을 하고 있던 것이었다.
$ yarn add -D @tailwindcss/typography
@tailwindcss/typography
를 설치하고 tailwind.config.js에 plugins에 추가 했다.
plugins: [require("@tailwindcss/typography")],
이 플러그인을 이용하니 기본 typography의 스타일링이 설정됐다.
[설치전]
[설치후]
- 일단 이런 플러그인이 있을 줄은 몰랐다.
- 페어 프로그래밍을 하면서 이 문제를 같이 고민했었는데, 그냥 플러그인을 이용해서 그랬었다니… 약간 허무함이 느껴지지만, 그래도 간편하게 기본 에디터 스타일링을 할 수 있을 거 같아서 다행이다.
⚓️ 사용자 피드백과 버그 기록
👷🏻 기술적 도전
📖 위키와 학습정리
✏️ 에디터
Novel이란?
Novel 스타일링 문제
에디터 저장 및 고려 사항들
📠 실시간 협업, 통신
Yorkie와 Novel editor 연동
YJS, Websocket, React-Flow
YJS, Socket.io
WebSocket과 Socket.io에 대해 간단히 알아보기
YJS 가이드 근데 이제 Socket.io를 곁들인
🏗️ 인프라와 CI/CD
NCloud CI CD 구축
BE 개발 스택과 기술적 고민
private key로 원격 서버 접근
nCloud 서버, VPC 만들고 설정
monorepo로 변경
⌛ 캐시, 최적화
rabbit mq 사용법
🔑 인증, 인가, 보안
passport로 oAuth 로그인 회원가입 구현
FE 로그인 기능 구현
JWT로 인증 인가 구현
JWT 쿠키로 사용하기
refresh token 보완하기
🧸 팀원 소개
⛺️ 그라운드 룰
🍞 커밋 컨벤션
🧈 이슈, PR 컨벤션
🥞 브랜치 전략
🌤️ 데일리 스크럼
📑 회의록
1️⃣ 1주차
킥오프(10/25)
2일차(10/29)
3일차(10/30)
4일차(10/31)
2️⃣ 2주차
8일차(11/04)
9일차(11/05)
11일차(11/07)
13일차(11/09)
3️⃣ 3주차
3주차 주간계획(11/11)
16일차(11/12)
18일차(11/14)
4️⃣ 4주차
4주차 주간계획(11/18)
23일차(11/19)
24일차(11/20)
25일차(11/21)
5️⃣ 5주차
5주차 주간계획(11/25)
29일차(11/25)
32일차(11/28)
34일차(11/30)
6️⃣ 6주차
6주차 주간계획(12/2)
37일차(12/3)