CSS样式特异性5层次详解

你好,我是云桃桃。

一个希望帮助更多朋友快速入门 WEB 前端的程序媛。

云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合集

293篇原创内容-更多前端系列内容可以go公众.h:云桃桃

后台回复“前端工具”可获取开发工具,持续更新中

后台回复“前端基础题”可得到前端基础100题汇总,持续更新中

后台回复“前端电子书”可获取20+本精选电子书

前言

在 CSS 中,特异性(Specificity)是一个决定页面中哪些样式规则应用到特定元素的规则集。当多个规则都适用于同一个元素时,特异性决定了哪个规则将被应用。理解特异性对于编写清晰、可预测的 CSS 代码至关重要。

那我们一起来看看吧。

特异性的层次

特异性有 5 个层次,从高到低依次是:

  • 内联样式:直接在 HTML 元素的style属性中声明的样式,特异性最高。

  • ID 选择器:使用#定义的,如#header

  • 类选择器、属性选择器和伪类:使用.定义的类选择器,如.highlight,使用[attribute]定义的属性选择器,如[type="text"],以及伪类,如:hover

  • 元素和伪元素选择器:元素选择器,如pdiv,以及伪元素选择器,如::before

  • 通用选择器(*):*。

也就是一个优先级公式:内联样式 > ID 选择器 > 类选择器、伪类、属性选择器 > 元素选择器、伪元素选择器 > 通用选择器(*)

假设我们有以下 CSS 规则:

p {
  color: blue;
}

#main p {
  color: green;
}

p.highlight {
  color: red;
}

效果如下:

图片

也就是说,如果一个<p>元素同时拥有id="main"class="highlight",那么它的文本颜色将会是绿色,因为 ID 选择器的特异性高于元元素和类选择器。

计算特异性的规则

特异性是通过计算每个选择器的层次值来确定的。具体来说,特异性的计算规则如下:

  • 内联样式:加 1000 个特异性值。

  • ID 选择器:每个 ID 加 100 个特异性值。

  • 类、属性和伪类选择器:每个类、属性或伪类加 10 个特异性值。

  • 元素和伪元素选择器:每个元素或伪元素加 1 个特异性值。

  • 通用选择器(*):加 0 个特异值。

如果有多个选择器,它们的特异性值会相加。

例子:以下 CSS 规则,如注释说明,所以文字显示的是,蓝色。

/* 特异性:101 */
#content p {
  color: green;
}

/* 特异性:11 */
p.highlight {
  color: red;
}
<div class="content">
  <!-- 特异性 1000 -->
  <p class="highlight" style="color: blue">This is text.</p>
</div>

特异性是 CSS 中一个复杂但功能强大的概念。掌握了特异性,你就可以更精确地控制页面的样式,避免许多常见的样式冲突问题。

那如果两个或更多具有相同特异性的样式规则应用于同一个元素时,是什么规则呢?遵循以下 2 点:

  • 后者优先:如果有多个相同特异性的规则,最后一个出现的规则会生效。

  • 重要的是优先:如果使用了!important,则该规则会覆盖其他所有非!important规则,它的特异值可以理解为是 10000。比如,上面 css 的最后我们再加入一个规则。

/* 特异性:10001 = p标签是1 + important是10000 */
p {
  background-color: #13dada;
  font-size: 20px;
  color: #fff !important;
}

效果就会变成我们新写的样式了。

图片

虽然!important在 CSS 中是一个强大的声明,它允许你强制浏览器忽略掉其他所有 CSS 规则,使得使用!important的样式规则具有最高优先级。然而,!important也被认为是一种万不得已的糟糕做法...

为什么不建议用 important?

因为它违背了 CSS 的层叠性(Cascading)和特异性原则,使得样式表难以维护和理解。以下是一些可能会考虑使用!important的情况:

  1. 临时覆盖:在紧急情况下快速修复问题,尤其是当你没有时间或权限去修改更具体的选择器或结构时。

  2. 第三方样式覆盖:有时你可能需要覆盖第三方库或框架的样式,而这些样式往往使用了非常具体的选择器。在这种情况下,使用!important可能是一个折衷方案。

  3. 交互状态:在某些情况下,为了确保元素在特定交互状态下(如:hover:active:focus)的样式表现,开发者可能会使用!important

  4. JavaScript 生成的样式:如果 JavaScript 动态生成的样式与 CSS 有冲突,有时候不得不使用!important来确保样式被应用。

  5. 特定类型的修复:在一些罕见的情况下,可能需要修复浏览器的特定 bug 或兼容性问题,这时可能会用到!important

尽管有上述情况,通常建议尽可能避免使用!important。如果发现自己需要频繁使用!important,这通常是一个信号,表明 CSS 代码需要重构。

更好的做法是使用更具体的选择器、利用 CSS 的层叠性原则,或者重新考虑 HTML 结构来自然地达到所需的样式效果。

OK,以上本文完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/584621.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云端芳华、运维之美

今天&#xff0c;在我们享受互联网服务带来的便利与高效的同时&#xff0c;有一群人默默地在幕后为我们提供支持&#xff0c;他们就是云端运维人员。 值此五一国际劳动节来临之际&#xff0c;我们要真诚感谢他们辛勤的劳动和奉献&#xff01;

基于ssm+vue开放式教学评价管理系统【ppt·代码·文档报告】

项目演示视频 项目名称&#xff1a;开放式教学评价管理系统 系统介绍&#xff1a;本系统是通过java的SSM框架来实现的&#xff0c;前端采用vue框架进行实现 管理员通过登录进入到系统操作界面&#xff0c;结合需求可以对个人信息进行在线修改维护&#xff0c;也可结合需求进行…

经典文献阅读之--SurroundOcc(自动驾驶的环视三维占据栅格预测)

0. 简介 环视BEV已经是很多场景中需要的功能&#xff0c;也是视觉代替激光雷达的有效解决方案&#xff0c;而《SurroundOcc: Multi-camera 3D Occupancy Prediction for Autonomous Driving》一吻则代表了这个领域的SOTA算法&#xff0c;文中通过多帧点云构建了稠密占据栅格数据…

【设计模式】抽象工厂模式(Abstract Factory Pattern)

目录标题 抽象工厂设计模式详解1. 介绍2. 结构3. 实现步骤3.1 创建抽象产品接口3.2 创建具体产品类3.3 创建抽象工厂接口3.4 创建具体工厂类 4. 好处与优点5. 坏处与缺点6. 适用场景7. 总结 抽象工厂设计模式详解 1. 介绍 抽象工厂模式是一种创建型设计模式&#xff0c;它提供…

Kimichat使用技巧:方便又实用的kimi+智能体

今天kimi智能助手推出了kimi的功能。简单的说&#xff0c;就是一系列kimi已经写好的提示词&#xff0c;用户可以直接调用、对话。 Kimi分为官方推荐、办公提效、辅助写作、社交娱乐、生活实用这几类。可以从左边侧边栏点击进入。 官方推荐的有&#xff1a; Kimi 001号小客服&…

c语言——二叉树

目录 目录 二叉树关键概念理解 一颗拥有1000个结点的树度为4&#xff0c;则它的最小深度是&#xff1f; 那么对于二叉树&#xff0c;只掌握这些是远远不够的&#xff0c;我们还需要掌握几个最基本的经典问题&#xff0c; 求二叉树大小 求叶子结点个数 求深度 求第k层的…

多线程编程9——线程池

一、为什么要引入线程池&#xff1f; 虽然对比进程&#xff0c;线程已经很轻量了&#xff0c;创建销毁调度线程都更高效。但是随着并发程度的提高&#xff0c;我们对于性能要求的标准也越来越高&#xff0c;当我们需要频繁创建销毁调度线程时&#xff0c;就发现线程也没有那么…

【基础算法】二分查找

1.二分查找 二分查找 思路&#xff1a; 朴素二分模版 class Solution { public:int search(vector<int>& nums, int target) {int l 0, r nums.size() - 1;while(l < r){int mid (l r) / 2;if(nums[mid] < target) l mid 1;else if(nums[mid] > ta…

综合性练习(后端代码练习1)——加法计算器

目录 一、准备工作 二、约定前后端交互接口 1、概念介绍 2、需求分析 3、接口定义 请求参数 响应数据 三、服务器代码 四、前端页面代码 五、运行测试 遇到问题如何解决&#xff1f; 需求&#xff1a;输入两个整数&#xff0c;点击 “点击相加” 按钮&#xff0c;显…

JAVA顺序表相关习题1

1.笔试题:cvte str1 :welcome to cvte str2:come 描述:删除第一个字符串当中出现的所有的第二个字符串的字符!结果:wlt vt 要求 用ArrayList完成! public class Test {public static List<Character> findSameWords(String u1, String u2){List<Character> listn…

前端请求没问题,后端正常运行,但查不出数据

写代码时写得快了些&#xff0c;Orders.的订单状态写错了CONFIRMED 改成COMPLETED

二、再识VUE-MVVM

一、初识VUE 二、再识VUE-MVVM 三、VUE数据代理 MVVM Vue.js 专注于 MVVM 模型的 ViewModel 层。它通过双向数据绑定把 View 层和 Model 层连接了起来。实际的 DOM 封装和输出格式都被抽象为了 Directives 和 Filters。 ViewModel 一个同步 Model 和 View 的对象。在 Vue.js…

汇川AM400PLC编码器转速测量功能块(M法测速)

M法测速的原理和相关代码,大家可以参考相关专栏文章,常用链接如下: 1、编码器M法测速仿真 编码器M法测速仿真(Simulink)_mt法测速 simulink-CSDN博客文章浏览阅读2k次。编码器M法和T法测速的详细讲解可以参看下面的文章链接,这里不再赘述,这里主要介绍Simulink里建模仿真…

(06)vite与ts的结合

文章目录 系列全集package.json在根目录创建 tsconfig.json 文件在根目录创建 vite.config.ts 文件index.html额外的类型声明 系列全集 &#xff08;01&#xff09;vite 从启动服务器开始 &#xff08;02&#xff09;vite环境变量配置 &#xff08;03&#xff09;vite 处理 c…

详细介绍如何使用YOLOv9 在医疗数据集上进行实例分割-含源码+数据集下载

深度学习彻底改变了医学图像分析。通过识别医学图像中的复杂模式,它可以帮助我们解释有关生物系统的重要见解。因此,如果您希望利用深度学习进行医疗诊断,本文可以成为在医疗数据集上微调YOLOv9 实例分割的良好起点。 实例分割模型不是简单地将区域分类为属于特定细胞类型,…

新质生产力实践,我用chatgpt开发网站

是的&#xff0c;我用chatgpt开发了一个网站&#xff0c;很轻松。 我之前一点不懂前端&#xff0c;也没有网站开发的代码基础&#xff0c;纯正的0基础。 从0开始到最后成品上线&#xff0c;时间总计起来大致一共花了2-3周的时间。 初始想法我是想给我公司开发一个网站&#…

3月8日是星期六

突然有查询特殊条件日期的需求。 <html> <title>3月8日是星期六</title> <center> <h1 id"h1"></h1> <div id"div"></div> </center> <script> var weekday [星期日, 星期一, 星期二, 星期…

Eclipse:-Dmaven.multiModuleProjectDirectory system propery is not set.

eclipse中使用maven插件的时候&#xff0c;运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match. 可以设一个环境变量M2_HOME指向你的maven安装目录 M2_HOMED:\Apps\…

echarts开发技巧

tooltip 提示框组件相关的行为&#xff0c;必须引入提示框组件后才能使用。 tooltip: {trigger: axis,axisPointer: {type: cross,label: {backgroundColor: #6a7985,},},//为弹出层的value值增加百分号valueFormatter: function (value) {return value %}, }, tooltip.axi…

碳课堂|快速了解标准要点:ISO 14064-1

为了提高企业组织碳排放报告信誉度&#xff0c;国际标准化组织&#xff08;ISO&#xff09;发布了ISO14064 标准&#xff08;全称&#xff1a;《ISO 14064-1组织层次上对温室气体排放和清除的量化和报告的规范及指南》&#xff09;&#xff0c;报告中详细规定了公司温室气体清单…