CSS3:不是完全支持Firefox的否定伪类吗?

时间:2011-03-21 14:08:50

标签: css css3 css-selectors

我正在尝试使用规范中定义的CSS3:not伪类。根据{{​​3}}:

  

否定伪类,:不是(X),是   一个简单的功能表示法   选择器(不包括否定   伪类本身)作为一个论点。   它代表了一个不是的元素   由其论点

表示

所以我希望能够做到这样的事情:

p:not(.class1, .class2)

但它似乎不适用于Safari或Firefox,它们应该完全支持这个选择器。

当参数是单个选择器时,它确实有效,例如:

以下是显示问题的示例:spec

p:not(.class1)

根据jsFiddle Example博文,该作者建议您应该能够指定多个选择器作为参数。

同样根据此this,Firefox,Safari和Chrome完全支持:not selector。

我是否误解了规范,或者浏览器实际上只对该选择器有部分支持吗?

3 个答案:

答案 0 :(得分:10)

在CSS中,逗号(,)分隔选择器。它不是选择器本身,因此不能在选择器内使用。因此,取决于您是否要将规则应用于

  • 段落不是.class1,段落不是.class2
  • 既没有.class1也没有class2
  • 的段落
  • 段落中没有.class1 .class2

它的

p:not(.class1), p:not(.class2) {
}

p:not(.class1):not(.class2) {
}

p:not(.class1.class2) {
}

顺便说一句,恕我直言,如果可能的话,最好避免使用:not,例如,在这种情况下,有一个适用于所有p的一般规则(具有您想要在{中设置的属性) {1}}规则)和适用于类的规则,并在必要时覆盖第一个规则的属性。

答案 1 :(得分:3)

你可以链接它们(列出它们对我来说也不起作用)......

p:not(.class1):not(.class2) {
  ...  
}

jsFiddle

适用于Chrome 10。

答案 2 :(得分:3)

小心:

p:not(.class1), p:not(.class2) {
}

因为,它与调用p {}相同(当你用“,”分隔时,它意味着联合)。第一个受影响的标签集(没有class1类的p标签)联合第二个受影响的标签集(p标签没有class2类)。