Tailwind v4 @theme, @utility, @layer utilities #83
sgoldenbird
started this conversation in
TIL
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
📌 배운 내용
@theme,@utility, 그리고 기존의@layer utilities의 개념을 정확히 이해하고, 커스텀 유틸리티 작성 시 각각의 역할과 차이를 구분할 수 있게 되었습니다.🔍 배경 / 문제 상황
Tailwind CSS를 커스터마이징하는 과정에서 글씨 크기를 text-1, text-2 처럼 직관적으로 쓰고 싶었는데,
cn함수를 사용하며 text-* 네이밍은 Tailwind 기본과 충돌해 문제가 발생했습니다.
그래서 font-size-1, font-size-2 같은 네이밍으로 바꾸고 싶었고, 여기서 Tailwind v4의 @theme + @Utility 조합이 필요하다는 걸 알게 되었습니다.
✅ 핵심 정리 / 해결 방법
문제를 해결하기 위해 Tailwind의 디자인 시스템에 맞춰 유틸리티를 재정의했습니다.
1. @theme — 테마 변수 추출
tailwind.config.ts의 theme 값을 CSS 변수로 노출2. @Utility — 단일 유틸리티 클래스 정의
역할: 단 하나의 속성을 정의하는 Tailwind 유틸리티 작성 전용
장점: Tailwind의 충돌 해결 로직(
cn포함)과 호환됨➡️ font-size-10, font-size-11 같은 클래스가 자동 생성되고
cn('font-size-10', 'font-size-12')에서도 Tailwind 규칙대로 올바르게 충돌이 해소됩니다.
3. @layer utilities — 다수의 유틸리티 정의
역할: 여러 개의 커스텀 유틸리티를 정의할 때 사용
특징:
theme()함수 직접 사용 불가 → 대신@theme에서 정의한 CSS 변수를 참조해야 함최종 구조 예시
✅ 핵심 차이 요약
@theme@utility@layer utilities🤔 왜
@utility를 써야 할까? → 패턴 인식Tailwind는
text-*,bg-*,font-size-*처럼 패턴 기반 유틸리티를 정의해 두고,같은 속성에 해당하는 클래스들이 동시에 존재하면 마지막 것만 남도록 충돌 로직을 적용합니다.
@Utility로 작성하면 font-size-* 패턴이 Tailwind에 등록됨
@layer utilities로 작성하면 Tailwind 입장에서는 그냥 두 개의 커스텀 클래스
@Utility vs @layer utilities 차이점
@utility font-size-*처럼 패턴을 주면 다수의 변형 클래스 생성 가능theme()함수와@theme변수를 직접 사용 가능@Utility
font-size-*,color-*등)@layer utilities
@apply같은 Tailwind 도우미 사용 가능 (flex-center,scrollbar-none등)theme()직접 접근 불가라는 제약 있음요약
font-size-*,color-*,spacing-*같은 패턴 속성flex-center,scrollbar-none,rotate-y-180같은 개별 유틸리티 모음결론
🧠 느낀점 또는 생각 메모
Tailwind v4는 기존의
@layer중심 방식에서 더 발전해, 테마 값 → 유틸리티 생성 흐름을@theme와@utility로 분리해준다는 것을 알았습니다.특히 @Utility는 Tailwind의 패턴 인식 기반 충돌 해결 로직과 연결되어 있어, cn 같은 함수와 함께 사용할 때도 일관되게 작동한다는 점이 핵심 배움이었습니다.
실무적으로는
@layer utilities@theme → @utility이렇게 나눠 적용하는 것이 가장 깔끔하고 유지보수에 적합하다고 느꼈습니다.
📚 래퍼런스
Beta Was this translation helpful? Give feedback.
All reactions