CSS
.wrapper > * {
background: deepskyblue;
}
.item {
background: deeppink;
}
HTML
<div class="wrapper">
<div class="item">
Test
</div>
</div>
上面是我的 CSS 类和 HTML。因此,由于我在包装器 > * 下为 .item 类提供了样式。
但是该元素的背景仍然是深蓝色。
应该是深粉色吗?
我知道我可以在 .item 中使用 !important 来获得深粉色,但我想知道为什么会按此顺序发生。
要了解为什么您没有看到想要的结果,您需要先了解 CSS Specificity以及权重选择器有什么(作为这个问题的答案,讨论太长了)。
首先,您的原始规则集:
.wrapper > * { // [0,0,0,1,0]
background: deepskyblue;
}
.item { // [0,0,0,1,0]
background: deeppink;
}
这两个规则都具有 [0,0,0,1,0]
的特殊性,因为每个选择器中只有一个类。 *
选择器的权重为 0,因此它不会向第一条规则添加任何权重。由于这两个规则影响同一元素的相同属性,所以最后的规则获胜:在这种情况下,background: deeppink;
但是,您的实际规则不同:
.wrapper[_ngcontent-c1] > *[_ngcontent-c1] { // [0,0,0,3,0]
background: deepskyblue;
}
.item[_ngcontent-c1] { // [0,0,0,2,0]
background: deeppink;
}
在这种情况下,第一个规则获胜,因为它更具体。属性选择器的权重为 [0,0,0,1,0]
。
要解决这个问题,您必须制作一个等于或超过要覆盖的规则的特异性的选择器。
例如:
.wrapper[_ngcontent-c1] > *[_ngcontent-c1] { // [0,0,0,3,0]
background: deepskyblue;
}
.wrapper[_ngcontent-c1] > .item[_ngcontent-c1] { // [0,0,0,4,0]
background: deeppink;
}