
Kim JeongHyeonFrontend Focused Fullstack Developer
네이티브 CSS Nesting 문법, & 셀렉터, 미디어 쿼리 중첩, 브라우저 지원 현황을 정리합니다.
SCSS 없이도 네이티브 CSS에서 중첩 문법을 사용할 수 있게 되었습니다.
/* Before: 반복적인 셀렉터 */
.card { background: white; }
.card .title { font-size: 1.5rem; }
.card .title:hover { color: blue; }
.card .body { padding: 1rem; }
/* After: CSS Nesting */
.card {
background: white;
.title {
font-size: 1.5rem;
&:hover {
color: blue;
}
}
.body {
padding: 1rem;
}
}.button {
background: transparent;
/* &는 부모 셀렉터를 참조 */
&:hover {
background: var(--bg-tertiary);
}
&:disabled {
opacity: 0.5;
}
/* 복합 셀렉터 */
&.primary {
background: var(--text-primary);
color: var(--bg-primary);
}
/* 부모 참조 위치 변경 */
.dark & {
border-color: #333;
}
}.grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
@media (max-width: 768px) {
grid-template-columns: 1fr;
}
}| 브라우저 | 지원 버전 | 출시일 |
|---|---|---|
| Chrome | 120+ | 2023.12 |
| Safari | 17.2+ | 2023.12 |
| Firefox | 117+ | 2023.08 |
| Edge | 120+ | 2023.12 |
모든 주요 브라우저에서 지원됩니다. 프로덕션에서 안전하게 사용할 수 있습니다.
// SCSS: 어떤 셀렉터든 직접 중첩 가능
.card {
h2 { color: red; } // OK in SCSS
p { margin: 0; } // OK in SCSS
}
// CSS Nesting: 요소 셀렉터는 & 필요 (relaxed syntax는 불필요)
.card {
h2 { color: red; } // Chrome 120+에서 OK (relaxed)
& h2 { color: red; } // 모든 지원 브라우저에서 OK
}CSS Modules에서도 네이티브 중첩을 사용할 수 있습니다:
/* Button.module.css */
.button {
padding: 8px 24px;
&:hover {
background: var(--bg-tertiary);
}
&.large {
padding: 12px 32px;
}
}PostCSS의 postcss-nesting 플러그인 없이도 동작합니다.