【从零开始学习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.mzph.cn/news/3233.shtml

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

相关文章

【计算机视觉】DINOv2(视觉大模型)代码使用和测试(完整的源代码)

文章目录 一、环境部署二、导入原图2.1 使用vit_s14的模型 三、使用其他模型3.1 使用vit_b14的模型3.2 使用vit_l14的模型3.3 使用vit_g14的模型 一、环境部署 !git clone https://ghproxy.com/https://github.com/facebookresearch/dinov2.git输出为&#xff1a; Cloning in…

DT灯光基础(辉光 雾 阴影 渲染选项)

点光源 不能宣染&#xff0c;换个版本。不能正常预览 聚光灯 t 手柄 挡光版 平行光阴影 光线追踪阴影 没有看见阴影 灯光使用贴图 环境光 不进行渲染物体 不渲染阴影 接收阴影 不反射 可以看到反射 没有反射了 灯光链接 取消灯照 灯光雾 辉光 变化不明显

C++初阶 - 3.类和对象(中)

目录 1.类的6个默认成员函数 2.构造函数 2.2特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 6.日期类的实现 7.const成员 8.取地址及const取地址操作符重载 1.类…

FCOS 论文学习

1. 解决了什么问题&#xff1f; 之前的目标检测器如 RetinaNet、SSD、YOLOv3 都依赖于 anchors。基于 anchors 的检测器有如下三个缺点&#xff1a; 检测表现对于 anchors 的大小、宽高比和数量等超参数很敏感&#xff1b;即使精心设计了 anchors&#xff0c;但由于大小和宽高…

EasyCVR告警类型设置后首页需要刷新才能更新的问题优化

EasyCVR视频融合平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;包括&#xff1a;NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。平台具有强大的数据接入、处理及分发能力&#xff0c;可在复杂的网络环境中&#xff0c…

Zabbix 自动发现及注册

1、依次选择 Configuratio、Discovery、Create discovery rule&#xff08;配置、自动发现、创建发现规则&#xff09; 创建客户端发现规则 2、zabbix客户端安装 agent zabbix客户端一键安装脚本 脚本参考链接 #!/bin/bash #Zabbix-Agent 5.0Zabbix_Service192.168.63.20#安…

【PHP面试题44】PHP5的版本和PHP7之间有哪些区别

文章目录 一、前言二、底层调整2.1性能提升2.2 新的引擎2.3 数据类型改进2.4 错误处理改进2.5 语言特性增加 三、应用层差异3.1 兼容性3.2 类和方法改进3.3 错误处理机制3.4 性能优化3.5 新的扩展支持 四、一些语法糖示例4.1 标量类型声明示例4.2 新增了Spaceship操作符&#x…

win11中的pagefile.sys

在C盘系统下&#xff0c;有一个命名为pagefile.sys的文件占用C盘太大的空间&#xff0c;不少用户怕删除pagefile.sys文件之后会对系统造成影响&#xff0c;而不少用户想要将pagefile.sys文件移动到D盘中。那么pagefile.sys是什么文件&#xff1f;Win10系统下pagefile.sys文件太…

【C++】list的模拟实现

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

5. MySQL - JDBC SQL 注入 博客系统(万字详解)

目录 1. 介绍 2. 使用 JDBC 连接数据库 2.1 如何使用 JDBC 连接数据库 2.2 导入的各个类 2.3 DataSource 对象的创建 2.4 从 DataSource 对象中得到 Connection 对象 2.5 创建 Statement 对象 2.6 从 ResultSet 中遍历每行结果&#xff0c;从每行中获取每列的值 2.7 代…

EIK+Filebeat+Kafka

目录 Kafka 概述 为什么需要消息队列&#xff08;MQ&#xff09; 使用消息队列的好处 消息队列的两种模式 Kafka 定义 Kafka 简介 Kafka 的特性 Kafka 系统架构 Partation 数据路由规则&#xff1a; 分区的原因 部署 kafka 集群 1.下载安装包 2.安装 Kafka 修改配…

B072-项目实战-用户模块--前台登录 三方登录

目录 前台登录-账号登录前端完成左上角显示用户信息配置前置拦截器、后置拦截器和不受限资源拦截器 三方登录-微信登录概述流程图用法代码实现步骤分析:实现准备代码前端login.htmlcallback.html 后端LoginController-微信登录LoginServiceImpl-微信登录解决回调域名不能跨域绑…

安达发|某大厂使用APS计划排程真实成功案例

在很多群里、朋友圈、公众号上可以看到&#xff0c;很多精益咨询老师认为&#xff0c;不仅ERP不啥用&#xff0c;APS更是无聊之举&#xff0c;而且肯定是用不好的。但&#xff0c;事实上可能还真不是这样的。 一个深圳的客户&#xff0c;用了APS以后&#xff0c;不仅装配的齐套…

桥梁监测需要哪些设备?

随着我国经济的发展&#xff0c;我国桥梁建设也迈上了新的台阶。截至2022年底&#xff0c;我国的公路桥梁总数达到了103.32万座。然而&#xff0c;随着在役桥梁使用时间的增长&#xff0c;承载能力受到荷载、环境以及结构退化等因素的影响&#xff0c;桥梁安全问题日益凸显。桥…

vue3和gin框架实现简单的断点续传

vue3和gin框架实现简单的断点续传 前端代码 Test.vue <template><div><inputtype"file"ref"uploadRef"change"upload"multiple/><templatev-for"item in fileList":key"item.key"><br><…

spring复习:(39)注解方式的ProxyFactoryBean

一、定义接口 package cn.edu.tju.study.service;public interface MyService {void myMethod(); }二、定义实现类&#xff1a; package cn.edu.tju.study.service;public class MyServiceImpl implements MyService{Overridepublic void myMethod() {System.out.println(&qu…

Redis 读写分离 使用redisTemplate执行lua脚本时,报错处理

项目框架说明 项目配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version></parent>....<dependency><groupId>org.springfra…

(学习笔记-TCP基础知识)TCP与UDP区别

UDP UDP不提供复杂的控制机制&#xff0c;利用IP提供面向[无连接]的通信服务。 UDP协议非常简单&#xff0c;头部只有8个字节(位)&#xff0c;UDP的头部格式如下&#xff1a; 目标和源端口&#xff1a;主要是告诉UDP协议应该把报文发给哪个进程包长度&#xff1a;该字段保存了…

TinyKv流程梳理三

split流程 处理协程启动 func (bs *Raftstore) startWorkers(peers []*peer) {ctx : bs.ctxworkers : bs.workersrouter : bs.routerbs.wg.Add(2) // raftWorker, storeWorkerrw : newRaftWorker(ctx, router)go rw.run(bs.closeCh, bs.wg)sw : newStoreWorker(ctx, bs.store…

基于Web API drap事件的简单拖拽功能

基于Web API drap事件的简单拖拽功能 效果示例图代码示例 效果示例图 代码示例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style type"text/css">* {padding: 0px;margin: 0px;box-s…