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文档中的元素,并为它们应用样式规则的工具。CSS选择器有很多种,可以根据元素的类名、ID、属性、伪类、伪元素、标签等来选择元素。以下是一些常见的CSS选择器及其用法: 1. ID选择器: 根据…...
JavaScript中的数组不改变原数组的方法
数组 var a [1, 2, 3, 5, 8, 13, 21] 不改变原数组的方法 length 数组元素的长度 继承自原型 concat(arrayX,arrayY) 合并两个或多个数组,返回新数组 合并,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语言实现长连接并发框架 - 路由分组
文章目录 前言接口结构体接口实现项目地址最后 前言 你好,我是醉墨居士,我们上篇博客实现了任务执行流的路由模块,接下来我们实现一下对任务执行流进行任务 接口 trait/router_group.go type RouterGroup interface {RouterGroup(flow ..…...
跨 VLAN 通信
跨 VLAN 通信指的是不同 VLAN 之间的网络设备进行数据交换的能力。由于 VLAN 将网络分割成多个逻辑隔离的广播域,默认情况下,不同 VLAN 之间的设备无法直接通信。为了实现跨 VLAN 通信,需要借助一些网络设备和技术。以下详细讲解跨 VLAN 通信…...
11.4 Linux_线程_条件变量
概述 条件变量的作用: 条件变量和互斥量配合使用,主要应用于生产者和消费者问题。 这种问题也是一种临界资源的问题,但与互斥量一文中 "写文件" 这种资源不同。文件是一直存在的临界资源,而生产者的资源不是一直存在…...
通信工程学习:什么是IP网际协议
IP:网际协议 IP网际协议(Internet Protocol,简称IP)是整个TCP/IP协议栈中的核心协议之一,它负责在网络中传送数据包,并提供寻址和路由功能。以下是对IP网际协议的详细解释: 一、对IP网际协议的…...
github 国内文件加速下载
参看;https://www.cnblogs.com/ting1/p/18356265 在源网址前加上 https://hub.gitmirror.com/ 或https://mirror.ghproxy.com/,例如: 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协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)
本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…...
今日指数day8实战补充(上)
1.用户管理 1.多条件综合查询 1.1 多条件综合查询接口说明 1)原型效果 2)接口说明 功能描述:多条件综合查询用户分页信息,条件包含:分页信息 用户创建日期范围 服务路径:/api/users 服务方法࿱…...
Python 之进阶语法:with...as...
1. Python with…as…是什么 Python 的 with…as… 语句,就像一个贴心的管家,负责照顾你的资源,让你不再担心忘记关闭文件、网络连接或数据库事务等。这个管家在你进入“房间”时自动打开门,离开时帮你把门关上,真的是…...
嵌入式硬件设计知识详解
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
计算机网络:物理层 —— 信道及其极限容量
文章目录 信道信道的极限容量信号失真失真类型产生信号失真的主要因素 奈式准则码元传输速率香农公式 信道 信道是指信息传输的通道或介质。在通信中,信道扮演着传输信息的媒介的角色,将发送方发送的信号传递给接收方。 信道可以是无线信道,…...
面向对象特性中 继承详解
目录 概念: 定义: 定义格式 继承关系和访问限定符 基类和派生类对象赋值转换: 继承中的作用域: 派生类的默认成员函数 继承与友元: 继承与静态成员: 复杂的菱形继承及菱形虚拟继承: 虚…...
C++ | Leetcode C++题解之第455题分发饼干
题目: 题解: 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在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招投标采购系统源码
一、项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,…...
Anaconda的安装与环境设置
文章目录 一、Anaconda介绍二、Anaconda环境搭建1. 下载Anaconda(1)官网下载(2)清华大学镜像 2. 安装Anaconda3.配置环境变量4.检验conda是否安装成功5.更改镜像源6.若菜单栏没有conda prompt 三、虚拟环境1.创建、查看、删除虚拟环境2.激活、退出虚拟环境 四、CUDA、Pytorch、…...
使用FastAPI做人工智能后端服务器时,接口内的操作不是异步操作的解决方案
在做AI模型推理的接口时,这时候接口是非异步的,但是uvicorn运行FastAPI时就会出现阻塞所有请求。 这时候需要解决这个问题: api.py: 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. 代码实现 题目链接:3312. Sorted GCD Pair Queries 1. 解题思路 这一题的话坦率来说没有搞定,后来是找的大佬的代码抄了一下…… 整体来说这道题思路上还是比较暴力的,还是一个二重…...
用 Delphi 做了一个简单的 CMS
Delphi 代码上面花的时间最少。 前提是你要熟悉 Delphi 的 WebBroker 框架。不熟悉也没关系,5分钟就可以入门,10分钟就熟悉了。 CMS 就是个基于 WEB 的内容管理嘛。相当于一个简单的没有跟贴功能的 BBS。这样的东西,后边是数据库࿰…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
