CSS伪类可以命名空间吗?

Jam*_*ice 3 css namespaces css-selectors pseudo-class css3

在CSS中使用命名空间时,您可以div使用命名空间类型选择器选择"任何或无命名空间"中的任何元素:

*|div
Run Code Online (Sandbox Code Playgroud)

将伪类命名为有效的CSS吗?例如:

*|:first-child
Run Code Online (Sandbox Code Playgroud)

它似乎在基于WebKit的浏览器中工作,似乎在IE9(IE9下面根本不支持命名空间)和Firefox中都不起作用.我不关心它做什么/不用的浏览器,我只需要知道它是否是一个有效的构造.

这是一个小提琴.

从我在CSS语法中可以看出,它是无效的.但我可能误读了语法.

Bol*_*ock 5

命名空间作为文档语言的一部分,不直接应用于伪类或伪元素,因为它们是在CSS中定义的而不是文档语言(例如XML).但是,元素类型和属性在文档语言中定义而不是CSS,这就是它们可以命名空间的原因.因此,在一系列简单选择器中,通用选择器具体表示"任何类型".

在没有命名空间的情况下使用时,通用选择器仅隐含在其他简单的选择器和伪元素中(这就是选择器喜欢.foo,#target[type="text"],:first-child并且::before有效的原因,并且通常与HTML最常用于样式的HTML之类的语言一起使用).从规格:

如果由*(即没有名称空间前缀)表示的通用选择器不是简单选择序列序列的唯一组件或者紧跟着伪元素,则*可以省略并且隐含通用选择器的存在.

因此,在您的示例中,选择器无效,因为在|和之间既没有通用选择器也没有类型选择器::

/* These are all invalid */
*|:first-child
ns|::first-letter
|::before
Run Code Online (Sandbox Code Playgroud)

如果指定命名空间,则必须指定通用选择器,如果不选择特定类型:

*|*:first-child
*|*::before
Run Code Online (Sandbox Code Playgroud)

选择ns命名空间中的元素时也是如此:

ns|*:first-child
ns|*::before
Run Code Online (Sandbox Code Playgroud)

或者在选择不在命名空间中的元素时:

|*:first-child
|*::before
Run Code Online (Sandbox Code Playgroud)