【CSS 学习总结】第三篇 - CSS 选择器的权重和优先级

191 阅读3分钟

「这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战」。


一,前言

上一篇,主要介绍了 HTML 扩展内容;部分,包含以下内容:

  • HTML 的文档声明;
  • meta 元信息;
  • HTML Entity 字符实体;

从本篇开始,进入 CSS 选择器部分的介绍;

当项目结构比较复杂时,容易出现一个元素同时被添加多个样式的情况
这时可能会出现问题:明明写好的样式却被覆盖掉了。。。

那么,CSS 样式覆盖的问题,是否会遵循某种规律呢?
这里就涉及到选择器的权重和优先级的概念;

本篇,将介绍 CSS 选择器的权重和优先级;


二,CSS 的三大特性

  • 继承性:元素能够继承父元素的某些样式属性;
  • 优先级:决定了两个元素发生覆盖时,谁将被覆盖;
  • 层叠性:重复代码会发生合并,只有一个真正起作用;

三,CSS 选择器的优先级

image.png

MDN:CSS 优先级

权级权值选择器备注
0级0000通配选择器通配选择器(*)、选择符(+>~、空格、或)、not
1级0001元素选择器元素、关系、伪元素,如:divp
2级0010class 选择器类选择器、属性选择器、伪类,如:.content:hover
3级0100id 选择器如:#content
4级1000内联选择器如:style=""
5级10000!important不推荐在项目中使用

总结一下,以下选择器对优先级没有影响:

  • 通配选择器:*
  • 关系选择器:+>~' '
  • 否定伪类::not();(注意,在:not()内部声明的选择器会影响优先级)

四,CSS 选择器优先级的计算

  • 选择器会被划分为 4 个等级(排除了 10000 和 0000),每个等级就代表了一类选择器;
  • 优先级总值 = 各等级的选择器个数 * 对应等级权值的总和;

CSS 优先级的计算遵循以下规则:

  • 元素标签中定义了的内联样式,积 1,0,0,0 分;
  • 每个 id 选择器,积 0,1,0,0 分;
  • 每个 class 选择器、属性选择符、伪类,积 0,0,1,0 分;
  • 每个 元素选择器、伪元素选择器,积 0,0,0,1 分;

备注:

  • 伪类 :not() 本身不具有任何优先级,但在它的括号内的内容会被累计到优先级值中;

五,CSS 选择器的权重

权重顺序:

!important > 内联样式 > id 选择器 > class 选择器 > 标签选择器 > 通配符 > 继承 > 浏览器默认;

  • !important:优先级最高;
  • 元素属性:较高优先级;
  • 相同权重下:后面覆盖前面的;

六,面试题

CSS 选择器的权重和优先级的考察,一般会给出一段代码,问最终显示的效果,即判断谁覆盖了谁,为什么;

todo:面试题

七,结尾

本篇,主要介绍了 CSS 选择器部分,主要涉及一下几点:

  • CSS 的三大特征;
  • CSS 选择器的优先级;
  • CSS 优先级的计算规则;
  • CSS 选择器的权重;
  • CSS 选择器面试题;

下一篇,介绍 CSS 选择器伪类和伪元素;


维护日志

  • 20211125
    • 优化 “CSS 选择器的优先级” ,创建表格;
    • 添加 “CSS 优先级的计算规则”;