CSS 选择器优先级

CSS 选择器权重

声明:本文参考来源于MDN CSS 优先级(80%)和B站尚硅谷的课程(20%)

我想你一定是来进行速查的,所以我会尽量精简文章内容,保证不浪费时间,不说废话

文章包括新的:is:where(实验性)说明

优先级:概念

优先级就是分配给 CSS 声明的一个权重,由 匹配的选择器中的 每一种选择器类型的 数值 决定。

多个 CSS 优先级相等的时候,最后的那个选择器将会被应用到元素上。

注意:文档树中元素的接近度对优先级没有影响。

速查:六点

  1. 格式:(1 | 0,a,b,c)

  • 1 | 0: 是否有!important

  • a: id的个数

  • b: .class :matix [key]的个数

  • c: el, ::el 的个数

  1. 冲突比较:从左到右,后来居上

  2. 简记:

  • !imp > 行内 > id > .class > el > 通配符 > 继承

  1. 如果有!imp,那么即使是jsDOM也无法修改

  2. 提示:VSCode能自动计算权重

  3. 注意:

  • :not:is本身对优先级没有影响,但是,在 :not和is内部声明的选择器会影响优先级

  • :where() 和其中的选择器的优先级是 0

比较:后来者居上,a>b>c

  1. 从左到右:a->b->c,从左到右比较

/* A选择器:(0,2,3) */
:is(h1) div:nth-child(2n):not(p:selected)

/* B选择器:(0,2,1) */
h1 div.headtext[needcolor]

/*
1. 0=0
2. 2=2
3. 3>1
4. A选择器胜出
*/

  1. 后来居上:前面写的被后来覆盖(前提:后者优先级>=前者)

<link href="foo.css">
<link href="bar.css">

<TodoList /> <!-- green -->

/* foo.css */
TodoList {
  color: red;
}
/* bar.css */
TodoList {
  color: green;
}

  1. 无影响者:通配选择符(*)关系选择符(+, >, ~, " ", ||)和 否定伪类:not()对优先级没有影响

!important:核弹级声明

当在一个样式声明中使用它,此声明将覆盖任何其他声明

无视:DOM树

什么意思?直接上代码

body h1 {
  color: green;
}

/* 后来居上 */
html h1 {
  color: purple;
}

<html>
  <body>
    <h1>Here is a title!</h1>
  </body>
</html>

h1将被渲染成紫色。

其他:关于where选择器

实验性: 这是一项实验性技术,在将其用于生产之前,请仔细检查MDN浏览器兼容性表格
给你康好了QAQ:

  • Chrome 88+

  • Firefox 78+

  • Safari 14+

  • IE ??? 早没有了

工具:计算优先级

如果你的编辑器没有查看优先级的功能

那么这是一个网站,供你计算优先级:Specificity Calculator