--- id: wiki-2026-0508-모듈식-css-modular-css title: 모듈식 CSS (Modular CSS) category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Modular CSS, CSS Modules, Component CSS, Scoped Styles] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [css, modules, frontend, architecture] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: css framework: build-tools --- # 모듈식 CSS (Modular CSS) ## 매 한 줄 > **"매 modular CSS = scope by component, not by selector convention"**. 매 BEM/SMACSS — 매 naming convention — 매 human discipline. 매 modern (2026) = 매 build-time scoping (CSS Modules, Vue/Svelte SFC, CSS-in-JS, Tailwind utility, `@scope` native). ## 매 핵심 ### 매 진화 1. **Global** (no scope) — 매 conflict 지옥. 2. **BEM/SMACSS** — naming convention — 매 human-enforced. 3. **CSS Modules** — build-time hash — 매 automated. 4. **CSS-in-JS** (Emotion, styled-components) — 매 runtime + scope. 5. **Tailwind utility** — 매 inline atomic. 6. **Native `@scope`** (Chrome 118+) — 매 browser scope. 7. **Shadow DOM** — 매 web component native scope. ### 매 트레이드오프 - 매 scope 강도 vs runtime cost vs DX. - CSS Modules — 매 zero runtime, 매 build only. - CSS-in-JS — 매 dynamic, 매 runtime cost. - Tailwind — 매 zero CSS bundle (used 만), 매 HTML 매 noisy. ### 매 응용 1. Design system component library. 2. Multi-team monorepo (style 충돌 방지). 3. SSR/streaming (critical CSS extraction). ## 💻 패턴 ### CSS Modules ```css /* Button.module.css */ .button { padding: 0.5rem 1rem; border-radius: 4px; } .primary { background: #3b82f6; color: white; } ``` ```jsx import styles from './Button.module.css'; export const Button = () => ; // 매 빌드 후: class="Button_button__a1b2c Button_primary__d3e4f" ``` ### Native @scope (modern) ```html

Title

Outside

``` ### Vue SFC scoped ```vue ``` ### Svelte (auto-scoped) ```svelte ``` ### Tailwind utility (atomic) ```jsx /* 매 component CSS file 의 X — 매 utility 만 */ ``` ### CSS-in-JS (Emotion) ```jsx import { css } from '@emotion/react'; const buttonStyle = css` padding: 0.5rem 1rem; background: ${props => props.primary ? '#3b82f6' : '#fff'}; `;