CSS属性优先级是指为同一元素设置的多个CSS属性具有不同的权重,以确定哪个CSS属性应该应用到元素上。
以下是CSS属性优先级的顺序,从高到低:
- !important声明
- 行内样式(在HTML标签内部的style属性)
- ID选择器(#id)
- 类选择器、属性选择器和伪类(.class、[attr]、:hover等)
- 类型选择器和伪元素(div、:before等)
- 通用选择器和后代选择器(*、空格)
- 继承的样式(父元素的样式也会影响子元素)
CSS样式表中的每个规则都有一个权重值,用于确定在元素上应用哪些样式。CSS优先级的规则如下:
-
以!important声明的样式具有最高的优先级。如果同一个属性的两个样式都包含!important,则后面的样式将覆盖前面的样式。
-
行内样式(即在HTML标记中使用style属性定义的样式)具有较高的优先级。如果有多个元素具有相同的样式,则应用行内样式定义的样式。
-
使用ID选择器定义的样式具有比类选择器或元素选择器定义的样式更高的优先级。如果在同一个元素上使用了多个ID选择器(例如:id="element1" id="element2"),则应用最后一个ID选择器的样式。
-
使用类选择器、属性选择器、伪类选择器或组合选择器等定义的样式具有较低的优先级,但比元素选择器定义的样式具有更高的优先级。如果使用多个选择器定义同一个元素的样式,则优先级高的选择器(例如:ID选择器)的样式将覆盖优先级低的选择器的样式。
-
使用元素选择器定义的样式优先级最低。如果同一元素使用多个元素选择器定义样式,则样式将根据选择器在样式表中出现的顺序进行应用。
在计算CSS规则的优先级时,通常使用以下计算方法:
对于每个排在样式表中前面的选择器,给定以下分值:
- 每个ID选择器 + 100
- 每个类/属性选择器/伪类 + 10
- 每个元素/伪元素选择器 + 1
- 每个通用选择器(*)、子选择器、相邻兄弟选择器或后代选择器不计分值
然后将所有选择器的分值加起来,得出总分数。如果两个或多个规则得分相同,则根据这些规则在样式表中的出现顺序决定哪一个应该应用。最后,如果一个样式被声明为!important,则它的优先级始终高于其他样式。
请注意,虽然优先级计算是在元素级别上执行的,但实际上,每个样式表中的规则都是独立计算的,并且当应用样式时,它们将被组合到一个完整的样式表中。
对于相同优先级的多个属性,后面的属性会覆盖先前的属性。同时,应该尽量避免使用!important声明,以免导致难以维护的代码。