Zagnieżdżanie (&)
.rodzic { … &:hover { … } .dziecko { … } @media (…) { … } }
Reguły można pisać wewnątrz innych reguł, jak dawniej potrafiły tylko Sass czy Less. Zagnieżdżony selektor odnosi się do zewnętrznego; znak & zastępuje zewnętrzny selektor tam, gdzie potrzebujesz go jawnie – przy stanach (&:hover), selektorach złożonych (&.active) lub na końcu (.dark &).
Wartości
- .dziecko { } – to samo co
.rodzic .dziecko. - &:hover, &.active – bez spacji: ten sam element ze stanem lub klasą.
- > li, + p – kombinator na początku:
.rodzic > li. - .dark & –
&na końcu:.dark .rodzic. - @media, @supports, @container, @layer – zagnieżdżać można też @-reguły; deklaracje w nich dotyczą zewnętrznego selektora.
Przykłady
Cały komponent w jednym bloku:
.card {
padding: 12px;
border: 1px solid #ddd;
& h3 {
margin: 0 0 6px;
color: #01579b;
}
&:hover { border-color: #0088d1; }
&.highlighted { background: #fff3e0; }
@media (min-width: 700px) {
padding: 20px;
}
}
Odpowiada to regułom .card, .card h3, .card:hover, .card.highlighted i @media (min-width: 700px) { .card { padding: 20px } }.
Na co uważać
- CSS nie potrafi składać nazw jak Sass (
&__titledla.card__title) –&zastępuje cały selektor, a nie kawałek tekstu. - Zewnętrzna lista selektorów zachowuje się jak
:is(): w.a, #b { .c { } }selektor.cma specyficzność1-1-0także wewnątrz.a. - Pełna obsługa: Chrome od 120, Firefox od 117, Safari od 17.2. Chrome 112–119 i Safari 16.5–17.1 nie znały zagnieżdżonego selektora zaczynającego się od nazwy elementu (
h3 { }); forma& h3działa wszędzie. Starsze przeglądarki odrzucają zagnieżdżone reguły – strona musi działać bez nich. - Głębokie zagnieżdżanie wiąże CSS ze strukturą HTML i podnosi specyficzność tak samo jak długie selektory. Zwykle wystarczą dwa lub trzy poziomy.
Obsługa w przeglądarkach
Baseline – szeroko dostępne: we wszystkich popularnych przeglądarkach od grudnia 2023, za szeroko dostępne uznawane od czerwca 2026. Od wersji: Chrome 112 (w pełni od 120), Firefox 117, Safari 16.5 (w pełni od 17.2). Stan: październik 2026 (MDN browser-compat-data).
Zobacz też:
:is()
Specyficzność i kaskada
@media
Kombinator potomka (spacja)
@scope