在使用CSS的过程中,我们经常会遇到优先级的问题。而CSS的优先级定义是有非常严格的规则的,这个规则是根据优先级来源的不同,以及锁定性的不同进行计算的。
在CSS中,它认为"!important"最优先,其次是ID选择器、class选择器、标签选择器、通配符、继承等,而其中选择器的特殊性(specificity)是最关键的因素。关于选择器的特殊性,可以利用下面的规则来进行计算:
[0, 0, 0, 0] | | v [0, 0, 0, 1] /* 继承的样式始终为 0, 0, 0, 0 */ [0, 0, 1, 0] /* 类样式(例如 .example) */ [0, 0, 1, 1] /* 类 + 标签样式(例如 div.example) */ [0, 1, 0, 0] /* ID 样式(#example) */ [0, 1, 0, 1] /* ID + 类样式(例如 #example.one) */ [0, 1, 1, 0] /* ID + 标签样式(例如 div#example) */ [0, 1, 1, 1] /* ID + 类 + 标签样式,或者更多(例如 div#example.one) */
可以看到,在CSS中,越靠右越优先,如果寻找到一组选择器的特殊性值相同,那么选择器出现的顺序就决定优先级。
虽然这看上去比较复杂,但我们只要端正优先级的来源,严格按照规则来,就能够避免很多不必要的烦恼。同时,在编写代码时,也可以通过打印控制台来帮助我们查看每个选择器的权重值,从而验证优先级的正确性。