我一直在使用: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>
答案 0 :(得分:1)
在Selectors Level 3中,答案是否定的。 :not()
表示法仅接受简单选择器。
6.6.7. The negation pseudo-class
否定伪类
:not(X)
是一个功能符号 一个简单选择器(不包括否定伪类本身)作为 论点。它表示一个未由其表示的元素 参数。
什么是简单选择器?
简单的选择器是类型选择器,通用选择器,属性选择器,类选择器,ID选择器或伪类。
后代选择器没什么。
HOWEVER ,在Selectors Level 4中,:not()
接受复杂选择器,其中包含后代组合子。对于此规范,浏览器支持仍然很弱。