css属性值的计算过程(渡一总结)

110 阅读2分钟

css的两个核心知识:属性值的计算过程和视觉格式化模型(待续)

属性值的计算过程;

css属性值的计算过程指的是某一个元素从所有css属性都没有值到所有css属性都有值得过程,

属性值的计算过程有四个步骤,这些步骤依次执行确定声明值、层叠、继承、使用默认值。就是经过这四个步骤才能保证所有的css属性都有值,这样浏览器才能把整个页面都渲染出来

确定声明值

确定声明值就是找到作者样式表和浏览器样式表中没有冲突得样式,直接作为计算后得样式,比如font-weight:bold里,bold是预设值,经过计算后就变成了700 image.png image.png image.png

拓展 css称块盒和行盒,摒弃了之前html块级元素和行级元素得说法

image.png

层叠

层叠就是给已经冲突的样式排排序,最后展示一个“胜出”的样式,没有冲突的就不需要层叠,有冲突的才会进行层叠排序,层叠的三个步骤:比较重要性、比较特殊性、比较源次序

比较重要性(重要性从高到低)

  • 带有important的作者样式
  • 带有important的默认样式
  • 作者样式(自己写的样式)
  • 默认样式

比较特殊性 对每个样式分别计数,把一个元素的特殊性的值全部算出来,哪个大哪个优先级就更高

  • style:内联1,否则0
  • id:id选择器的数量
  • 属性:属性、类、伪元素的数量
  • 元素:元素、伪元素的数量

比较源次序 源代码里的书写顺序,哪个靠后就用哪一个

继承

继承是发生在两种情况下的:

  1. 属性目前是没有值得(在经过前两个确定声明值、层叠步骤之后仍然没有值
  2. 属性可以被继承

有一个粗略的规则,和字体相关的例如大小、行高等可以被继承,实在拿不准就去mdn搜下 image.png

比如常见的a元素,a元素在第一步就由浏览器默认样式确定了声明值,

如果此时需要属性被继承就可以使用color: inherit; image.png

拓展

  • initial:主动将某一css属性设为默认值
  • unset:清除浏览器默认样式(全部清除all:unset)
  • revert:恢复浏览器默认样式

使用默认值

属性的计算过程是要保证元素所有的css属性要全部有值,如果没有属性可以继承就直接使用默认值