"매 CSS 의 component 의 안에 — 매 tagged template literal 로 매 React component + style 의 atomic unit". Glen Maddern, Max Stoiber (2016). 매 CSS-in-JS 의 reference. 2026 매 styled-components v6+ 가 매 React Server Components 의 partial 지원 — 매 RSC native era 에서 매 Tailwind / vanilla-extract / CSS Modules 의 challenge.
매 핵심
매 mechanic
매 tagged template literal: ``styled.button`color: red```.
매 runtime 의 unique class name 의 generation, 매 stylesheet 의 inject.
// app/layout.tsx — registry pattern for SSR
importStyledRegistryfrom"./StyledRegistry";exportdefaultfunctionRoot({children}){return<html><body><StyledRegistry>{children}</StyledRegistry></body></html>;}
매 결정 기준
상황
Approach
React SPA, 매 dynamic theming heavy
styled-components / emotion
React Server Components 의 native
vanilla-extract / CSS Modules / Tailwind
Utility-first, design system
Tailwind CSS v4
Build-time zero-runtime
vanilla-extract / Linaria
Component lib for distribution
CSS Modules + tokens
기본값 (2026): 매 새 React project — Tailwind 의 default. styled-components 의 dynamic + theme heavy app 에 still-valid.
언제: dynamic prop-based styles 의 heavy, theme switching 의 first-class, existing CSS-in-JS app.
언제 X: 매 RSC-first new app — runtime cost + 'use client' boundary 의 friction. 매 Tailwind / vanilla-extract 의 prefer.
❌ 안티패턴
Inline style prop interpolation 의 every render: 매 className thrash 의 perf hit. 매 attrs / static class 의 사용.
No $ prefix on props: 매 DOM warning (unknown attribute). 매 transient prop 의 사용 — $primary.
createGlobalStyle 의 multiple instances: 매 conflict.
SSR without registry: 매 FOUC. Next.js registry 의 setup.