1 .几乎所有的css样式冲突,样式覆盖都和css声明的优先级错位有关
选择器优先级规范0-5,6个等级
0级 0
1 .通配选择符*,一般会做全局的样式重设
2 .选择符 ,+,>,~,空格,||
3 .逻辑组合伪类,:not,:is,:where。这些伪类本身并不影响css优先级,影响优先级的是括号里面的选择器
:not(){}
1级,标签选择器 1
1 div{}
2级 10
1 .类选择器 .div
2 .属性选择器 []
3 .伪类
3级 id选择器 100
1 .#div
4级 内联选择器
1 .style
5级 !important
1 .顶级优先级,唯一使用场景是用来使js的设置无效,其余场景千万不要使用
深入优先级的计算规则
1 .前三级是最关键的,学会了前三级,就差不多了
2 .默认的是根据计数法,0级+0,1级+1,2级+10,3级+100
3 .如果权重值相同,那么就是后来居上原则,后面的样式会覆盖前面的样式
4 .增加css选择器优先级的小技巧,重复选择器自身 .div{},可以变成.div,.div
5 .对数值计算的点评
1 .数值计算其实是一种很非常不严谨的算法,1和10的差距很小,那就意味着10个1级的选择器就和1个2级选择器的样式相同了
2 .但是实际情况并不是这样,不同等级的选择器之间的差距无法通过数量来弥补,也就是绝对不可超越。
3 .256个选择器越界现象,256个.f样式覆盖了#f的样式,本质原因就是之前浏览器内部的类名都是以8字节存储的,最大值就是256,因此同时出现256个类名时,就会越过其边缘,到了#f存储的诶之,现在采用16字节的字符串存储,容纳的多了,就不会出现这个问题了