최근 새롭게 시작한 사이드 프로젝트가 있다.
React, Tailwind v4 기반으로
v3 구조가 아닌 v4 구조로 진행하기로 했다.
스타일을 구조화 하는 단계에서
tailwind v4의 레퍼런스는 적었고
이게 맞나..? 생각만 많아졌다.
그런 점에서 완전히 해소 되지 않겠지만
어느 정도 이해가 됐고 이후 팀원 분과 디자인 토큰 등 다시 개선해 보기로 했다.
@theme 지시어에 디자인 토큰을 담을 수 있다.
그렇다면 root: 에서도 변수 선언 방식으로 디자인 토큰을 관리 할 수있는데 이 두가지의 차이점은 뭔가 싶었다.
결론은 유틸리티 클래스 형식으로 사용할 것인지에 따라 사용 법이 다르다.
@theme 사용:root 사용@theme {
--color-primary: #f0f0ff
}
.bg-primary {
background-color: var(--color-primary);
}
@theme inline {
--color-primary: #f0f0ff
}
.bg-primary {
background-color: #ff0000;
}
@theme inlline 사용@theme 사용나는 tailwind을 사용한다면 tailwind 방식으로 가는게 맞지 않나 싶었다.
그래서 css에 @apply 지시어를 통해 tailwind 유틸리티 클래스 처럼 관리했다.
다만, @apply를 너무 남발하면 좋지 않다고 한다...!
taillwind의 고유 규칙을 깨는 행위이고, 번들 용량도 증가한다고 한다.
tailwind는 미리 정의된 클래스명을 조합해 스타일을 바로 구성한다.
<div className="block w-full bg-gray-100 rounded-md h-5"/>
만약 하단 block라는 클래스 명이 존재할 경우
기본 CSS의 우선순의를 따르게 되고 다른 곳에서도 영향을 줄 수 있다.
.block {
@apply w-full bg-gray-100 rounded-md h-5
}
겉으로 보기엔 깔끔해 지고 tailwind의 방식을 지킨다고 생각했는데
그게 아니였다...
즉, 다른 라이브러리 중 클래스 명이 겹쳐 스타일 지정이 필요할 경우에만 사용하는 것이 좋다고 한다.
@layer 지시어 앞에 base, components, utilities가 붙는걸 알 수 있다.
base는 전역적으로 사용될 스타일을 줘야할 경우 사용하는데
components, utilities는 언제 사용하고 왜 3가지로 분리했지? 라는 의문이 생겼다.
우선순위
utilitiescomponentsbase
지금 까지 tailwind를 사용하면서도 가장 기본적인 유틸리티 클래스를 조합해 사용만하고 세세한 구조를 제대로 파악 할 생각을 못했던 것 같다...ㅠ
특히 @apply 지시어는 공식문서 조금만 참고해도
나왔을 텐데 제대로 숙지하지 않는 상태에서 남발 했던 것 같다.🥹
이번 기회에 tailwind에 대해 다시 알게 되었고
공식문서를 꼼꼼히 확인해야 한다는 점도 다시 깨달았다.
간단하게 알게된 부분은 여기로
참고
https://tailwindcss.com/docs/theme
https://tailwindcss.com/docs/functions-and-directives
https://velog.io/@lky5697/5-best-practices-for-preventing-chaos-in-tailwind-css