Cascade Layers (Experimental)
CSS Cascade Layers를 사용하여 SEED 스타일의 우선순위를 제어하는 방법을 알아봅니다.
Tailwind CSS 4 등 CSS Cascade Layer를 사용하는 CSS 프레임워크와 SEED 컴포넌트를 함께 사용할 때, 프레임워크의 유틸리티 클래스로 SEED 컴포넌트 스타일을 오버라이드하려면 다음과 같은 설정이 필요합니다.
@layerdirective로 래핑된 버전의 SEED CSS 사용- 레이어 간 적절한 우선순위 설정
CSS Cascade Layers는 Chrome 99+, Safari 15.4+, Firefox 97+ 이상에서 지원됩니다. (Can I Use)
개요
기본적으로 SEED CSS는 @layer 없이 제공됩니다. 이때 @layer directive 없이 정의된 unlayered 스타일은 layered 스타일보다 항상 높은 우선순위를 갖습니다. (MDN)
이 문제를 해결하기 위해 SEED는 @layer로 래핑된 CSS 파일을 별도로 제공합니다.
설정
base.css 대신 base.layered.css 사용
레이어 순서 커스터마이징
seed-base 및 seed-components 레이어와 다른 레이어의 선언 순서를 적절히 조절합니다.
Tailwind CSS
Tailwind CSS 4 사용 시 유틸리티 클래스를 사용하여 SEED 컴포넌트 스타일을 오버라이드하려면, @layer 선언에서 Tailwind utilities 레이어가 seed-components 레이어보다 높은 우선순위를 가지도록 설정해야 합니다.
번들러 설정
번들러의 module resolution 설정에 seed-layered condition을 추가하세요. 이 설정을 통해 SEED React 컴포넌트가 내부적으로 CSS를 import할 때, 자동으로 layered 버전을 사용합니다.
vite.config.ts
Vite conditions 옵션에 대해 알아봅니다.
Chunk Splitting 사용 시 레이어 순서 문제
번들러가 CSS를 여러 청크로 분리하는 경우, @layer seed-components { ... } 블록이 포함된 청크가 다른 @layer 선언보다 먼저 로드되면서 레이어 우선순위가 의도한 것과 달라질 수 있습니다.
HTML에 @layer 선언을 인라인하여 모든 <link> 태그보다 먼저 로드되도록 보장할 수 있습니다.
transformIndexHtml 플러그인 훅으로 <head>의 맨 앞에 <style> 태그를 삽입합니다.
SEED의 레이어 구조
SEED는 두 개의 레이어를 사용합니다.
| 이름 | 내용 | 파일 | 비고 |
|---|---|---|---|
seed-base | 디자인 토큰, 글로벌 스타일, keyframes | base.layered.css | 별도 import 필요 |
seed-components | 컴포넌트 스타일 | recipes/*.layered.css | SEED React 컴포넌트 사용 시 자동 import |
관련 문서
Tailwind CSS
Tailwind CSS에서 SEED 토큰을 유틸리티 클래스로 사용하는 방법을 알아봅니다.
Last updated on