Пространства имен как часть языка документа не применяются напрямую к псевдоклассам или псевдоэлементам, поскольку они определены в CSS, а не в языке документа (например, XML). Однако типы и атрибуты элементов определяются на языке документа, а не в CSS, поэтому они могут иметь пространство имен. Следовательно, в последовательности простых селекторов универсальный селектор конкретно означает «любой тип».
Универсальный селектор подразумевается только для других простых селекторов и псевдоэлементов при использовании без пространства имен (поэтому такие селекторы, как .foo
, #target
, [type="text"]
, :first-child
и ::before
, допустимы и обычно используются с такими языками, как HTML, где чаще всего используется CSS). для стайлинга). Из спецификации:
Если универсальный селектор, представленный *
(т. е. без префикса пространства имен), не является единственным компонентом последовательности простых селекторов или сразу за ним следует псевдоэлемент, то *
можно опустить и подразумевать наличие универсального селектора.
Поэтому в вашем примере селектор недействителен, потому что между |
и :
нет ни универсального селектора, ни селектора типа:
/* These are all invalid */
*|:first-child
ns|::first-letter
|::before
Если вы указываете пространство имен, вы должны указать универсальный селектор, если вы не выбираете конкретный тип:
*|*:first-child
*|*::before
То же самое происходит при выборе элементов в пространстве имен ns
:
ns|*:first-child
ns|*::before
Или при выборе элементов, которые не находятся в пространстве имен:
|*:first-child
|*::before
person
BoltClock
schedule
21.06.2012