第 8 课 7 / 18 | 编码:L08-10
核心知识

CSS 继承:父子元素的属性传递

下面只给 section 设置样式,没有给 p 单独设置。运行后,观察两段文字、边框和背景的显示效果。

<style>
  section {
    color: teal;
    border: 2px solid navy;
    background-color: #fff0dc;
  }
</style>
<section>
  <p>唱腔赏析</p>
  <p>服饰与舞台</p>
</section>

哪些属性会继承

继承是子元素从父元素取得属性值,并非所有属性都默认继承。

对照代码

<style>
  section {
    color: teal;
    border: 2px solid navy;
    background-color: #fff0dc;
  }
</style>
<section>
  <p>唱腔赏析</p>
  <p>服饰与舞台</p>
</section>

对照结果:文字与边框不同

两个 p 未设置自己的颜色,因此继承青绿色。

border 默认不继承,边框只围住 section。

对照背景:透明不等于继承

本例 p 背景透明,看到的是 section 的浅橙色背景,而非继承的背景色。

① 默认继承:许多文字属性

color:文字颜色。

font-family、font-size、font-weight:字体、字号、字重。

line-height、text-align:行高、文字对齐方式。

② 默认不继承:以下常见属性

margin、padding:外边距、内边距。

border、width、height:边框、宽度、高度。

background-color:背景颜色。

补充:子元素自己的声明与 inherit

“默认继承”不是父元素强制覆盖子元素。本例若添加下面的规则,两个段落就使用自己的深红色,不再采用继承的青绿色;section 的颜色仍为 teal。这不是 p 与 section 两个选择器在比较特异性,而是 p 已有自己的颜色声明。

p {
  color: crimson;
}

把上面的 crimson 改为 inherit,就明确要求采用父元素的颜色。即使某属性默认不继承,也可以显式要求继承,例如下面的规则会给每个段落加上与父元素相同的边框:

p {
  border: inherit;
}

“文字属性常继承”只是记忆提示,并非所有文字相关属性都继承;默认是否继承取决于具体属性的规定。浏览器默认样式也可能直接为子元素设置某些属性。