【发布时间】:2016-05-05 05:58:50
【问题描述】:
我很困惑为什么这个例子不起作用:
CSS:
p {
color: red;
}
div:not(.exclude) p {
color: green;
}
HTML:
<div>
<div class="exclude">
<p>I should be red</p>
</div>
<div>
<p>I should be green</p>
</div>
</div>
最终结果是<p> 都是绿色的,但我预计第一个是红色的。 Here's a JSFiddle.
有趣的是,我发现了三种不同的方法来让它工作:
-
Remove 来自 HTML 的顶级
<div> -
Change 顶级
<div>到不同的元素(例如<section>) -
Add 一个额外的
div到第二个 CSS 选择器的开头 (div div:not(.exclude) p)
还有另一种奇怪的方法来打破它:
- 使用解决方案 2 作为基础,wrap 另一个
<div>在<section>周围
这个选择器只适用于一个元素;你不能用它来排除所有的祖先。例如,
body :not(table) a仍将应用于表内的链接,因为<tr>将匹配选择器的:not()部分。
这是有道理的,但我认为这里不会发生这种情况。由于<div class="exclude"> 与其直接子<p> 之间没有任何内容,因此无论嵌套在什么内部,它都应该触发该规则。我错过了什么?如果有人能帮助我理解这一点,我将不胜感激。
【问题讨论】:
标签: html css dom css-selectors