css的两个核心知识:属性值的计算过程和视觉格式化模型(待续)
属性值的计算过程;
css属性值的计算过程指的是某一个元素从所有css属性都没有值到所有css属性都有值得过程,
属性值的计算过程有四个步骤,这些步骤依次执行:确定声明值、层叠、继承、使用默认值。就是经过这四个步骤才能保证所有的css属性都有值,这样浏览器才能把整个页面都渲染出来
确定声明值
确定声明值就是找到作者样式表和浏览器样式表中没有冲突得样式,直接作为计算后得样式,比如font-weight:bold里,bold是预设值,经过计算后就变成了700
拓展 css称块盒和行盒,摒弃了之前html块级元素和行级元素得说法
层叠
层叠就是给已经冲突的样式排排序,最后展示一个“胜出”的样式,没有冲突的就不需要层叠,有冲突的才会进行层叠排序,层叠的三个步骤:比较重要性、比较特殊性、比较源次序
比较重要性(重要性从高到低)
- 带有
important的作者样式 - 带有
important的默认样式 - 作者样式(自己写的样式)
- 默认样式
比较特殊性 对每个样式分别计数,把一个元素的特殊性的值全部算出来,哪个大哪个优先级就更高
- style:内联1,否则0
- id:id选择器的数量
- 属性:属性、类、伪元素的数量
- 元素:元素、伪元素的数量
比较源次序 源代码里的书写顺序,哪个靠后就用哪一个
继承
继承是发生在两种情况下的:
- 属性目前是没有值得(在经过前两个确定声明值、层叠步骤之后
仍然没有值) - 属性可以被继承
有一个粗略的规则,和字体相关的例如大小、行高等可以被继承,实在拿不准就去mdn搜下
比如常见的a元素,a元素在第一步就由浏览器默认样式确定了声明值,
如果此时需要属性被继承就可以使用color: inherit;
拓展
initial:主动将某一css属性设为默认值unset:清除浏览器默认样式(全部清除all:unset)revert:恢复浏览器默认样式
使用默认值
属性的计算过程是要保证元素所有的css属性要全部有值,如果没有属性可以继承就直接使用默认值