为什么CSS选择器的优先级计算规则是前端开发者的必修课?

大伟君_1918

大伟君_1918

2026-06-20

557人浏览

原创

css优先级由选择器权重决定,而非书写顺序;权重按(a,b,c,d)四位逐位比较,id选择器(b位)单个即胜过所有类组合(c位),如#header .nav a(0,1,1,1) > .menu-link.active(0,0,2,0)。

为什么css选择器的优先级计算规则是前端开发者的必修课?

因为样式不生效、覆盖失效、调试像猜谜——这些问题几乎都卡在优先级算错上。

为什么 #header .nav a 会赢过 .menu-link.active

不是“写在后面就生效”,而是权重比大小。前者是 ID + 类 + 元素,对应 (0,1,1,1);后者是两个类,(0,0,2,0)。比较时先看第二位:1 > 0,直接胜出,哪怕后面写了 100 行也不管用。

  • ID 选择器单个就压倒所有类组合,#btn 能盖过 .btn.primary.large
  • 属性选择器 [data-role="tab"] 和类选择器权重一样,都是 c=1,可混用提升特异性
  • 伪类如 :hover、:nth-child(2) 也计入 c,不是“附加效果”,是实打实的权重加成

!important 真的能救命吗?

能,但只救一时,且代价明确:它把单条声明拉到最高层级,但不改变选择器本身的权重。比如:

.card { color: red !important; }
#profile .card { color: blue; }

结果仍是红色——!important 生效了,但如果你再加一条:

前端设计优化skill
前端设计优化skill

前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。

下载
#profile .card { color: green !important; }

绿色就会覆盖红色,因为两个 !important 之间,还是要比原始选择器权重:(0,1,1,0) > (0,0,1,0)。

  • !important 不能跨来源翻盘:用户样式里的 !important 仍可能被作者样式里的 !important 压制
  • 内联样式自带隐式 !important 效果,style="color: black" 的权重是 (1,0,0,0),比任何外部 !important 都高
  • 滥用会导致后续覆盖越来越重,最后不得不写 #app #main #content .item:hover 这种反模式

为什么 div p span 和 .wrapper span 可能结果相反?

后代选择器数量不影响权重,只看类型。前者三个元素选择器:(0,0,0,3);后者一个类 + 一个元素:(0,0,1,1)。虽然写得长,但 c=1 直接碾压 d=3。

  • 组合器(>、+、~)完全不参与计算,删掉它们不影响优先级
  • 通配符 * 权重为 (0,0,0,0),和继承来的样式一样,基本没存在感
  • 伪元素 ::before 和标签同级,button::after 是 (0,0,0,2),不是特殊加分项

真正容易被忽略的,是权重比较的“按位”逻辑——它不加总,不进位,更不看长度或位置。你改一行 CSS 却没生效,大概率不是浏览器 bug,而是 b 位差了 1。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2443

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5283

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6330

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5918

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

843

5

css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

4636

6

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

1017

5

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.28

1878

6

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

2023.08.01

3586

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS 代码实例
CSS 代码实例

共45课时 | 20万人学习

Web前端入门基础教程
Web前端入门基础教程

共251课时 | 97万人学习

独孤九贱(6)_jQuery视频教程
独孤九贱(6)_jQuery视频教程

共44课时 | 36.8万人学习