CSS的权重指的是选择符的优先级,优先级高的CSS选择符所设置的样式会覆盖优先级低的选择符所设置的样式。权重越高优先级越高,计算权重有一定的规则。
计算CSS权重首先需要了解CSS的6中选择器。
1.ID选择器 例如: #read_title{} 2.类选择器 例如: .read_title{} 3.属性选择器 例如: a[href='http://www.baidu.com']{}
4.伪类和伪对象选择器
例如:
:hover {}
::after {}
5.标签类型选择器
例如:
a {}
6.通配选择器
例如:
* {}
所有在CSS样式中定义的选择符都是由这6中选择器所构成。
基础选择器的优先级:
ID>类 | 伪类 | 属性选择器 >标签类型 | 伪对象 > 通配符
CSS权重计算规则:
(1)忽略全局选择器
(2)计算选择符中ID选择器的数量(=a)
(3)计算选择符中类选择器、属性选择器、伪类选择器的数量(=b)
(4)计算标签类型选择器以及伪对象选择器的数量(=c)
计算出a、b、c的值之后,按顺序连接a、b、c三个数字组成一个新的数值,这个数值越大,代表优先级越高。
权重计算举例:
* /*a=0,b=0,c=0 -> 权重 = 0*/
li /*a=0,b=0,c=1 -> 权重 = 1*/
ul li /*a=0,b=0,c=2 -> 权重 = 2*/
ul ol+li /*a=0,b=0,c=3 -> 权重 = 3*/
h1 + *[REL=up] /*a=0,b=1,c=1 -> 权重 = 11*/
ul ol li .red /*a=0,b=1,c=3 -> 权重 = 13*/
li .red .level /*a=0,b=2,c=1 -> 权重 = 21*/
#x34y /*a=1,b=0,c=0 -> 权重 = 100*/
#s12:not(FOO) /*a=1,b=0,c=1 -> 权重 = 101*/
如果选择符的权重相同,则采用就近原则来判断,最后定义的样式会被采用。
如果要优化性能,则在定义CSS样式时需要使CSS权重相对较高,尽量不要使用层叠的选择器,多使用ID选择器。
如果要提高CSS文件的重用性,则在定义CSS样式时需要使CSS权重相对较低,多使用类、属性、通配选择器。