权重计算的优先级规则是怎样的?

简介: 【10月更文挑战第28天】CSS权重计算的优先级规则明确了不同类型选择器及选择器组合在应用样式时的先后顺序,帮助开发者准确地控制页面元素的样式表现,避免样式冲突和意外的显示效果,从而实现预期的页面设计和布局。在实际开发中,理解和运用这些规则是编写高效、可维护CSS代码的关键

CSS权重计算的优先级规则是一个用于确定当多个CSS样式规则应用于同一元素时,哪一个规则将最终生效的重要机制

从高到低的优先级顺序

1. 内联样式

  • 内联样式是直接写在HTML元素的 style 属性中的样式,其权重值为 1,0,0,0,具有最高的优先级。这意味着无论在外部CSS文件或 <style> 标签中定义了何种样式,只要元素有内联样式,内联样式就会优先应用,并覆盖其他选择器定义的相同样式。例如:<p style="color: red;">这是一段红色的文字</p>,这里的 color: red 内联样式会使该段落文字颜色为红色,即使在外部CSS中有针对 p 元素的其他颜色样式定义,也不会生效。

2. ID选择器

  • ID选择器以 # 开头,用于选择具有特定ID的元素,权重值为 0,1,0,0。ID选择器的优先级仅次于内联样式。如果一个元素既有内联样式又有ID选择器定义的相同样式,内联样式将优先;如果没有内联样式,ID选择器定义的样式则会生效。例如,对于元素 <p id="myPara">这是一段文字</p>,若有以下CSS规则:
#myPara {
   
  color: blue;
}

则该段落文字颜色将为蓝色,除非存在内联样式覆盖它。

3. 类选择器、属性选择器和伪类选择器

  • 类选择器以 . 开头,用于选择具有特定类名的元素;属性选择器根据元素的属性来选择元素;伪类选择器用于选择处于特定状态的元素,如 :hover:active 等。这三种选择器的权重值相同,均为 0,0,1,0。当多个类选择器、属性选择器或伪类选择器同时应用于一个元素时,它们的权重相同,后面定义的样式会覆盖前面定义的样式。例如:
.myClass {
   
  color: green;
}

[type="text"] {
   
  color: yellow;
}

a:hover {
   
  color: purple;
}

如果一个元素同时具有这些选择器所对应的条件,那么在鼠标悬停时,链接颜色将为紫色;若不是悬停状态且元素具有 myClass 类名和 type="text" 属性,颜色将为黄色,因为它是最后定义的具有相同权重的样式。

4. 元素选择器和伪元素选择器

  • 元素选择器直接选择HTML元素,如 pdivh1 等;伪元素选择器用于选择元素的特定部分,如 ::before::after 等。它们的权重值为 0,0,0,1,是优先级相对较低的选择器。当多个元素选择器或伪元素选择器应用于同一元素时,同样遵循后面定义的样式覆盖前面定义的样式的原则。例如:
p {
   
  color: gray;
}

p::before {
   
  content: "前缀";
  color: orange;
}

这里 p 元素的文字颜色为灰色,但伪元素 p::before 插入的内容颜色为橙色,各自的样式按照权重和定义顺序生效。

选择器组合的权重计算

  • 当一个样式规则由多个选择器组合而成时,其权重是各个选择器权重值的相加。例如:#myId.myClass p { color: orange; },这个选择器组合包含了ID选择器、类选择器和元素选择器,其权重计算为 0,1,0,0 + 0,0,1,0 + 0,0,0,1 = 0,1,1,1。在比较多个选择器组合的优先级时,按照从左到右依次比较权重值的各个部分。如果第一个部分不同,则权重值大的样式规则优先应用;如果第一个部分相同,则比较第二个部分,以此类推。例如,对于选择器组合 0,1,1,10,1,0,1,前者的优先级更高,因为其第三个部分的值更大。

继承样式的优先级

  • 继承的样式权重最低,其权重值为 0,0,0,0。如果一个元素没有显式定义某个样式属性,而其祖先元素定义了该属性并可继承,那么该元素会继承祖先元素的样式。但是,如果该元素自身通过其他选择器定义了相同的样式属性,那么自身定义的样式将优先应用,无论继承的样式权重如何。例如,在以下HTML和CSS结构中:
<div style="color: blue;">
  <p>这是一段文字</p>
</div>
p {
   
  color: red;
}

尽管 p 元素位于具有蓝色文字颜色的 div 元素内部,但由于 p 元素自身通过元素选择器定义了 color: red 的样式,所以该段落文字颜色为红色,而不是继承自父元素的蓝色。

相同权重的样式覆盖规则

  • 如果多个样式规则具有相同的权重,那么它们的顺序就非常重要。在CSS中,后面定义的样式会覆盖前面定义的样式。这适用于所有具有相同权重的选择器或选择器组合。例如:
.myClass {
   
  color: green;
}

.myClass {
   
  color: yellow;
}

这里两个类选择器的权重相同,但由于后面的 .myClass 样式定义在后面,所以具有该类名的元素的颜色将为黄色。

CSS权重计算的优先级规则明确了不同类型选择器及选择器组合在应用样式时的先后顺序,帮助开发者准确地控制页面元素的样式表现,避免样式冲突和意外的显示效果,从而实现预期的页面设计和布局。在实际开发中,理解和运用这些规则是编写高效、可维护CSS代码的关键。

相关文章
|
网络协议 Linux 网络安全
Centos配置静态ip地址 (保姆级教程!!!)(上)
Centos配置静态ip地址 (保姆级教程!!!)
1186 0
|
Web App开发 应用服务中间件 Go
尝鲜:如何搭建一个简单的webrtc服务器
前几天我一朋友问我有关webrtc的事,简单了解了下相关知识,搭建了一个webrtc的服务,以及经历的各种踩坑事件,感觉踩坑主要是Python、Node、OpenSSL等版本问题和证书问题导致。本来以为很简单的搭建,但在搭建的过程中遇到各种阻碍,写一篇文章梳理一下。
14352 0
|
6月前
|
算法 数据可视化 数据挖掘
别再乱用数据分析方法!总结10个高频数据分析方法
8年数据分析经验总结:避开“过度建模”陷阱,精选10个高频实用方法——从描述性统计、EDA、假设检验到回归、聚类、时间序列等,讲清定义、操作与避坑要点。附赠数据化全流程资料包及FineBI实操指南,零代码拖拽搞定全链路分析。(239字)
|
存储 人工智能 供应链
揭秘!RFID技术如何快速库房盘点?
RFID技术通过无线信号自动识别物品信息,支持批量读取、无需视线接触,大幅提升库房盘点效率与准确性。结合电子标签、读写设备与管理系统,实现库存实时同步与智能管理。
|
11月前
|
存储 数据采集 监控
RFID技术快速解决固定资产管理中各种 “拦路虎”
在数字化转型背景下,RFID固定资产管理系统通过标签、读写设备与管理平台的协同,实现资产全生命周期的智能追踪与管控,解决传统管理中盘点低效、账实不符、资产流失等问题,助力企业提升管理效率、降低运营成本,推动资产管理向智能化、信息化升级。
|
运维 监控 中间件
Linux运维笔记 - 如何使用WGCLOUD监控交换机的流量
WGCLOUD是一款开源免费的通用主机监控工具,安装使用都非常简单,它可以监控主机、服务器的cpu、内存、磁盘、流量等数据,也可以监控数据库、中间件、网络设备
|
供应链 物联网 网络安全
跨境电商国外研究现状如何
跨境电商研究涵盖四大领域:发展趋势与模式、影响因素、消费者行为及挑战与问题。研究发现,全球化供应链整合、平台全球化拓展、社交电商兴起和技术应用创新是主要趋势。影响因素包括技术、政策、市场环境和人才。消费者行为受购买决策因素、文化差异和信任问题影响。挑战主要包括关税与税收、物流配送、标准规范缺失及网络安全与隐私保护问题。
|
缓存 监控 测试技术
服务器压力测试
【10月更文挑战第11天】服务器压力测试
1302 31
|
前端开发 JavaScript C++
CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)
CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)
3324 0
|
安全 NoSQL Redis
服务器又被攻击了,我这样做...
近期遭遇阿里云服务器频繁报警,经分析发现是由于测试服务器所有端口对公网开放,导致自动化程序对其扫描。黑客可能利用类似Redis的未授权访问漏洞进行攻击。为避免此类问题,建议:1. 不开放不必要的端口;2. 避免以root权限运行服务;3. 设置服务器IP白名单;4. 定期更换密码。保持良好安全习惯可保障服务器安全。
4731 4
服务器又被攻击了,我这样做...