CSS 词条目录
前端Wiki/CSS/深入/层叠继承与进阶技巧

层叠与继承规则

CSS 名字里的「层叠」(Cascade)是它解决冲突的完整裁决流程。当多条规则指向同一元素的同一属性时,浏览器按顺序比较:

  • 来源与重要性:浏览器默认样式 < 用户样式 < 开发者样式;带 !important 的规则反向优先。
  • 优先级:来源相同时,比较 id / 类 / 标签三段权重。
  • 书写顺序:权重也相同,后写的获胜。

继承是另一条重要机制:部分属性(color、font、line-height、text-align 等文字类)会自动传给子元素;而 border、margin、background 等盒子类属性不继承。这符合直觉——父元素改字体,全篇文字跟着变;父元素加边框,不该每个子元素都描边。

两个手动控制的关键字:inherit 强制继承父值,initial 回到默认值。调试「样式为什么生效/不生效」时,先看层叠裁决,再看继承链。

本节要点冲突裁决顺序:来源 → 优先级 → 书写顺序;文字类属性可继承、盒子类属性不继承;inherit/initial 可手动控制继承行为。
CSS
<style>
  body {
    font-family: "Microsoft YaHei", sans-serif;
    color: #333;   /* 文字类属性会继承给后代 */
  }
  .panel { border: 1px solid #ccc; } /* 盒子类不继承 */
  .panel p { color: #666; }  /* 覆盖继承来的 #333 */
</style>
<div class="panel">
  <p>我的字体继承自 body,颜色被自己覆盖</p>
  <span>边框没有传给我,但颜色继承了 body</span>
</div>