CSS селектор :has() — батьківський селектор
CSS псевдоклас :has() вибирає елемент, який містить щось, що збігається з аргументом. Це той самий довгоочікуваний батьківський селектор, якого в CSS не було двадцять років.
Загальний опис
Усі звичні селектори читаються згори вниз: «візьми абзац усередині статті». :has() читається навпаки: «візьми статтю, у якій є зображення».
Раніше так було неможливо — доводилось лізти в JavaScript або чіпляти класи на сервері. Тепер картку з бейджем можна стилізувати одним рядком.
Аргументом може бути будь-який селектор, зокрема з комбінаторами: label:has(+ input:invalid) знайде підпис, за яким одразу йде невалідне поле.
- Порада
-
автор: NagarD:has()чудово поєднується з:not():article:not(:has(img))— статті без зображень. - Нотатка
-
Специфічність
автор: NagarD:has()дорівнює найважчому селектору в дужках, а не нулю (на відміну від:where()).
Синтаксис
:has(<selector-list>)
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| has | 105+ | 121+ | 15.4+ | 91+ | 105+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| has | 105+ | yes | yes | 15.4+ |
Приклади
+ запропонувати свій приклад у пісочниці
Картка, у якій є зображення, отримує іншу сітку.
HTML
<article class="card">
<img src="/img/logo.svg" alt="">
<p>Картка із зображенням</p>
</article>
<article class="card">
<p>Картка без зображення</p>
</article>
CSS
.card:has(img) {
display: grid;
grid-template-columns: 80px 1fr;
gap: 1rem;
}
.card:not(:has(img)) {
padding: 1rem;
background: #f4f4f4;
}
Коментарі
Коментарів ще немає — будьте першим!