Что означает * | * это значение в CSS?

Я только что увидел это: *|*:link с Firebug. По-видимому, это стиль по умолчанию, который добавляет Firefox, но что означает *|*?

Ответ 2

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

Как уже упоминалось, селектор *|*:link представляет любой элемент в любом пространстве имен, которое является невидимой гиперссылкой (:link). Чтобы быть ясным, префикс *| означает определенные элементы в любом пространстве имен, включая:

  • Элементы в пространстве имен по умолчанию (например, XHTML)
  • Элементы в любом другом пространстве имен (например, XUL в Firefox)
  • Элементы, которые не находятся в пространстве имен

В CSS есть модуль, посвященный объявлениям пространства имен.

Тип документа определяет, какие элементы следует указывать как гиперссылки:

  • В HTML и XHTML это всегда элемент a с атрибутом href.

  • В XUL я считаю, что это элемент label.text-link с атрибутом href.

Обратите внимание, что пространства имен CSS полезны только при использовании CSS для создания XML-документов или других типов документов, которые одинаково определяют пространства имен. Сюда входят страницы XHTML с пользовательскими пространствами имен XML. В обычных HTML-документах обычно нет необходимости использовать префиксы пространств имен в селекторах.

Тем не менее, браузеры объявляют пространство имен по умолчанию в своих таблицах стилей своих пользователей, которое в любом случае соответствует XHTML для HTML/XHTML, чтобы обеспечить совместимость с другими языками на основе XML. В случае с Firefox это очевидно для работы с XHTML и XUL:

@namespace url(http://www.w3.org/1999/xhtml); /* set default namespace to HTML */
@namespace xul url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

Поскольку (X) элементы HTML живут в пространстве имен по умолчанию, селекторам для сопоставления только этих элементов не обязательно должно быть пространство имен с префиксом. Это техническая причина, по которой, как я уже упоминал выше, нет необходимости использовать префиксы пространства имен в селекторах.

Обратите внимание, что если вы хотите настроить таргетинг на любой тип элемента с помощью префикса пространства имен, там должен быть * с правой стороны, поэтому что-то вроде *|:link будет недействительным. Подробнее см. этот ответ.