请描述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 权重计算规则。
浙公网安备 33010602011771号