如何计算选择器的权重

简介: 如何计算选择器的权重

CSS 选择器的权重(Specificity)决定了多个规则作用于同一元素时,哪条规则最终生效。权重计算有明确的规则,通常用一个“四元组” (a, b, c, d) 表示,从左到右优先级依次降低,左侧数值大的权重更高。以下是具体计算方法:

一、权重四元组的定义

四元组 (a, b, c, d) 中每个位置对应不同类型的选择器,数值越大,权重越高:

  • a:是否包含「内联样式」(style 属性)。
    • 内联样式:a = 1
    • 非内联样式(外部/内部 CSS):a = 0
  • b:「ID 选择器」的数量(每个 ID 加 1)。
  • c:「类选择器、伪类、属性选择器」的数量(每个加 1)。
    • 类选择器:如 .class
    • 伪类:如 :hover:nth-child()
    • 属性选择器:如 [type="text"][name="user"]
  • d:「元素选择器、伪元素」的数量(每个加 1)。
    • 元素选择器:如 divp
    • 伪元素:如 ::before::after

二、计算规则

  1. 分别统计选择器中上述四类选择器的数量,填充到四元组 (a, b, c, d) 中。
  2. 比较权重时,从左到右依次比较数值:
    • a 不同,a 大的权重更高;
    • a 相同,比较 b,以此类推;
    • 只有前一项数值相等时,才比较后一项。
  3. 通配符(*)、组合符(+>~、空格)不影响权重,不计入任何位置。

三、实例计算

通过具体例子理解如何计算:

选择器 内联样式(a) ID选择器(b) 类/伪类/属性(c) 元素/伪元素(d) 权重四元组
div 0 0 0 1(元素) (0, 0, 0, 1)
.box 0 0 1(类) 0 (0, 0, 1, 0)
#header 0 1(ID) 0 0 (0, 1, 0, 0)
div p 0 0 0 2(两个元素) (0, 0, 0, 2)
.list li:hover 0 0 1(类)+1(伪类)=2 1(元素) (0, 0, 2, 1)
#nav .item[data-id="1"] 0 1(ID) 1(类)+1(属性)=2 0 (0, 1, 2, 0)
div#main .content::before 0 1(ID) 1(类) 1(元素)+1(伪元素)=2 (0, 1, 1, 2)
<div style="color: red"> 1(内联) 0 0 0 (1, 0, 0, 0)

四、权重比较示例

  1. (0, 1, 0, 0)#header) > (0, 0, 3, 2).a .b .c div p
    原因:b 位置前者为 1,后者为 0,左侧数值更大,无需比较后续。
  2. (0, 0, 2, 1).list li:hover) > (0, 0, 1, 3).item div span a
    原因:c 位置前者为 2,后者为 1,前者权重更高。
  3. (0, 1, 2, 0)#nav .item[data-id]) > (0, 1, 1, 5)#nav .box div p span a
    原因:ab 相同,比较 c 位置(2 > 1)。

五、特殊情况

  1. !important 优先级最高
    任何带有 !important 的样式会覆盖其他所有规则(包括内联样式),例如:

    .box {
          color: red !important; } /* 优先级最高 */
    

    ⚠️ 注意:尽量避免滥用 !important,否则会导致样式难以维护。

  2. 相同权重时,“后定义的规则生效”
    若两个选择器权重完全相同,CSS 代码中后出现的规则会覆盖先出现的规则:

    .box {
          color: blue; }  /* 先定义 */
    .box {
          color: green; } /* 后定义,最终生效 */
    
  3. 继承的样式权重最低
    元素从父元素继承的样式,会被元素自身的任何样式(无论权重多低)覆盖:

    .parent {
          color: red; } /* 父元素样式,子元素继承 */
    .child {
          color: blue; } /* 子元素自身样式,权重 (0,0,1,0),覆盖继承 */
    

总结

计算选择器权重的核心是按“内联样式 > ID > 类/伪类/属性 > 元素/伪元素”的顺序统计数量,形成四元组后从左到右比较。浏览器开发者工具的「Styles」面板会自动按权重排序规则,划掉被覆盖的样式,可辅助验证计算结果。掌握权重计算,能有效解决样式冲突问题。

相关文章
|
9月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 8 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
559 152
|
JavaScript 前端开发
如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)
如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)
300 0
如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)
|
Java API 数据库
Java一分钟之-JPA注解:@Entity, @Table, @Id等
【6月更文挑战第14天】Java Persistence API (JPA) 是Java开发中的ORM框架,通过注解简化数据访问层。本文介绍了三个核心注解:`@Entity`标识实体类,`@Table`自定义表名,`@Id`定义主键。易错点包括忘记添加`@Entity`、未正确设置主键。建议使用`@GeneratedValue`和`@Column`细化主键策略和字段映射。正确理解和应用这些注解能提高开发效率和代码质量。
1496 3
|
Linux Docker 容器
到底什么是镜像(概念)
镜像到底是什么?镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。 1.UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。
22382 0
|
8月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 9 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
586 142
|
9月前
|
存储 运维 安全
金融级 ZooKeeper 来袭:性能提升100%,SLA 99.99%,数据防护升级
阿里云微服务引擎 MSE ZooKeeper 企业版正式发布,提供比专业版更高的稳定性与安全能力,SLA 达 99.99%,整体服务性能提升 100%。针对关键业务,企业版通过独享资源池实现更高规格配额,满足大规模需求。此外新增数据备份容灾、容量管理反脆弱限流等功能,提升整体企业级特性,助力企业应对复杂业务挑战。
500 137
金融级 ZooKeeper 来袭:性能提升100%,SLA 99.99%,数据防护升级
|
9月前
|
负载均衡 NoSQL Redis
不增加 GPU,首 Token 延迟下降50%|LLM 服务负载均衡的新实践
针对LLM服务的特点,Higress AI网关以插件形式提供了面向LLM服务的负载均衡算法,包括全局最小请求数负载均衡、前缀匹配负载均衡以及GPU感知负载均衡,能够在不增加硬件成本的前提下,提升系统的吞吐能力、降低响应延迟,并实现更公平、高效的任务调度。
911 137
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
3028 45
|
存储 缓存 搜索推荐
session 详解:掌握客户端会话管理
session 详解:掌握客户端会话管理