CSS селектор :has() — батьківський селектор


CSS псевдоклас :has() вибирає елемент, який містить щось, що збігається з аргументом. Це той самий довгоочікуваний батьківський селектор, якого в CSS не було двадцять років.

автор: NagarD

Загальний опис

Усі звичні селектори читаються згори вниз: «візьми абзац усередині статті». :has() читається навпаки: «візьми статтю, у якій є зображення».

Раніше так було неможливо — доводилось лізти в JavaScript або чіпляти класи на сервері. Тепер картку з бейджем можна стилізувати одним рядком.

Аргументом може бути будь-який селектор, зокрема з комбінаторами: label:has(+ input:invalid) знайде підпис, за яким одразу йде невалідне поле.

автор: NagarD

Порада

:has() чудово поєднується з :not(): article:not(:has(img)) — статті без зображень.

автор: NagarD
Нотатка

Специфічність :has() дорівнює найважчому селектору в дужках, а не нулю (на відміну від :where()).

автор: NagarD

Синтаксис

:has(<selector-list>)

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
has 105+ 121+ 15.4+ 91+ 105+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
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;
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід