4

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

*|div

命名伪类是否有效?例如:

*|:first-child

它似乎在基于 WebKit 的浏览器中工作,它似乎不适用于 IE9(IE9 以下根本不支持命名空间)和 Firefox。我不在乎它在哪些浏览器中工作/不工作,我只需要知道它是否是一个有效的构造。

这是一个小提琴

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

4

1 回答 1

6

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

通用选择器仅在没有命名空间的情况下用于其他简单选择器和伪元素(这就是为什么选择器如.foo#target、和是有效的[type="text"],并且通常与 HTML 等语言一起使用,其中 CSS 最常用于样式设置)。从规格:first-child::before

如果由*(即没有命名空间前缀)表示的通用选择器不是简单选择器选择器序列的唯一组成部分或紧随其后的是伪元素,则*可以省略 并暗示通用选择器的存在。

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

/* These are all invalid */
*|:first-child
ns|::first-letter
|::before

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

*|*:first-child
*|*::before

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

ns|*:first-child
ns|*::before

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

|*:first-child
|*::before
于 2012-06-21T19:20:03.437 回答