继承

某些属性会自动继承其父级元素的计算值,除非显示指定一个值。

例如在以下表情中,div 里面 包含 p 标签。

<div style="color:red">
    <p>ABC</p>
</div>

如果 <div> 有个属性 color: red,则这个属性将被 <p> 继承,即 <p> 也拥有属性 color: red。

初始值

  • CSS 中,每个属性都有一个初始值
  • background-color 的初始值为 transparent
  • margin-left 的初始值为 0
  • 可以显式重设为初始值,比如 background-color: initial

样式的来源

  • 页面开发者
  • 用户设置
  • 浏览器预设
    • Mozilla Firefox 预设
    • Google Chrome 预设
    • Internet Explorer 预设

浏览器可以指定一个本地CSS文件,打开所有页面时候自动加载。

我们会发现 h1、h2 标签字体的大小默认不被继承的。场景:如下代码给 div 父元素在设置一个字体属性12px,在div中添加一个h2标签,在浏览器中可以发现h2标签中的字体大小不会改变。原因是浏览器默认对 h1、h2 设置字体大小。这就是浏览器预设。

成叠

什么选择器在层叠中胜出取决于三个因素:

  • 重要性(Importance)
  • 专用性(Specificity)
  • 源代码次序(Source order)

这些都是按重量级顺序排列的——前面的的一种会否决后一种

哪条规则生效

<article>
    <h1 class="title">标题</h1>
</article>
.title{
    color: blue;
}
article h1{
    color: red;
}

优先级

优先级关系:内联样式 > ID 选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器

  • ID 选择器 #id
  • 类选择器 .class
  • 属性选择器 a[href="segmentfault.com"]
  • 伪类选择器 :hover
  • 伪元素选择器 ::before
  • 标签选择器 span
  • 通配选择器 *

important

属性后插有 !important 的属性拥有最高优先级。若同时插有 !important 则再利用规则判断优先级。

color: blue !important;

显式继承

* {
    box-sizing: inherit;
}
html{
    box-sizing: border-box;
}
.some-widget{
    box-sizing: content-box;
}

资源