& nesting selector
Baseline 2023
Newly available
Since December 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
CSS &
중첩 선택자 는 CSS 중첩을 사용할 때 부모와 자식 규칙 사이의 관계를 명시적으로 나타냅니다. 이는 중첩된 자식 규칙 선택자가 부모 요소를 기준으로 갖도록 합니다. &
중첩 선택자가 없다면 자식 규칙 선택자는 자식 요소를 선택하게 됩니다. 이 자식 규칙 선택자는 :is()
내부에 존재하는 것과 동일한 특이성 가중치를 가집니다.
참고 :
자식 규칙은 자식 요소 선택자를 의미하지 않습니다. 자식 규칙은 &
중첩 선택자 사용 여부에 따라 부모 요소 혹은 자식 요소를 대상으로 할 수 있습니다.
중첩 스타일 규칙을 사용하지 않는 경우, &
중첩 선택자는 범위 루트를 나타냅니다.
구문
parentRule {
/* 부모 규칙 스타일 속성 */
& childRule {
/* 자식 규칙 스타일 속성 */
}
}
&
중첩 선택자와 공백
다음 코드는 &
중첩 선택자를 사용하지 않고 중첩이 이루어진 경우를 나타냅니다.
.parent-rule {
/* 부모 규칙 속성 */
.child-rule {
/* 자식 규칙 속성 */
}
}
브라우저가 중첩 선택자를 파싱할 때 이는 자동적으로 선택자 사이에 공백을 추가하여 새로운 CSS 선택자 규칙을 생성합니다. 다음 코드는 중첩이 아닌 규칙과 상응합니다.
.parent-rule {
/* 부모 규칙 스타일 속성 */
}
.parent-rule .child-rule {
/* .parent-rule 조상 요소에 대한 .child-rule 자손 요소의 스타일 속성 */
}
중첩 규칙이 pseudo-class
를 사용할 때나 컴파운드 선택자를 생성할 때처럼 공백 없이 부모 규칙에 붙여지길 원한다면, 이를 위해 &
중첩 선택자는 반드시 즉시 앞에 붙여야 합니다.
항상 적용할 스타일을 제공하고, 또한 일부 스타일을 호버 시에만 적용되도록 중첩하는 예시를 생각해 봅시다. &
중첩 선택자를 포함하지 않으면 공백이 추가되고 부모 규칙 선택자의 호버된 모든 자손에 중첩된 스타일이 적용되는 규칙 집합이 만들어집니다. 그러나 이것은 의도하는 것이 아닙니다.
.parent-rule {
/* 부모 규칙 속성 */
:hover {
/* 자식 규칙 속성 */
}
}
/* 브라우저는 위 중첩된 규칙을 다음과 같이 파싱합니다. */
.parent-rule {
/* 부모 규칙 속성 */
}
.parent-rule *:hover {
/* 자식 규칙 속성 */
}
공백이 없는 &
중첩 선택자를 사용하게 된다면 부모 규칙에 의해 일치하는 요소가 호버 시에 스타일이 적용됩니다.
.parent-rule {
/* 부모 규칙 속성 */
&:hover {
/* 자식 규칙 속성 */
}
}
/* 브라우저는 위 중첩된 규칙을 다음과 같이 파싱합니다. */
.parent-rule {
/* 부모 규칙 속성 */
}
.parent-rule:hover {
/* 자식 규칙 속성 */
}
&
중첩 선택자 추가하기
&
중첩 선택자는 규칙의 맥락과는 반대로 추가될 수도 있습니다.
.card {
/* .card 스타일 */
.featured & {
/* .featured .card 스타일 */
}
}
/* 브라우저는 위 중첩 규칙을 다음과 같이 파싱합니다. */
.card {
/* .card 스타일 */
}
.featured .card {
/* .featured .card 스타일 */
}
&
중첩 선택자는 여러 번 추가될 수도 있습니다.
.card {
/* .card 스타일 */
.featured & & & {
/* .featured .card .card .card 스타일 */
}
}
/* 브라우저는 위 중첩 규칙을 다음과 같이 파싱합니다. */
.card {
/* .card 스타일 */
}
.featured .card .card .card {
/* .featured .card .card .card 스타일 */
}
예제
아래 두 예제는 모두 같은 출력값을 나타냅니다. 첫번째 예제는 일반 CSS 스타일을 사용하고 두번째 예제는 &
중첩 선택자를 사용합니다.
일반 CSS 스타일 사용하기
이 예제는 일반 CSS 스타일을 사용합니다.
HTML
<p class="example">
이 문단은 <a href="#">링크</a>를 포함합니다. 호버하거나 포커스를 맞춰보세요.
</p>
CSS
.example {
font-family: system-ui;
font-size: 1.2rem;
}
.example > a {
color: tomato;
}
.example > a:hover,
.example > a:focus {
color: ivory;
background-color: tomato;
}
결과
&
으로 중첩된 CSS 스타일 사용하기
이 예제는 중첩 CSS 스타일을 사용합니다.
HTML
<p class="example">
이 문단은 <a href="#">링크</a>를 포함합니다. 호버하거나 포커스를 맞춰보세요.
</p>
CSS
.example {
font-family: system-ui;
font-size: 1.2rem;
& > a {
color: tomato;
&:hover,
&:focus {
color: ivory;
background-color: tomato;
}
}
}
결과
중첩 규칙 밖에서 &
사용하기
명세서
Specification |
---|
CSS Nesting Module # nest-selector |
브라우저 호환성
BCD tables only load in the browser
같이 보기
- CSS 중첩 사용하기
- CSS 중첩 모듈
- CSS 선택자 모듈