我想知道CSS规则如何应用于子元素。
h2
的{{1}}样式已被覆盖,因为父级别样式gray
的颜色为.level2 h2
。
但是blue
并没有采用相同的方式。
请参阅以下示例。
.level1 h2
.level1 h2 {
color: green;
}
.level2 h2 {
color: blue;
}
h2 {
color: gray;
}
答案 0 :(得分:3)
关于specificity和继承的全部内容。
“级联”的概念是CSS的核心(只需看看它 名称)。它最终确定哪些属性将修改给定的属性 元件。级联与三个主要概念相关:重要性, 特异性和来源顺序。级联遵循这三个步骤 确定要分配给元素的属性。到此结束 在这个过程中,级联为每个规则分配了一个权重 权重确定哪个规则优先于多个规则 适用。
如果两个选择器具有相同的特异性,它还取决于样式表中的顺序。
.level2 h2 {
color: blue;
}
.level1 h2 {
color: green;
}
h2 {
color: gray;
}

<div class="level1">
<div class="level2">
<h2>test</h2>
</div>
</div>
&#13;
来源: https://www.smashingmagazine.com/2010/04/css-specificity-and-inheritance/
答案 1 :(得分:2)
概念
特异性是浏览器决定哪个CSS属性的方法 值与元素最相关,因此也是如此 应用。特异性基于组成的匹配规则 不同种类的CSS选择器。
如何计算?
特异性是应用于给定CSS声明的权重, 由匹配中每个选择器类型的数量确定 选择。当特异性等于任何倍数时 声明,在CSS中找到的最后一个声明应用于 元件。特异性仅适用于相同元素的目标 多个声明。按照CSS规则直接定位元素会 始终优先于元素继承自的规则 的祖先。
其中:
.level1 h2
和.level2 h2
具有以下特征:0 0 1 1
虽然:
h2
仅具有以下特征:0 0 0 1
因此h2
更少具体。
如果具有相同特异性
,它将占用最新的样式您可以测试/计算特异性here
.level1 h2 {
color: green;
}
.level2 h2 {
color: blue;
}
h2 {
color: gray;
}
<div class="level1">
<div class="level2">
<h2>test</h2>
</div>
</div>
.level2 h2 {
color: blue;
}
.level1 h2 {
color: green;
}
h2 {
color: gray;
}
<div class="level1">
<div class="level2">
<h2>test</h2>
</div>
</div>
答案 2 :(得分:1)
.level2 h2
更加重要,因为它在样式表中被进一步声明。它也比h2更重要,因为它由标签名称和类名组成。
答案 3 :(得分:0)
由于此处的特定性与#34; .level1 h2&#34;相同。和&#34; .level2 h2&#34;,浏览器查看它在CSS中声明的顺序。
&#34; h2&#34;使标记变为灰色的标记具有较低的特异性,因此将被其他声明覆盖。
h2 {
color: gray;
}
/* Situation 1, level 2 declared first */
.situation1.level2 h2 {
color: blue;
}
.situation1.level1 h2 {
color: green;
}
/* Situation 1, level 2 declared last */
.situation2.level1 h2 {
color: green;
}
.situation2.level2 h2 {
color: blue;
}
&#13;
Level 2 declared <b>first</b>
<div class="level1 situation1">
<div class="level2 situation1">
<h2>test</h2>
</div>
</div>
Level 2 declared <b>last</b>
<div class="level1 situation2">
<div class="level2 situation2">
<h2>test</h2>
</div>
</div>
&#13;