肉渣教程

CSS 优先级

上一节 下一节

什么是CSS优先级?

比如有多个选择器选中了同一个元素,且定义的样式是有冲突的,那这个元素会采用哪个选择器定的规则呢?这就是所谓的CSS优先级的问题,浏览器会有一套特殊的评分法则来评定哪类选择器的优先级别更高。

例如,通类选择器(*)的优先级别就很低,而Id选择器的优先级别就很高。


插入样式表的优先级别确实是先后关系决定的,但是那是特指同一种选择器靠的是先后关系。不同的选择器有冲突的情况,靠的是浏览器内部的这套CSS优先级评分法则。有点小复杂,这一节请好好学喔~


CSS优先级梯度

如下所示,依次列出的四大类选择器的优先级梯度,从上往下越来越低,行内样式表 > Id选择器 > 类选择器、属性选择器、伪类 > 元素名选择器、伪元素

  • 行内样式表 - 利用元素的style属性直接设置元素样式的那种方式优先级别最高;
  • Id选择器 - 直接通过元素id定位到指定元素的选择器优先级别次高;
  • 类选择器、属性选择器、伪类 - 类选择器、属性选择器、伪类的优先级别次次高;
  • 元素名选择器、伪元素 - 相对前面三大类而言,元素名选择器、伪元素的优先级别最低。

如何计算优先级别?

请牢记CSS优先级的评分计算法则!这很重要!

  • 行内样式表 - 加1000分;
  • Id选择器 - 加100分;
  • 类选择器、属性选择器、伪类 - 加10分;
  • 元素名选择器、伪元素 - 加1分。

按照上面的评分计算法则,举例来演示一下:

A:h1
B:#jerk h1
C:<div id="jerk"><h1 id="color:red;">标题</h1></div>
  • A的得分是1分(元素名选择器)
  • B的得分是101分(id选择器 + 元素名选择器)
  • C的得分是1000分(行内样式选择器)

因为 1 > 101 > 1000,所以C的优先级评分最高。


下面举三个例子,很明显都是符合上述评分计算法则的。


评分相等,后引入的规则更加优先:

h1 {background-color: Blue;}
h1 {background-color: Tomato;}

运行一下


Id选择器完爆属性选择器:

div#jerk {background-color: LightBlue;}
#jerk {background-color: LightGray;}
div[id=jerk] {background-color: Red;}

运行一下


类选择器完爆元素名选择器:

.jerk {background-color: LightBlue;}
h1 {background-color: Red;}

运行一下


CSS 优先级

上一节 下一节