-
tailwindcss 중복 클래스 줄이기 (@layer, @apply)React 2023. 5. 6. 12:47
tailwindcss의 가장 큰 문제점은 스타일이 많이 들어가면, 태그에 클래스 이름이 너무나도 길어진다는 점이다.
이를 해소하기 위해서 여러 방법을 사용할 수 있겠지만, 여기서는 @layer와 @apply를 사용하여 중복 클래스를 글로벌하게 사용하는 법에 대해서 다룬다.
tailwindcss를 설정하고 나서 기본적인 globals.css의 내용은 다음과 같을 것이다.
@tailwind base; @tailwind components; @tailwind utilities; /* reset css https://meyerweb.com/eric/tools/css/reset/ */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; }tailwindcss는 기본적으로 최상단의 @tailwind base, components, utilities를 통해 세 종류로 나뉜 스타일을 CSS에 삽입하게 된다.
여기에 @layer와 @apply를 사용하여 추가적으로 커스텀 클래스를 지정할 수 있다.
@tailwind base; @tailwind components; @tailwind utilities; @layer base { /* reset css https://meyerweb.com/eric/tools/css/reset/ */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } }우선 기존의 CSS 초기화를 위해 작성된 스타일은 base에 넣어준다.
base에는 기본 스타일이 등록된다.
그리고 컴포넌트의 클래스에 주입될 스타일을 다음과 같이 작성할 수 있다.
/* 생략 */ @layer components { .custom-div { @apply border-4 border-emerald-500 p-2 m-4 text-lg hover:bg-blue-600 active:translate-y-1; } }@layer를 사용하여 커스텀 클래스 셋이 속한 버킷(base, components, utilities)을 지정한다.
@apply를 통해서 커스텀 tailwindcss를 클래스명에 적용할 수 있다.
위와 같이 작성된 .custom-div는 어떤 컴포넌트에서도 사용될 수 있으며, 잘 적용되는 것을 확인할 수 있다.
🌸 utilities는 유틸리티와 관련된 클래스가 지정되는 곳으로, 공식문서의 예제로는 filter가 된 요소와 되지 않은 요소의 스타일 차이를 줄 때 사용될 수 있다.
꼭 @layer로 구분하지 않아도, @apply를 통해서 추가으로 유틸리티 클래스를 설정할 수 있다.
https://tailwindcss.com/docs/functions-and-directives#layer
Functions & Directives - Tailwind CSS
A reference for the custom functions and directives Tailwind exposes to your CSS.
tailwindcss.com
'React' 카테고리의 다른 글
Vite를 사용하여 React 프로젝트 시작하기 (0) 2023.05.15 React18의 <Suspense>에 대해서 (0) 2023.05.11 React 정리 (0) 2023.04.29 유지보수하기 좋은 React 코드를 작성하는 방법에 대한 고찰 (0) 2023.04.13 react-router-dom의 HashRouter 사용 (0) 2023.04.08