CSS Nesting
은 CSS 작성 시 선택자 간의 관계를 계층 구조를 통해 명확하게 표현할 수 있는 방법이자, 최신 CSS 기능 중 하나이다.
본래 CSS Nesting
은 Sass
와 같은 CSS
전처리기기를 통해 제공 받을 수 있는 기능이였으나, 무려 현재CSS
에서 2023년 기준 따끈따끈하게 사용할 수 있게 되었다!
One of our favorite CSS preprocessor features is now built into the language: nesting style rules.
https://www.w3.org/TR/css-nesting-1/
<div className="container">
<div className="foo">
난 첫번째야
<div className="bar">난 두번째야</div>
</div>
</div>
Before
.container {
background: blanchedalmond;
}
.container > .foo {
color: red;
}
.container > .foo > .bar {
color: blueviolet;
}
After
pure css
로 가능해졌다&
키워드를 명시적으로 붙여야 한다.
.container {
background: blanchedalmond;
& .foo {
color: red;
& .bar {
color: blueviolet;
}
}
}
css nesting으로 구성
tagName을 중첩할때
HTML
요소는 현재 앞에 &
기호가 있거나 :is()
로 래핑되어 있어야 한다.card {
h1 {
/* 🛑 & 키워드나 :is 키워없이 태그선택 금지!*/
}
}
.card {
& h1 {
}
/* or */
:is(h1) {
}
}
BEM 패턴에서의 연결
BEM
패턴을 사용하는데 해당 BEM
패턴을 CSS
에 적용하면 어떻게 될까?CSS selector
는 문자열이 아니라 객체 참조이므로 CSS
중첩에서는 작동하지 않는다
.card {
&--header {
/* ".card--header"가 선택 ❌ */
}
}