Кратко
СкопированоФункция-псевдокласс :is принимает один или несколько селекторов в качестве аргумента. Браузер применяет стили к каждому из перечисленных селекторов.
Пример
СкопированоСтили применятся при наведении курсора на абзацы, вложенные в теги <header>, <main> или <footer>:
:is(header, main, footer) p:hover { color: red; cursor: pointer;}
:is(header, main, footer) p:hover {
color: red;
cursor: pointer;
}
Без :is пришлось бы перечислять селекторы:
header p:hover,main p:hover,footer p:hover { color: red; cursor: pointer;}
header p:hover,
main p:hover,
footer p:hover {
color: red;
cursor: pointer;
}
Как пишется
СкопированоСлева от двоеточия можно ничего не писать. Внутри скобок селекторы перечисляются через запятую.
Псевдокласс :is можно использовать с любыми CSS-селекторами:
:is— применяет стили к элементам с классами( . btn , . link ) btnиlink.:is— применяет стили к элементам с идентификатором( # header , . nav , a ) header, классомnavи ко всем ссылкам.:is— применяет стили ко всем заголовкам уровня 1, 2 и 3.( h1 , h2 , h3 )
Можно комбинировать :is с другими селекторами для более сложных условий:
article :is(h1, h2, h3) { margin-bottom: 1rem;}
article :is(h1, h2, h3) {
margin-bottom: 1rem;
}
Этот код применяет нижнее поле ко всем заголовкам уровня 1, 2 и 3 внутри элемента <article>.
Псевдокласс :is можно комбинировать с другими псевдоклассами и атрибутами для более гибких селекторов:
:is(a:hover, button:focus) { outline: 2px solid blue;}
:is(a:hover, button:focus) {
outline: 2px solid blue;
}
Этот код применяет обводку к ссылкам при наведении и кнопкам при фокусировке.
Псевдокласс :is не принимает произвольные строки. Он должен содержать валидные CSS-селекторы. Например, значение :is будет недействительным, так как text не является селектором.
С помощью :is не получится обратиться к псевдоэлементам.
Вот так не сработает:
.cat-list:is(::before, ::after) { text-transform: uppercase;}
.cat-list:is(::before, ::after) {
text-transform: uppercase;
}
И так тоже не сработает:
:is(.cat-list::before, .cat-list::after) { text-transform: uppercase;}
:is(.cat-list::before, .cat-list::after) {
text-transform: uppercase;
}
Придётся перечислять селекторы так:
.cat-list::before,.cat-list::after { text-transform: uppercase;}
.cat-list::before,
.cat-list::after {
text-transform: uppercase;
}
Как понять
СкопированоПсевдокласс :is помогает упростить CSS-код, делая его более лаконичным и удобочитаемым. Он улучшает поддержку сложных селекторов, но важно помнить, что он лишь облегчает написание селекторов, не влияя на их базовую функциональность и вес. Проверка корректности написания селекторов и поддержка в браузерах — это ключевые аспекты его использования.
Разница специфичности между :is() и :where()
Скопировано:is по весу будет равен самому специфичному из перечисленных в скобках селекторов.
Вычисленный вес в этом примере будет 111, потому что таким будет вес селектора h1:
:is(h1, #title, h1.title#title) { font-size: 3rem;}
:is(h1, #title, h1.title#title) {
font-size: 3rem;
}
В отличии от этого :where всегда будет иметь вес 0, какие бы селекторы не перечислялись в скобках.
Разница этих поведений может сказаться на итоговых стилях. Учитывайте это.
Прощающие селекторы
СкопированоПсевдоклассы :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;
}
- Chrome 88, поддерживается
- Edge 88, поддерживается
- Firefox 82, поддерживается
- Safari 14, поддерживается