CSS 层叠 、继承与特异性
当你发现样式"不是我写的那样"时,通常是因为层叠(Cascade)、继承(Inheritance)或特异性(Specificity)在起作用。理解这三个概念,是掌握 CSS 的关键。
层叠的概念
"层叠"(Cascade)是 CSS 名称中的"C",它指的是当多个样式规则应用到同一个元素时,浏览器如何决定使用哪个样式。
层叠的规则
浏览器按照以下顺序决定样式的优先级:
- 来源优先级:用户样式 > 作者样式 > User Agent 样式
- 特异性:特异性高的规则覆盖特异性低的规则
- 出现顺序:后出现的规则覆盖先出现的规则(如果特异性相同)
/* 规则 1:特异性 = 1 */
p {
color: black;
}
/* 规则 2:特异性 = 10,后出现,所以覆盖规则 1 */
.highlight {
color: blue;
}
/* 规则 3:特异性 = 100,最高,所以覆盖规则 2 */
#special {
color: red;
}
<p class="highlight" id="special">这段文字是红色的</p>
结果:文字显示为红色,因为 #special 的特异性最高。
继承机制
继承(Inheritance)是指某些 CSS 属性会被子元素自动继承,而不需要为每个子元素单独设置。
可继承的属性
以下类型的属性通常会被继承:
- 文本属性:
color、font-family、font-size、font-weight、line-height、text-align