cnTIL

https://lovelacelee.github.io/cnTIL

This project is maintained by lovelacelee

层叠样式表:继承与优先级理解

MDN

Cascade

Stylesheets cascade ——样式表层叠,简单地说CSS规则的顺序很重要。最后的一条规则生效。

有三个因素需要考虑,根据重要性排序如下,前面的更重要:

选择器的优先级浏览器计算方式

一个选择器的优先级可以说是由四个部分相加 (分量),可以认为是个十百千 — 四位数的四个位数:

千位:如果声明在 style 的属性(内联样式)则该位得一分。这样的声明没有选择器,所以它得分总是1000。
百位:选择器中包含ID选择器则该位得一分。
十位:选择器中包含类选择器、属性选择器或者伪类则该位得一分。
个位:选择器中包含元素、伪元素选择器则该位得一分。

通用选择器 (*),组合符 (+, >, ~, ‘ ‘),和否定伪类 (:not) 不会影响优先级。 在进行计算时不允许进行进位,例如,20 个类选择器仅仅意味着 20 个十位,而不能视为 两个百位,也就是说,无论多少个类选择器的权重叠加,都不会超过一个 ID 选择器。

具体计算表格例子可以参考MDN

优先级

当多个规则有不同选择器对应相同的元素的时候需要使用哪个规则:

.main-heading {
    color: read;
}
h1 {
    color: blue;
}
<h1 class="main-heading">This is my heading</h1>

此时This is my heading显示为红色,因为main-heading更具体地选择。

继承

继承也需要在上下文中去理解,某些设置在父元素上的css属性是可以被子元素继承的,有些则不能。

继承控制

CSS 为控制继承提供了四个特殊的通用属性值。每个css属性都接收这些值

覆盖 !important 唯一的办法就是另一个 !important 具有 相同优先级 而且顺序靠后,或者更高优先级。