Кратко
- В феврале 2018 года W3C описал ещё не названный псевдокласс с нулевой специфичностью. Ноябрьский черновик дал ему имя
:where()и показал конфликт правил для ссылки. - Условия внутри
:where()участвуют в сопоставлении элементов, но не прибавляют специфичности. Всё, что написано вне скобок, продолжает считаться обычным образом.
Начнём с двух правил. a:not(:hover) убирает подчёркивание у ссылки, над которой сейчас нет указателя. nav a возвращает подчёркивание ссылкам меню. Кажется, что второе правило можно просто поставить ниже. У CSS другой порядок счёта: псевдокласс в первом селекторе весит больше, чем добавочное имя элемента во втором. Линия не появляется. Программист тянется к новому классу, затем к ещё одному, а под конец к !important. Для одной черты под текстом это уже похоже на заседание чрезвычайной комиссии.
Черновик Selectors Level 4 от 21 ноября 2018 года разбирает именно эту пару. Общее правило записывается как a:where(:not(:hover)). Ссылки без наведения остаются выбранными, зато условие внутри :where() больше не поднимает специфичность. Наружный a сохраняет свой вес; nav a получает преимущество внутри меню. Автор общей таблицы стилей продолжает задавать исходный вид, а автор меню может менять его без игры в синтаксические мышцы.
Сначала появилась идея, затем вывеска. Текст от 2 февраля 2018 года упоминал псевдокласс типа :matches() с нулевой специфичностью, оставляя имя открытым. В ноябре в документе появилось :where(); сообщение рабочей группы CSS отдельно отметило новое название. История здесь не о том, что браузер научился находить ссылки. Он давно умел это делать. Авторам понадобился способ искать точно и не превращать точность в право навсегда диктовать внешний вид.
Селектор отвечает сразу на два вопроса: какие элементы получают правило и какой вес оно имеет при столкновении деклараций. :where() разделяет эти роли. В черновике от 7 мая 2022 года пример .qux:where(em, #foo#bar#baz) получает специфичность (0,1,0). Грозные идентификаторы внутри функции участвуют в выборе элементов, но очков не приносят. Класс .qux снаружи приносит одно. Ноль относится к функции и её аргументам; остальной селектор остаётся на табло.
Эта арифметика полезна тем, кто выпускает общие стили для многих страниц. Базовое правило может точно находить нужные кнопки или ссылки, а команда конкретного продукта легко меняет детали в своём контексте. Библиотеке не приходится заранее знать каждое будущее меню. Продукту не приходится воевать с библиотекой длиной селектора. Браузер выполняет общий расчёт; авторы сами решают, сколько веса дать исходному правилу.
Черновик от 11 ноября 2022 года описывает и работу терпимого списка селекторов: неверный элемент списка может быть отброшен, а верные сохранены по установленным правилам разбора. Это конкретное свойство синтаксиса, а не разрешение писать что угодно. Хронология публикаций W3C фиксирует этапы 2018 и 2022 годов. Вся история помещается в одном подчеркивании: общее правило может точно знать свой адрес и всё же позволить местному автору принять окончательное решение.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров





