优先级的计算规则
内联 > 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
的值等于标签选择器
和伪元素
出现的总次数 。
例子:
#nav-global > ul > li > a.nav-link
上面算出的A
、 B
、C
、D
可以简记作:(0, 1, 1, 3)
比较规则
从左往右 依次进行比较,较大者胜出,如果相等,则继续往右移动一位进行比较。如果4位全部相等,则后面的会覆盖前面的。
#nav-list .item {
color: #f00;
}
.nav-list .item {
color: #0f0;
}
算出 #nav-list .item
的优先级是 (0, 1, 1, 0)
, .nav-list .item
的优先级是 (0, 0, 2, 0)
。 左边第一位都是0, 再看看左边第二位,前者是1,后者是0, 所以(0, 1, 1, 0)
的大于 (0, 0, 2, 0)
,即 #nva-list .item
大于 .nav-list .item
,所以字体会是红色。
优先级的特殊情况
注意:优先级只会比较相同属性
!important
<div class="box" style="background: #f00; width: 300px!important;">我的宽度是多少呢??<div>
.box {
max-width: 100px;
}
此时 .box 宽度只有100px . max-width
可以超越 width!important