CSS属性的计算过程
css属性值的计算过程
什么是css属性值的计算过程
某个元素从所有的CSS元素没有值,到所有的CSS属性都有值的过程叫做计算过程
也就是说就算只给div设置了一个背景颜色,不表示它没有其他属性值,它的所有css属性都有值
如何计算
分为四个步骤:(按顺序来,不能乱序)
1.确定声明值:
从作者样式表(我们所写的样式)和默认样式表(浏览器默认的样式)中找到没有冲突的样式,直接作为计算后的样式。
(类似于red类型的会转化成rbg)
2.层叠(css全称: 层叠样式表)
对有冲突的样式进行层叠,通过以下三个步骤:
1.比较重要性
重要性从高到底:
1.带有important的作者样式
2.带有important的默认样式
3.作者样式
4.默认样式
2.比较权重
对每个样式进行计算:
sytye: 内敛为1 否则为0
id:id选择器的数量
属性:属性、类、伪类的数量
元素:元素 伪元素的数量
比如:
.red {color : red} 0 0 1 0
h1 {color: red} 0 0 0 1
.div h1 .red 0 0 2 1 权重最大 优先级越高
3.比较源次序
如果权值相同,谁在下面谁优先级高
3.继承
对于仍然没有值的属性,若可以继承,则使用继承(可以去官网查看会不会继承,文字类大概率继承)
4.使用默认值
到目前还会没有值的(比如:background-color)会使用属性的默认值,每个属性都有默认值
比如background-color的默认值是transparent(透明)
通过以上四个步骤 所有的css属性都会有值
因为继承发生在第三步 而有些元素因为有默认值 且跟作者元素没有冲突 导致内部元素没有继承
就是因为在某一部确定了值就不会进行下一步 比如:
1 2 3 4 5 6 7 8 9
| <style> .box{ color: red } </style> <div class='box'> <a>123</a> </div>
|
a标签并不会继承红色,因为a标签有默认样式颜色 所以第一步就确定了值
如果第一步就确定了值 而没有继承值如a标签的颜色 可以使用color:inherit 将父元素属性值粘贴过来
实用技巧
主动将某一样式设置为默认样式
1 2 3 4 5
| <style> .box{ line-height: initial; } </style>
|
想要清楚所有的浏览器默认样式 unset
1 2 3 4 5 6
| <style> body, body *:not(script){ all: unset; } </style>
|
恢复默认属性 revert
1 2 3 4 5
| <style> .default{ all: revert; } </style>
|