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