原理
CSS选择器的优先级关系是:
内联 > ID选择器 > 类选择器 > 标签选择器
《CSS REFACTORING》 中提到了算法的过程 :
A specificity is determined by plugging numbers into (a, b, c, d):
If the styles are applied via the style attribute, a=1; otherwise, a=0.
b is equal to the number of ID selectors present.
c is equal to the number of class selectors, attribute selectors, and pseudoclasses present.
d is equal to the number of type selectors and pseudoelements present.
即优先级是由 A 、B、C、D 的值来决定的,其中它们的值计算规则如下:
如果存在内联样式,那么 A = 1, 否则 A = 0;
B 的值等于 ID选择器 出现的次数;
C 的值等于 类选择器 和 属性选择器 和 伪类 出现的总次数;
D 的值等于 标签选择器 和 伪元素 出现的总次数 。
例如:
1 | li /* (0, 0, 0, 1) */ |
优先级比较规则:
从左往右依次进行比较 ,较大者胜出,如果相等,则继续往右移动一位进行比较 。如果4位全部相等,则后面的会覆盖前面的
例子
有如下html代码:
1 | <div id="b"> |
如果设置css样式:
1 | #b a {color:red;} |
问题:#b a
生效,还是#a
生效?
答案:ALink
解析:
1 | #b a /* (0, 1, 0, 1) */ |
比较得出 #b a
优先级更高
特例
如果我们给#a的css后加上!important
那么#a的优先级变为最高,甚至比在html标签上加style的优先级还要高。
比如如下代码:
1 |
|
显示的结果 ALink
如果在标签内联样式加入!important
那么显示 ALink