:where()

: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;
}


Report Page