作为文档语言的一部分,名称空间不直接应用于伪类或伪元素,因为它们是用CSS定义的,而不是文档语言(例如XML)。但是,元素类型和属性是在文档语言中定义的,而不是CSS,这就是它们可以命名空间的原因。因此,在一系列简单的选择器中,通用选择器具体指“任何类型”。
没有命名空间中使用时(这是通用选择只暗示其他简单的选择和伪元素为什么选择像.foo
,#target
,[type="text"]
,:first-child
和::before
是有效的,并且通常与语言一样使用HTML,其中CSS最常用于造型)。从spec:
如果*
(即,没有一个命名空间前缀)表示的通用选择不是一个sequence of simple selectors选择器的唯一部件或之后紧接着一个pseudo-element,则*
可以被省略,并且普遍隐含选择器的存在。
因此,在你的榜样,选择是无效的,因为有没有一个普遍的选择或|
和:
之间的类型选择:
/* These are all invalid */
*|:first-child
ns|::first-letter
|::before
如果您指定一个命名空间,你必须指定通用选择,如果你不选择一个特定的类型,而不是:
*|*:first-child
*|*::before
在ns
选择元素时也是一样命名空间:
ns|*:first-child
ns|*::before
或选择不在一个命名空间元素时:
|*:first-child
|*::before
请不要混淆伪类和伪元素 - 它们是两个不同的东西。 – BoltClock
噢,对不起,我明白不同之处(注意这个问题确实会说“伪类”,我刚刚得到了错误的标题!) –
我只是碰到了你的错误报告:) https://bugs.webkit。 org/show_bug.cgi?id = 89748 – BoltClock