CSS伪类可以命名空间吗?

时间:2012-06-21 19:18:24

标签: css css3 namespaces css-selectors pseudo-class

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

*|div

将命名空间命名为伪类是否有效?例如:

*|:first-child

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

Here's a fiddle

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

1 个答案:

答案 0 :(得分:5)

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

通用选择器仅在没有命名空间的情况下用于其他简单选择器和伪元素(这就是.foo#target[type="text"],{{1}等选择器的原因}和:first-child是有效的,通常用于HTML等语言,其中CSS最常用于样式化。来自spec

  

如果由::before表示的通用选择器(即没有名称空间前缀)不是sequence of simple selectors选择器的唯一组件,或者后面紧跟pseudo-element,那么{{可以省略1}},并隐含通用选择器的存在。

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

|

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

:

/* These are all invalid */ *|:first-child ns|::first-letter |::before 命名空间中选择元素时也是如此:

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

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

ns