文章目录
- 1.特指度的定义
- 2.继承
- 3.层叠
1.特指度的定义
我们都知道,当同一元素被设置了两个相同属性的时候,只会生效其中的一个属性值。至于到底生效哪一个属性值,自然是有一套计算规则的。在CSS中,选择符的特指度由选择符本身的组成部分决定。通常一个特指度由四个部分组成,例如0,0,0,0。选择符特指度的值通过下述规则确定。
- 行内样式的特指度为1,0,0,0
- 选择符中的每个ID属性值加0,1,0,0
- 选择符中的每个类属性值、属性选择或伪类0,0,1,0
- 选择符中的每个元素和伪元素加0,0,0,1。
- 连结符合通用选择器不增加特指度
具体比较规则是按照四部分的顺序,按照从左到右的权值大小依次进行比较,比如说0,3,2,1和0,2,8,7进行比较,0,3,2,1的优先级更高。
2.继承
在CSS中,父元素所有可以被子元素继承的样式都会被它的子元素所继承,当然也有不会被子元素继承的属性,比如border和background。同时,继承的特指度为0。
3.层叠
虽然前面提到了,元素是如何按照特指度决定优先级的,但是如果当一个元素被被赋予了两个同一优先级的样式,应该以怎样的优先级应用呢?这里就要提到CSS的层叠规则:
- 找到匹配特定元素的所有规则。
- 按显示权重排序应用到特定元素上的所有声明。以!important的优先级最高。
- 按来源排序应用到特定元素上的所有声明。声明有三个来源:创作人员、读者和用户代理。创作人员的权重最高,其次是读者样式,读者样式中!import占据最高权重。用户代理的默认样式会被创作人员和读者样式给覆盖。
- 按特指度排序应用到特定元素上的所有声明。特指度高的声明具有较高的权重。
- 按声明的前后位置排序应用到特定元素上的所有声明。样式表或文档靠后的声明权重较高。导入的样式表放在当前样式表的所有声明前面。
从上面提到的第五条规则中,可以找到我们想要的答案,即生效后声明的那一条规则。