关于CSS属性的优先级

155 阅读3分钟

CSS称为层叠样式表,层叠是对CSS规则冲突的解决方式,主要包含

  1. 样式表的来源
  2. 选择器优先级
  3. 源码顺序

样式表的来源

样式表的来源主要有三种:

  1. 用户代理样式表,即浏览器默认样式
  2. 作者样式表,即网站作者定义的样式
  3. 用户样式表,有些浏览器允许用户添加自定义样式,少见

总结:优先级 用户样式表 > 作者样式表 > 用户代理样式表

此处需要注意: <!DOCTYPE html> 声明。如果 HTML 文件的开头没有添加该声明,浏览器就会使用怪异模式(Quirks Mode),怪异模式下用户代理样式表会与标准模式有所不同,比如 table 的用户代理样式表:

怪异模式:

标准模式:

怪异模式的具体内容可参考:quirks.spec.whatwg.org

所以最好在 HTML 文件的开头声明 <!DOCTYPE html>

选择器优先级

CSS选择器有多种,不同的选择器也会有不同的优先级,常用的选择器包含ID选择器、类选择器、元素选择器、伪类选择器、伪元素选择器、属性选择器、通用选择器(*)和组合器(> + ~)

这些选择器的优先级规则是怎样的?

首先看类型:

ID选择器 > 类选择器 (伪类选择器、属性选择器)> 元素选择器

注意:通用选择器、组合器对优先级没有影响

然后看数量:

  • ID选择器数量越多,优先级会更高
  • ID选择器数量相同,类选择器数量越多,优先级会更高
  • ID选择器和类选择器数量相同,元素选择器数量越多,优先级会更高

同时不要忘记内联样式,内联样式是写在HTML标签上的属性,他的优先级也是最高的(在没有使用!important标记的情况下),所以有内联样式,会最优先使用内联样式

源码顺序

最后解决冲突的方式是源码的顺序,如果两个冲突的选择器优先级相同,则比较靠后的选择器会覆盖靠前的选择

总结:优先级 选择器优先级相同的情况下,靠后的代码 > 靠前的代码

!important

使用 !important的 CSS 样式是特殊的,它拥有最高的优先级,规则如下:

  • 当在不同地方声明的CSS属性具有相同的优先级时,使用 !important标记的属性会被应用
  • 内联样式与样式表声明了相同的属性,样式表中的属性标记了 !important,则样式表中的属性会被应用
  • 在不同地方声明的属性都标记了 !important,则会根据以上描述的内联样式 > 选择器优先级 > 源码先后顺序 的规则,确定哪个声明会被应用

总之,!important标记的属性具有最高优先级