当前位置: 首页 > news >正文

css的选择器及优先级

一、css选择器

CSS选择器是用来选择HTML文档中的元素,并为它们应用样式规则的工具。CSS选择器有很多种,可以根据元素的类名、ID、属性、伪类、伪元素、标签等来选择元素。以下是一些常见的CSS选择器及其用法:

1. ID选择器

  • 根据元素的ID属性选择元素。

  • 例如:#idName选择id="idName"的元素。

  • 使用场景

    • 用于页面中唯一的元素,如页面结构中的主要标题或导航栏。

    • 用于创建特定元素的特定样式,因为ID选择器的优先级很高。

  • 注意事项

    • 每个ID在页面中应该是唯一的,不要为多个元素使用相同的ID。

    • 过度使用ID选择器可能会使CSS难以维护。

2. 类选择器

  • 根据元素的类属性选择元素。

  • 例如:.className选择所有具有class="className"的元素。

  • 使用场景

    • 用于为多个元素应用相同的样式,这些元素在页面上多次出现。

    • 用于响应JavaScript操作,如添加或移除类来改变样式。

  • 注意事项

    • 类名应该描述性强,易于理解,以提高代码的可读性。

    • 避免使用过度具体的类名,这可能会导致样式难以复用。

3. 属性选择器

  • 根据元素的属性及其值选择元素。

  • 例如:[type="text"]选择所有<input type="text">元素。

  • 使用场景

    • 用于根据元素的属性或属性值来应用样式,如表单输入字段的类型。

    • 用于创建更复杂的选择器,结合其他选择器使用。

  • 注意事项

    • 属性选择器可能会降低CSS的性能,特别是在大型文档中。

    • 确保属性选择器的使用是必要的,避免过度使用。

4. 伪类选择器

  • 根据元素的特定状态选择元素,如:hover:focus:nth-child()等。

  • 例如:a:hover选择鼠标悬停在链接上的状态。

  • 使用场景

    • 用于定义链接的不同状态,如:hover:active

    • 用于选择特定的元素状态,如:nth-child():checked

  • 注意事项

    • 伪类选择器不应该与结构类选择器混淆,它们表示的是元素的状态而不是类型。

    • 确保伪类选择器的使用不会与页面的可访问性冲突。

5. 否定伪类选择器(:not)

  • 用于选择不符合某些条件的元素。

  • 它是一个非常有用的工具,它可以帮助你更精确地控制页面上的元素样式。

  • 例如::not(.visible)选择所有不包含class="visible"的元素。

  • 使用场景

    • 用于排除具有特定类、ID或其他条件的元素。

    • 使用否定伪类可以避免编写多个选择器,从而简化CSS规则。

  • 注意事项

    • 否定伪类选择器在现代浏览器中普遍支持,但在一些旧版本的浏览器中可能不受支持。

    • 否定伪类选择器的性能可能受到影响,尤其是在复杂的选择器中。

    • 使用时应注意选择器的准确性,避免创建过于复杂的选择器表达式。

6. 伪元素选择器

  • 用于选择元素的特定部分,如::before::after

  • 例如:p::first-letter选择每个<p>元素的第一个字母。

  • 使用场景

    • 用于创建装饰性元素,如在文本周围添加特定的背景或边框。

    • 用于修改元素的第一部分或最后一部分,如::first-line::first-letter

  • 注意事项

    • 伪元素内容(如content: "")可能会影响页面的可访问性。

    • 伪元素可能会使CSS规则复杂化,应谨慎使用。

7. 标签选择器

  • 根据元素的标签名选择元素。

  • 例如:p选择所有<p>元素。

  • 使用场景

    • 用于为所有同类型的元素应用样式。

    • 用于创建基本的页面样式,如所有段落文本的字体大小。

  • 注意事项

    • 标签选择器的优先级较低,容易被其他更具体的选择器覆盖。

    • 避免为所有元素设置过于通用的样式,以免造成样式冲突。

8. 后代选择器(空格)

  • 后代选择器使用空格来表示。

  • 它选择指定元素的所有后代元素,无论它们之间有多少层嵌套。

  • 例如:div p选择所有在<div>元素内部的<p>元素。

  • 使用场景

    • 用于选择嵌套在另一个元素内部的所有元素。

    • 用于为大型组件或模块内的所有元素设置样式。

  • 注意事项

    • 后代选择器可能会导致样式应用到不希望的元素上。

    • 使用时应注意选择器的精确度,避免不必要的样式继承。

9. 子选择器(>)

  • 子选择器使用大于号>来表示。

  • 它选择作为指定元素直接子元素的元素。

  • 例如:div > p选择所有直接在<div>元素内部的<p>元素,不包括那些嵌套在其他元素内部的<p>元素。

  • 使用场景

    • 用于选择直接子元素。

    • 用于创建父子元素之间的布局关系,如导航菜单项。

  • 注意事项

    • 子选择器只选择直接子元素,不包括更深层次的后代。

    • 确保使用子选择器时,DOM结构符合你的选择需求。

10. 相邻兄弟选择器(+)

  • 相邻兄弟选择器使用加号+来表示。

  • 它选择紧随指定元素之后的相邻兄弟元素。

  • 例如:h1 + p选择紧随<h1>元素之后的<p>元素。

  • 使用场景

    • 用于选择紧随另一个元素后的元素。

    • 用于设计元素之间的紧挨着的布局,如列表项后的段落。

  • 注意事项

    • 相邻兄弟选择器只作用于相邻的兄弟元素。

    • 确保使用相邻兄弟选择器时,元素的顺序符合你的设计需求。

11. 通用兄弟选择器(~)

  • 通用兄弟选择器使用波浪号~来表示。

  • 它选择指定元素之后的所有兄弟元素,这些兄弟元素与指定元素有相同的父元素。

  • 例如:h1 ~ p选择所有在<h1>元素之后的<p>元素,无论它们之间是否有其他类型的元素。

  • 使用场景

    • 用于选择在另一个元素之后的所有兄弟元素。

    • 用于为一系列元素设置样式,这些元素与某个特定元素有相同的父元素。

  • 注意事项

    • 通用兄弟选择器会选择所有后续的兄弟元素,而不仅仅是相邻的。

    • 使用时应注意选择范围,避免样式应用到不想要的元素上。

12. 通配符选择器(*)

  • 通配符选择器使用星号*来表示。

  • 它用于选择文档中的所有元素,一般用来设置一些默认样式。

  • 例如:*选择所有的元素

  • 使用场景

    • 用于为页面上的所有元素设置默认样式。

    • 用于CSS重置或规范化,以确保跨浏览器的一致性。

    • 用于覆盖浏览器的默认样式或之前定义的样式。

  • 注意事项

    • 通配符选择器的性能成本较高,尤其是在元素数量多的页面上,浏览器需要遍历DOM树中的每个节点来应用这些样式,这可能会增加渲染时间。

    • 通配符选择器的广泛匹配,应谨慎使用,以免无意中覆盖其他样式或影响性能。

    • 通配符选择器的优先级很低,这意味着它很容易被其他更具体的选择器覆盖。

一般情况下,根据自身的需求和代码习惯来选择合适的选择器,但是在使用这些选择器时,也应该考虑到它们的优先级、性能影响、代码的可维护性和可读性,合理的使用选择器可以提高CSS的效率和页面的性能。

二、css选择器的优先级

CSS选择器的优先级(也称为特异性)决定了当多个选择器应用于同一个元素时,哪个选择器将被应用。优先级是由选择器的类型决定的,不同类型的选择器具有不同的优先级权重。以下是选择器优先级的决定因素,按优先级从高到低排列:

1. 内联样式

  • 直接在HTML元素的style属性中定义的样式规则具有最高的优先级。

2. ID选择器

  • 每个ID在页面中应该是唯一的,因此ID选择器具有较高的优先级。

  • 优先级权重:1个ID = 10000。

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

  • 这些选择器用于定义元素的类别、属性或状态。

  • 优先级权重:1个类/属性/伪类 = 10。

4. 标签选择器、伪元素选择器和关系选择器:

  • 这些选择器基于元素的类型或其在文档中的位置。

  • 优先级权重:1个类型/伪元素/关系选择器 = 1。

5. 通配符选择器(*):

  • 通配符选择器没有优先级权重,因为它匹配所有元素。

6. 否定伪类:not):

  • 否定伪类的优先级取决于它所否定的选择器的优先级。

7. 继承

  • 某些CSS属性是从父元素继承而来的,它们的优先级最低。

8. !important规则

  • 如果在CSS规则中使用了!important声明,那么它将覆盖其他所有规则,无论它们的优先级如何。

注意事项:

  • 当优先级相同时,最后声明的规则将生效。

  • !important声明应该谨慎使用,因为它会打破自然的优先级规则,可能导致代码难以维护。

  • 优先级是基于选择器的组合计算的,而不是单个选择器。

  • 继承的样式没有优先级权重,但它们可以被更高优先级的规则覆盖。

理解CSS选择器的优先级对于解决样式冲突和编写更有效的CSS代码非常重要。

相关文章:

css的选择器及优先级

一、css选择器 CSS选择器是用来选择HTML文档中的元素&#xff0c;并为它们应用样式规则的工具。CSS选择器有很多种&#xff0c;可以根据元素的类名、ID、属性、伪类、伪元素、标签等来选择元素。以下是一些常见的CSS选择器及其用法&#xff1a; 1. ID选择器&#xff1a; 根据…...

JavaScript中的数组不改变原数组的方法

数组 var a [1, 2, 3, 5, 8, 13, 21] 不改变原数组的方法 length 数组元素的长度 继承自原型 concat(arrayX,arrayY) 合并两个或多个数组&#xff0c;返回新数组 合并&#xff0c;a.concat(b) var a[1,2,3],b[4,5,6],c[7,8,9]; a.concat(b,c); //[1, 2, 3, 4, 5, 6, 7…...

Go语言实现长连接并发框架 - 路由分组

文章目录 前言接口结构体接口实现项目地址最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;我们上篇博客实现了任务执行流的路由模块&#xff0c;接下来我们实现一下对任务执行流进行任务 接口 trait/router_group.go type RouterGroup interface {RouterGroup(flow ..…...

跨 VLAN 通信

跨 VLAN 通信指的是不同 VLAN 之间的网络设备进行数据交换的能力。由于 VLAN 将网络分割成多个逻辑隔离的广播域&#xff0c;默认情况下&#xff0c;不同 VLAN 之间的设备无法直接通信。为了实现跨 VLAN 通信&#xff0c;需要借助一些网络设备和技术。以下详细讲解跨 VLAN 通信…...

11.4 Linux_线程_条件变量

概述 条件变量的作用&#xff1a; 条件变量和互斥量配合使用&#xff0c;主要应用于生产者和消费者问题。 这种问题也是一种临界资源的问题&#xff0c;但与互斥量一文中 "写文件" 这种资源不同。文件是一直存在的临界资源&#xff0c;而生产者的资源不是一直存在…...

通信工程学习:什么是IP网际协议

IP&#xff1a;网际协议 IP网际协议&#xff08;Internet Protocol&#xff0c;简称IP&#xff09;是整个TCP/IP协议栈中的核心协议之一&#xff0c;它负责在网络中传送数据包&#xff0c;并提供寻址和路由功能。以下是对IP网际协议的详细解释&#xff1a; 一、对IP网际协议的…...

github 国内文件加速下载

参看;https://www.cnblogs.com/ting1/p/18356265 在源网址前加上 https://hub.gitmirror.com/ 或https://mirror.ghproxy.com/&#xff0c;例如&#xff1a; https://hub.gitmirror.com/https://github.com/t1m0thyj/WinDynamicDesktop/releases/download/v5.4.1/WinDynamicD…...

算法6:模拟运算

文章目录 z字形变幻外观数列数青蛙 题目均来自于力扣 z字形变幻 class Solution { public:string convert(string s, int numRows) {int n s.size();if(n < numRows || numRows 1) return s;int d 2 * numRows - 2;string res;for(int j 0; j < n; j d){res s[j]; …...

【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…...

今日指数day8实战补充(上)

1.用户管理 1.多条件综合查询 1.1 多条件综合查询接口说明 1&#xff09;原型效果 2&#xff09;接口说明 功能描述&#xff1a;多条件综合查询用户分页信息&#xff0c;条件包含&#xff1a;分页信息 用户创建日期范围 服务路径&#xff1a;/api/users 服务方法&#xff1…...

Python 之进阶语法:with...as...

1. Python with…as…是什么 Python 的 with…as… 语句&#xff0c;就像一个贴心的管家&#xff0c;负责照顾你的资源&#xff0c;让你不再担心忘记关闭文件、网络连接或数据库事务等。这个管家在你进入“房间”时自动打开门&#xff0c;离开时帮你把门关上&#xff0c;真的是…...

嵌入式硬件设计知识详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

计算机网络:物理层 —— 信道及其极限容量

文章目录 信道信道的极限容量信号失真失真类型产生信号失真的主要因素 奈式准则码元传输速率香农公式 信道 信道是指信息传输的通道或介质。在通信中&#xff0c;信道扮演着传输信息的媒介的角色&#xff0c;将发送方发送的信号传递给接收方。 信道可以是无线信道&#xff0c…...

面向对象特性中 继承详解

目录 概念&#xff1a; 定义&#xff1a; 定义格式 继承关系和访问限定符 基类和派生类对象赋值转换&#xff1a; 继承中的作用域&#xff1a; 派生类的默认成员函数 继承与友元&#xff1a; 继承与静态成员&#xff1a; 复杂的菱形继承及菱形虚拟继承&#xff1a; 虚…...

C++ | Leetcode C++题解之第455题分发饼干

题目&#xff1a; 题解&#xff1a; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int m g.size(), n s.size();int count 0;for (int i 0, j 0; i < …...

java版基于Spring Boot + Mybatis在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招投标采购系统源码

一、项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;…...

Anaconda的安装与环境设置

文章目录 一、Anaconda介绍二、Anaconda环境搭建1. 下载Anaconda(1)官网下载(2)清华大学镜像 2. 安装Anaconda3.配置环境变量4.检验conda是否安装成功5.更改镜像源6.若菜单栏没有conda prompt 三、虚拟环境1.创建、查看、删除虚拟环境2.激活、退出虚拟环境 四、CUDA、Pytorch、…...

使用FastAPI做人工智能后端服务器时,接口内的操作不是异步操作的解决方案

在做AI模型推理的接口时&#xff0c;这时候接口是非异步的&#xff0c;但是uvicorn运行FastAPI时就会出现阻塞所有请求。 这时候需要解决这个问题&#xff1a; api.py&#xff1a; import asyncio from fastapi import FastAPI from fastapi.responses import StreamingResp…...

Leetcode 3312. Sorted GCD Pair Queries

Leetcode 3312. Sorted GCD Pair Queries 1. 解题思路2. 代码实现 题目链接&#xff1a;3312. Sorted GCD Pair Queries 1. 解题思路 这一题的话坦率来说没有搞定&#xff0c;后来是找的大佬的代码抄了一下…… 整体来说这道题思路上还是比较暴力的&#xff0c;还是一个二重…...

用 Delphi 做了一个简单的 CMS

Delphi 代码上面花的时间最少。 前提是你要熟悉 Delphi 的 WebBroker 框架。不熟悉也没关系&#xff0c;5分钟就可以入门&#xff0c;10分钟就熟悉了。 CMS 就是个基于 WEB 的内容管理嘛。相当于一个简单的没有跟贴功能的 BBS。这样的东西&#xff0c;后边是数据库&#xff0…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...