CSS Module 범위

Next CSS Modules 경계

CSS Modules는 파일별로 className을 해시 처리해 충돌을 줄인다. 하지만 global selector, reset, 서버/클라이언트 컴포넌트 import 위치, 조건부 class 조합, 디자인 토큰 관리를 함께 보지 않으면 스타일이 흩어진다.

01

컴포넌트 범위 결정

해당 스타일이 특정 컴포넌트에 닫혀 있는지, 앱 전체에 필요한지 먼저 나눈다.

전역 reset은 module에 숨기지 않는다
02

로컬 클래스 사용

module 파일을 import하고 styles.card처럼 객체 속성으로 className을 연결한다.

문자열 class 이름을 직접 쓰면 해시와 맞지 않는다
03

전역 예외 처리

html, body, third-party selector는 global CSS나 :global을 명시적으로 사용한다.

전역 예외를 작게 유지한다
04

조건부 조합

상태별 class는 배열, clsx, template 조합으로 명확히 만들고 undefined를 피한다.

동적 key 오타는 런타임에서 조용히 빠진다
05

우선순위 확인

module class, global class, CSS variable, cascade layer가 의도대로 적용되는지 DevTools에서 본다.

scoped라고 cascade가 사라지지는 않는다
module
컴포넌트 지역 스타일 카드, 버튼, 섹션처럼 특정 컴포넌트에 닫힌 스타일에 적합하다.
클래스 충돌을 줄인다
global
앱 전체 규칙 reset, font face, CSS variable, body 배경처럼 전역 계약에 쓴다.
범위를 넓히기 전에 이유를 둔다
:global
예외적 전역 선택자 서드파티 DOM이나 외부 라이브러리 selector를 다룰 때 사용한다.
남용하면 module 장점이 줄어든다
tokens
일관된 값 색상과 spacing 반복은 CSS variable이나 theme token으로 모은다.
임의값 중복을 줄인다

CSS Modules 스타일 확인

클래스 연결 styles 객체에 없는 key를 참조하지 않는지 확인한다.
전역 누수 :global 규칙이 예상보다 넓은 DOM을 덮지 않는지 본다.
DevTools 실제 적용된 selector와 우선순위가 의도와 맞는지 확인한다.