是:not()否定接受后代选择器?

时间:2016-05-18 17:01:33

标签: css css3 css-selectors

我一直在使用:not()伪类来设置事物的样式,而不需要用第二个不必要的声明覆盖它来撤消第一个, 但现在我遇到了一个奇怪的行为,Safari在:not()内接受后代选择器,但Chrome没有。

我使用的是a:not(.blue a)

我搜索了答案,但我仍然不完全理解原因 后代选择器是否真的被规范允许?

这是一个演示:

a:not(.blue a) {
  color: red;
}
<div><a>this one should be in red</a></div>
<div class="blue"><a>this one shouldn't</a></div>

http://codepen.io/oscarmarcelo/pen/YqboQJ?editors=1100

1 个答案:

答案 0 :(得分:1)

Selectors Level 3中,答案是否定的。 :not()表示法仅接受简单选择器

  

6.6.7. The negation pseudo-class

     

否定伪类:not(X)是一个功能符号   一个简单选择器(不包括否定伪类本身)作为   论点。它表示一个未由其表示的元素   参数。

什么是简单选择器?

来自selector syntax

  

简单的选择器是类型选择器,通用选择器,属性选择器,类选择器,ID选择器或伪类。

后代选择器没什么。

HOWEVER ,在Selectors Level 4中,:not()接受复杂选择器,其中包含后代组合子。对于此规范,浏览器支持仍然很弱。

相关问题