【从零开始学习CSS | 第三篇】选择器优先级

目录

前言:

常见选择器的优先级(从高到低)

选择器的权重:

总结:


前言:

        在前几篇文章中我们介绍了大量的选择器,那么大量的选择器在使用的时候,一定是有一个优先级顺序的,因此我们在本篇文章中,就详细的给大家介绍一下各个选择器之间的优先级高低关系。

常见选择器的优先级(从高到低)

1. 内联样式(Inline styles):
  - 优先级最高的选择器。
  - 通过在HTML元素的style属性中直接定义样式。
   -示例代码:

<div style="color: red;">This is a div with inline style.</div>

2. ID选择器(ID selectors):
   - 通过给元素添加id属性,并使用#符号进行选择。
   - 示例代码:

#myDiv
{
color: blue;
}<div id="myDiv">This is a div with ID selector.</div>

3. 类选择器(Class selectors):
   - 通过给元素添加class属性,并使用.符号进行选择。
   - 示例代码:

    .myClass {color: green;}<div class="myClass">This is a div with class selector.</div>

4. 属性选择器(Attribute selectors):
   - 通过元素的属性进行选择。
   - 示例代码:

 input[type="text"]{border: 1px solid gray;}<input type="text" />

5. 伪类选择器(Pseudo-class selectors):
   - 通过元素的特殊状态选择。
   - 示例代码:

<a href="#">This is a link.</a>a:hover 
{text-decoration: underline;}

6. 标签选择器(Element selectors):
   - 通过元素的标签名进行选择。
   - 示例代码:

<h1>This is a heading.</h1>h1 
{
font-size: 24px;
}

在样式表中,如果多个选择器应用到同一个元素上,优先级较高的选择器的样式将会覆盖优先级较低的选择器的样式。通过合理的选择器使用,可以确保样式的正确应用。

选择器的权重:

CSS选择器的权重是一个用来确定选择器优先级的值,它决定了当多个选择器应用于同一个元素时,哪个选择器的样式规则被应用。

CSS选择器权重可以按照以下规则进行计算:

1. 内联样式的权重为 1000。内联样式是直接在元素的`style`属性中定义的样式规则。

2. ID选择器的权重为 100。ID选择器使用`#`表示,例如`#myElement`。

3. 类选择器、属性选择器和伪类选择器的权重为 10。类选择器使用`.`表示,属性选择器使用`[]`表示,伪类选择器使用`:`表示。

4. 标签选择器和伪元素选择器的权重为 1。标签选择器是直接使用HTML标签名称表示的选择器,例如 `div`、`p`、`a`。伪元素选择器使用`::`表示,例如::before、::after。

当多个选择器应用于同一个元素时,CSS引擎会将选择器的权重进行比较,优先应用权重较高的样式规则。具有相同权重的选择器,后定义的样式规则将覆盖先定义的样式规则。

需要注意的是,权重的计算是独立的,不受选择器的具体位置或者样式声明的顺序影响。也就是说,无论选择器在哪个样式表中、或者样式规则的顺序如何,权重计算都是根据选择器本身进行的。

如果在权重计算中使用了重要性声明`!important`,则该样式规则将具有最高的优先级,无视其他选择器的权重。

总之,选择器权重提供了一种机制,可以管理和控制不同选择器应用于元素时的样式优先级。合理使用选择器权重可以确保样式规则的正确应用和覆盖。

计算案例:

        在CSS中,可以使用逗号将多个选择器组合在一起,形成一个复合选择器。当使用复合选择器时,每个选择器都会单独计算其权重,并且最终的权重是所有选择器权重的累加。

对于复合选择器 (a, b, c),每个选择器的权重将被单独计算,然后相加得到最终的权重。

例如,对于选择器 `div.container, .myClass, #myId`,我们将按照以下步骤计算权重:

  • 对于选择器 `div.container`,它由一个标签选择器和一个类选择器组成。标签选择器的权重为    1,而类选择器的权重为 10。因此,`div.container` 的权重为 1 + 10 = 11。
  • 对于选择器 `.myClass`,它只有一个类选择器,其权重为 10。
  • 对于选择器 `#myId`,它只有一个ID选择器,其权重为 100。
  • 最后,将三个选择器的权重相加:11 + 10 + 100 = 121。

因此,选择器组合 `(div.container, .myClass, #myId)` 的权重为 121。

有的(a,b,c)也会直接记录当前选择器的个数,例如:

 这种在比较的时候直接比较每一位的个数就好了,但实际上和我们介绍的还是一个东西,而我们写好一个选择器之后,编译器也会把当前选择器的权重告知我们的。

在应用样式规则时,具有最高权重的选择器的样式规则将适用于元素。如果多个选择器具有相同的最高权重,则最后定义的样式规则将优先应用。

需要注意的是,权重计算遵循选择器优先级的规则,其中 ID 选择器的权重最高,其次是类选择器和属性选择器,最后是标签选择器。因此,当计算复合选择器的权重时,应根据单个选择器的权重进行计算,并将它们相加。

总结:

本文我们详细的介绍了选择器的优先级以及计算方式,在以后我们写大型前端项目的时候,就会频繁的调整选择器的优先级以此来达到我们需要的样式,因此我们一定要掌握好本章节。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2快速入门Spring基于XML的方式注册第一个组件

基于XML的方式注册第一个组件 开发步骤 第一步&#xff1a;创建Maven工程配置生成的pom.xml文件, 添加spring context基础依赖和junit依赖(注意根据Spring官方文档描述,Spring6需要JDK版本17) 当添加Spring的基础依赖spring context之后&#xff0c;Maven会自动关联并引入其…

【golang中的切片的相关知识点】[ ] slice

golang-切片 切片的定义和初始化切片的内存分析切片的操作获取长度和容量追加元素复制切片 切片的遍历切片的特性总结 Golang中的切片是一种灵活且强大的数据结构&#xff0c;它可以动态地增长和缩小。切片是基于数组的抽象&#xff0c;它提供了更方便的操作和更灵活的内存管理…

什么是分布式微服务?

什么是分布式微服务&#xff1f; 前言什么是微服务举例说明 什么是分布式图解分布式与微服务单体架构及部署微服务架构分布式影响 分布式微服务架构什么是分布式微服务架构面临的问题 前言 本文旨在讲清楚什么是分布式微服务架构&#xff0c;通过解释微服务架构和分布式架构&a…

瀚高数据库企业版V4单机版-安装手册(Windows)

目录 瀚高数据库企业版V4单机版-安装手册&#xff08;Windows&#xff09; 1. 环境准备 2. 软件安装 3.设置环境变量 4 配置数据库文件 瀚高数据库企业版V4单机版-安装手册&#xff08;Windows&#xff09; 1. 环境准备 ①.安装数据库之前&#xff0c;请确保vcredist_x6…

服务器数据库的防护策略与360后缀勒索病毒解密方法

在当今数字化时代&#xff0c;服务器数据安全面临着越来越多的挑战。其中&#xff0c;勒索病毒攻击就是一种常见的网络威胁之一&#xff0c;最近&#xff0c;很多的公司服务器数据库遭到了360后缀勒索病毒攻击&#xff0c;导致许多重要数据无法读取&#xff0c;一旦企业的数据库…

IDR: Self-Supervised Image Denoising via Iterative Data Refinement

文章目录 IDR: Self-Supervised Image Denoising via Iterative Data Refinement1. noisy-clean pair 比较难获取2. noiser-noisy pair 比较容易获取&#xff0c;但是训练效果呢&#xff1f;2.1 noiser-noisy 训练的模型&#xff0c;能够对 noisy 图像一定程度的降噪2.2 noiser…

YOLOv7 yaml 文件简化

文章目录 修改方式common.pyyolo.pyYOLOv7-ELAN.yaml原始的 YOLOv7 yaml 文件的模块是拆开写的,比较乱, 改进起来也不太容易,这篇博文将 YOLOv7 yaml 文件换了一种写法, 参数量和计算量是完全和原来一致的,区别只是在于 yaml文件的写法不同, 封装后具体的结构可以参考…

希尔排序

希尔排序 排序步骤 1、分组&#xff0c;以任意长度进行分组&#xff08;这个长度我们称作增量gap&#xff09;&#xff1b;通常以总长度的一半这个数为依据进行分组&#xff0c;每间隔 gap 个数即为一组 2、组内排序&#xff1b;组内使用插入排序法进行排序 3、重新设置间隔…

微服务Gateway网关(自动定位/自定义过滤器/解决跨域)+nginx反向代理gateway集群

目录 Gateway网关 1.0.为什么需要网关&#xff1f; 1.1.如何使用gateway网关 1.2.网关从注册中心拉取服务 1.3.gateway自动定位 1.4.gateway常见的断言 1.5.gateway内置的过滤器 1.6.自定义过滤器-全局过滤器 1.7.解决跨域问题 2.nginx反向代理gateway集群 2.1.配置…

Upsource的下载安装使用

一&#xff0c;下载 下载地址&#xff1a; https://www.jetbrains.com/upsource/下载并解压到指定的文件夹 ├── api ├── apps ├── backups # 备份目录 ├── bin # 应用目录 ├── conf # 配置文件 ├── data ├── internal ├── launcher ├── lib ├─…

Java集合详解

1. 集合基础 1.1 集合概述 1.2 ArrayList构造方法和添加方法 1.3 ArrayList集合常用方法 1. 集合基础 1.1 集合概述 集合类的特点:提供一种存储空间可变的存储横型&#xff0c;存储的数据容量可以发生改变 ArrayList ArrayList< >: 可调整大小的数组实现 < >:是…

TextView 必填项pro版

优点 基本解决对齐方式,可以设置前缀隐藏和显示 /*** https://blog.csdn.net/u013982652/article/details/94404711* Android自定义TextView实现必填项前面的*号* 另一种实现方式(推荐使用这种,有非必填情况的话不会有对齐问题)* <p>* <cn.mvp.mlibs.weight.MiRequire…