:where()

Кратко
Функция-псевдокласс :where()
принимает один или несколько селекторов в качестве аргумента. Браузер при чтении применяет стили к любому из селекторов-аргументов.
:where()
похож на :is()
по своей механике и также полностью поддерживается во всех стабильных браузерах с января 2021 года. Различие заключается в специфичности: у :where()
она нулевая, а у :is()
равна наиболее специфичному из переданных селекторов.
Пример
Применим стили для ссылок, вложенных в <header>
, <main>
или <footer>
:
:where(header, main, footer) a { color: blue; }
Без использования :where()
пришлось бы перечислять селекторы:
header a, main a, footer a { color: blue; }
Как пишется
Любой из переданных селекторов:
:where(header, main, footer) { color: blue; }
<header>
с любым из переданных классов:
header:where(.content-header, .section-header) { color: blue; }
Как понять
Можно объяснить работу :where() как «возьми все селекторы из списка, но не добавляй им веса». Это полезно, если вы хотите применить стили к нескольким селекторам и при этом обойтись без перечисления, вдобавок не переживая о повышенной специфичности итогового селектора. Пример ниже демонстрирует возможность легко переопределить свойства, заданные с помощью :where():
Разница специфичности между :where()
и :is()
Не забываем про разницу в специфичности :where()
и :is()
. Несмотря на то, что :where()
расположен ниже, текст ссылок будет окрашен в красный цвет за счёт специфичности селекторов, переданных в псевдокласс :is()
:
:is(header, main, footer) a { color: red; } :where(header, main, footer) a { color: blue; }
По этой же причине текст внутри <div> с классом meow
будет синим:
div.meow { color: blue; } div:where(.meow) { color: red; }
Прощающие селекторы
Псевдоклассы :where()
и :is()
относятся к «прощающему списку селекторов». Невалидный селектор в списке аргументов не приведёт к игнорированию валидных селекторов.
Стили ниже применятся к <span>
, а нерабочий селектор :some-unsupported-feature
будет проигнорирован:
:where(span, :some-unsupported-feature) { color: blue; } Скопировать
Тут та же история:
:is(span, :some-unsupported-feature) { color: blue; } Скопировать
А вот если указать неподдерживаемое свойство :some-unsupported-feature
в перечислении, то всё сломается, не сработает ни один из селекторов:
span, :some-unsupported-feature { color: red; }