Spec-Zone.ru › CSS

:where()

Базовая Широко доступная

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2021 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Функция псевдокласса :where() CSS псевдокласса принимает в качестве аргумента список селекторов и выбирает любой элемент, который можно выбрать одним из селекторов в этом списке.

Разница между :where() и :is() заключается в том, что :where() всегда имеет 0 уровня специфичности, тогда как :is() принимает специфичность самого специфичного селектора в своих аргументах.

Попробуйте

Синтаксис

Псевдокласс :where() требует список селекторов, запятой разделяемого списка одного или нескольких селекторов, в качестве аргумента. Список не должен содержать псевдоэлемент, но допускаются любые другие простые, составные и сложные селекторы.

:where(<complex-selector-list>) {
  /* ... */
}

Допускающее разбор селекторов

Спецификация определяет :is() и :where() как принимающие допускающий список селекторов.

В CSS, если при использовании списка селекторов какой-либо из селекторов является недопустимым, то весь список считается недопустимым. При использовании :is() или :where() вместо того, чтобы считать весь список недопустимым при сбое одного селектора, некорректный или неподдерживаемый селектор будет проигнорирован, а остальные будут использованы.

:where(:valid, :unsupported) {
  /* … */
}

Будет всё ещё корректно проанализирован и сопоставлен с :valid даже в браузерах, которые не поддерживают :unsupported, тогда как:

:valid,
:unsupported {
  /* … */
}

Будет проигнорирован в браузерах, которые не поддерживают :unsupported , даже если они поддерживают :valid.

Примеры

Сравнение :where() и :is()

Этот пример демонстрирует, как работает :where(), а также иллюстрирует разницу между :where() и :is().

Рассмотрим следующий HTML:

<article>
  <h2>:is()-styled links</h2>
  <section class="is-styling">
    <p>
      Here is my main content. This
      <a href="https://mozilla.org">contains a link</a>.
    </p>
  </section>

  <aside class="is-styling">
    <p>
      Here is my aside content. This
      <a href="https://developer.mozilla.org">also contains a link</a>.
    </p>
  </aside>

  <footer class="is-styling">
    <p>
      This is my footer, also containing
      <a href="https://github.com/mdn">a link</a>.
    </p>
  </footer>
</article>

<article>
  <h2>:where()-styled links</h2>
  <section class="where-styling">
    <p>
      Here is my main content. This
      <a href="https://mozilla.org">contains a link</a>.
    </p>
  </section>

  <aside class="where-styling">
    <p>
      Here is my aside content. This
      <a href="https://developer.mozilla.org">also contains a link</a>.
    </p>
  </aside>

  <footer class="where-styling">
    <p>
      This is my footer, also containing
      <a href="https://github.com/mdn">a link</a>.
    </p>
  </footer>
</article>

В этом несколько искусственном примере у нас есть два статьи, каждая из которых содержит раздел, заметку и подвал. Они различаются используемыми классами для обозначения дочерних элементов.

Для группировки выбора ссылок, сохраняя при этом is-styling и where-styling стили отличными, мы могли бы использовать :is() или :where(), следующим образом:

html {
  font-family: sans-serif;
  font-size: 150%;
}

:is(section.is-styling, aside.is-styling, footer.is-styling) a {
  color: red;
}

:where(section.where-styling, aside.where-styling, footer.where-styling) a {
  color: orange;
}

Однако, что если нам позже понадобится переопределить цвет ссылок в подвалах, используя составной селектор, состоящий из селекторов типов с низкой специфичностью?

footer a {
  color: blue;
}

Это не сработает для красных ссылок, потому что селекторы внутри :is() учитываются при подсчёте специфичности всего селектора, а селекторы классов обладают большей специфичностью, чем селекторы элементов.

Однако, селекторы внутри :where() имеют специфичность 0, поэтому оранжевая ссылка в подвале будет переопределена нашим составным селектором, состоящим только из селекторов типов.

Примечание: Вы также можете найти этот пример на GitHub; см. is-where.

Спецификации

Спецификация
Селекторы Уровень 4
# zero-matches

Совместимость браузеров

Рабочие столы Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
:where 88 88 78 74 14 88 79 63 14 15.0 88
forgiving_selector_list 88 88 82 74 14 88 82 63 14 15.0 88

См. также

  • :is()
  • Список селекторов
  • Веб-компоненты

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/:where

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API