请描述css的权重计算规则
CSS 权重计算规则用于确定当多个 CSS 规则应用于同一个 HTML 元素时,哪个规则的样式最终生效。 它遵循一个层叠的原则,权重更高的样式会覆盖权重更低的样式。
CSS 权重的计算可以理解为一个四位的数,从左到右,位数越高,权重越大,可以表示为 (0, 0, 0, 0)
。 四个位数分别代表:
-
千位:!important 规则:如果一个样式声明带有
!important
,则它的权重最高,直接胜出。 相当于(1, 0, 0, 0)
。 需要注意的是,!important
应该谨慎使用,因为它会破坏 CSS 的层叠机制,使代码难以维护。 -
百位:内联样式:直接写在 HTML 元素
style
属性中的样式。 相当于(0, 1, 0, 0)
。 -
十位:ID 选择器:例如
#myId
。 每一个 ID 选择器都会给权重增加(0, 0, 1, 0)
。 -
个位:类选择器、属性选择器和伪类选择器:例如
.myClass
、[type="text"]
、:hover
。 每一个这类选择器都会给权重增加(0, 0, 0, 1)
。 -
(隐含的) 零:元素选择器和伪元素选择器:例如
p
、::before
。 这些选择器的权重可以视为(0, 0, 0, 0)
。 多个元素选择器或伪元素选择器叠加只会增加其数量,不会进位到十位。例如div p
的权重依然小于.myClass
。 -
通配符选择器(*):权重为 0,会被任何其他选择器覆盖。
计算示例:
p.myClass
: 权重为(0, 0, 0, 1 + 1) = (0, 0, 0, 2)
div p.myClass
: 权重为(0, 0, 0, 1 + 1) = (0, 0, 0, 2)
(注意,div
和p
虽然是两个元素选择器,但它们不会进位)#myId p
: 权重为(0, 0, 1, 1) = (0, 0, 1, 1)
#myId.myClass
: 权重为(0, 0, 1, 1) = (0, 0, 1, 1)
<p style="color: red;">
: 权重为(0, 1, 0, 0)
p.myClass !important
: 权重最高(1, 0, 0, 0)
总结:
比较权重时,从左到右依次比较四个位数的大小。哪个位数上的值大,哪个规则的权重就高。如果所有位数都相同,则后定义的规则会覆盖先定义的规则 (在同一个样式表内,后面的规则会覆盖前面的规则;在不同样式表之间,后面的样式表中的规则会覆盖前面的样式表中的规则)。
希望这个解释能够帮助你理解 CSS 权重计算规则。