为什么CSS:not()声明没有过滤掉?
我要选择不是特定类后代的跨度,我们称其为“否”。这是我的CSS:
div:not(.no) span{background-color:#00f;}
这是HTML
<div> <span>yes 1</span>
</div>
<div class="no">
<span>no 1</span>
</div>
<div class="no">
<div>
<span>no 2</span>
</div>
</div>
两个问题:
- 为什么我的CSS同时适用于是1和否2?
- 如果切换到通用选择器,为什么整个过程都会中断?
*:not(.no) span{background-color:#00f;}
回答:
span
元素的两个父div
元素都不具有classno
,无论其他祖先是否都具有class :<div> <!-- This is div:not(.no), pretty much a given -->
<span>yes 1</span>
<div class="no"> <!-- In this case, although this is div.no... -->
<div> <!-- ... this is div:not(.no)! -->
<span>no 2</span>
</div>
两个
html
和body
,这是您的祖先div
和span
元素,满足*:not(.no)
使用时一个通用选择(或者说,忽略一个类型选择时)。这会使您 所有 的span
元素都具有背景色。
一种解决方案是body
,如果子元素的顶级div
元素始终是的子元素,则使用子组合器将否定过滤器锚定到该元素body
:
body > div:not(.no) span { background-color: #00f; }
另一个解决方案是简单地使用替代样式。
以上是 为什么CSS:not()声明没有过滤掉? 的全部内容, 来源链接: utcz.com/qa/398046.html