CSS回顾-CSS选择器详解
一、引言
我来填坑啦!之前在CSS基础知识详解中介绍过,CSS 是一门基于规则的语言。是由选择器
与样式信息
组成:选择器 {样式信息}
。CSS 选择器是 CSS 规则的关键,能精准定位 HTML 元素,CSS3 新增选择器更是增强了设计能力。本篇文章就是用来总结CSS的多种选择器类型。
二、基本选择器
为了简化文章,下面所用到样式示例的页面结构以下面为主:
<h1 id="h1Title">基本选择器详解</h1>
<div class="boxClass"><span>span标签1</span><span>sapn标签2</span>
</div>
2.1 元素选择器(标签选择器)
这是最基本的选择器类型。它直接根据 HTML 标签名来选择元素。例如,span
选择器会选择所有的<span>
元素,为这些span元素设置样式属性。
span {color: red;font-size: 16px;
}
这种选择器的优点是简单直接,缺点是不够精确,会选中页面中所有该类型的标签。
2.2 类选择器
类选择器以.
开头,后面跟着自定义的类名。在 HTML 中,通过class
属性来应用类选择器。例如:
.boxClass {background-color: yellow;
}
类选择器的优点是可以复用,多个不同的元素可以应用同一个类名来共享样式。
2.3 ID 选择器
ID 选择器以#
开头,后面跟着唯一的 ID 名称。在 HTML 中,通过id
属性来应用 ID 选择器。需要注意的是,ID 在一个页面中应该是唯一的。例如:
#h1Title {border: 1px solid blue;
}
ID 选择器的优先级比类选择器高,但由于其唯一性,使用场景相对有限。
2.4 通配符选择器
通配符选择器用*
表示,它会选择页面中的所有元素。例如:
* {margin: 0;padding: 0;
}
这种选择器在重置页面默认样式时比较常用,但由于选择范围太广,可能会影响性能,需要谨慎使用。
三、组合选择器
组合选择器基础页面结构示例:
<body><!-- 外层父元素 --><div class="parent"><div class="box1">box1标签</div><div class="box2">box2标签<span>你一点也不普通</span></div><div class="box3">box3标签</div><p>段落标签</p><div class="box4">box4标签</div></div>
</body>
3.1 后代选择器
后代选择器用于选择某个元素的后代元素。用空格隔开两个选择器,例如body div
表示选择所有在<body>
元素内部的<div>
元素。
/* 后代选择器通过空格可以设置元素下所有特定元素后代 */
body div {/* body标签下所有div文字颜色设置为红色 */color: red;
}
.parent span {/* class选择器.parent元素下span标签文字颜色设置为粉色 */color: pink;
}
3.2 子元素选择器
子元素选择器用于选择某个元素的直接子元素。用>
符号隔开两个选择器,如:
/* 子元素选择器通过>可以设置直接子元素的样式 */
body > div {/* 将body下第一层div背景颜色设置为蓝色(并不会更改.parent下的div元素背景) */background-color: blue;
}
3.3 相邻兄弟选择器
相邻兄弟选择器用于选择紧接在某个元素之后的兄弟元素。使用+
符号,如:
/* 相邻兄弟选择器设置紧挨着当前元素的下一个元素样式 */
div + div {/* box2与box3背景色将变成黄色,因为他们是div元素同时上一个元素也是divbox1没有上一个元素,box4上一个是p标签所以不会改变背景颜色*/background-color: yellow;
}
3.4 通用兄弟选择器
通用兄弟选择器用于选择某个元素后面的所有兄弟元素。使用~
符号,例如:
/* 通用兄弟选择器设置当前元素同级下其他特定元素样式 */
div ~ div {/* box2、box3、box4背景色变成了橙色,他们都在div.box1同级下box1之前并没有div标签所以无法选中*/background-color: orange;
}
四、属性选择器
属性选择器基础页面结构示例:
<body><!-- 外层父元素 --><div class="parent"><input type="text" class="input"><input type="password" class="password"><button class="btn save">保存</button><button class="btn reset">重置</button></div>
</body>
4.1 简单属性选择器
根据元素是否具有某个属性来选择元素。例如:
/* 简单属性选择器[属性名] */
[class] {/* 将含有class属性的元素更改背景色 */background-color: aqua;
}
4.2 属性值完全匹配选择器
要求属性值完全匹配指定的值。例如:
/* 属性值完全匹配选择器,完全匹配属性名与属性值 */
[class="input"] {background-color: bisque;
}
[type="password"] {background-color: green;
}
4.3 部分属性值匹配选择器
- 包含匹配:使用
*
符号,如[class*="btn"]
会选择class
属性值中包含btn
的元素。 - 开头匹配:使用
^
符号,如[href^="https://"]
会选择href
属性值以https://
开头的元素。 - 结尾匹配:使用
$
符号,如[src$=".jpg"]
会选择src
属性值以.jpg
结尾的元素。
/* 部分属性值匹配选择器,根据匹配规则选择特定元素 */
/* 1.包含匹配*:包含特定属性值将会被选中 */
[class*="s"] {/* 两个button按钮将会更改背景颜色,他们class属性中都包含s */background-color: red;
}
/* 2.开头匹配^:包含特定属性值开头将会被选中 */
[class^="p"] {/* 父元素parent和input的password会被设置背景色 */background-color: pink;
}
input[class^="p"] {/* 只有input的password会更改背景色 */background-color: skyblue;
}
/* 3.结尾匹配$:包含特定属性值结尾将会被选中 */
div [class$="t"] {/* div的后代中input和重置按钮会被设置背景色 */background-color: pink;
}
div input[class$="t"] {/* div的后代中只有input会更改背景色 */background-color: skyblue;
}
4.4 多个属性选择器
可以同时根据多个属性来选择元素。例如:
/* 4.多个属性嵌套:可以同时写多个属性匹配值 */
[class*="b"][class$="e"] {/* 满足class属性值由b开头e结尾只有保存按钮 */background-color: gray;
}
五、伪类选择器
5.1 链接伪类
- :link:用于选择未被访问的链接。
- :visited:用于选择已被访问的链接。
a:link {color: blue;
}
a:visited {color: purple;
}
5.2 用户操作伪类
- :hover:当鼠标悬停在元素上时应用样式。
- :active:当元素被激活(如点击鼠标左键按下未松开时)时应用样式。
button:hover {background-color: lightgray;
}
button:active {background-color: gray;
}
5.3 目标伪类(:target)
用于选择当前活动的锚点元素,即 URL 中带有#
片段标识符所指向的元素。例如,当点击一个指向#section1
的链接时,#section1
元素可以通过:target
伪类来添加样式。
#section1:target {background-color: yellow;
}
5.4 语言伪类(:lang())
根据元素的语言属性来选择元素。例如,:lang(en)
会选择lang
属性值为en
的元素。
:lang(en) {quotes: '"' '"';
}
5.5 CSS3 新增伪类选择器
5.5.1 结构伪类
页面结构示例:
<div id="flat"><h3>结构类型<i>伪类</i></h3><div>这是第1个盒子</div><div>这是第2个盒子</div><p>这是第3个盒子</p><div>这是第4个盒子</div><p>这是第5个盒子</p><div>这是第6个盒子</div></div>
- :first-child:选择某个元素的第一个子元素。例如,
p:first-child
会选择作为父元素第一个子元素的<p>
元素。 - :last-child:选择某个元素的最后一个子元素。
- :nth-child(n):选择某个元素的第
n
个子元素,可以是具体数字、公式(如2n
表示偶数位置的子元素,2n + 1
表示奇数位置的子元素)。 - :nth-of-type(n):与
:nth-child(n)
类似,但从最后一个子元素开始计数。 - :nth-child(n):选择同类型的第
n
个子元素。例如,p:nth - of - type(2)
选择父元素下第二个<p>
类型的子元素。 - :nth-last-of-type(n):从最后一个同类型子元素开始计数选择第
n
个。 - :only-child:选择父元素中唯一的子元素。
/* :first-child 选择flat下第一个div元素*/
#flat div:first-child {/* 不生效,因为flat下第一个元素不是div */background-color: red;
}
/* :last-child 选择flat下最后一个div元素*/
#flat div:last-child {background-color: red;
}
/* :nth-child(2n) 从前往后选择flat下偶数元素设置样式 */
#flat div:nth-child(2n) {/* 注意:会在同一级下找偶数元素如果不是div标签则不会更改 *//* 所以只有盒子1变色 */background-color: pink;
}
/* :nth-last-child(2n) 从后往前选择flat下偶数元素设置样式 */
#flat div:nth-last-child(2n) {/* 注意:会在同一级下找偶数元素如果不是div标签则不会更改 *//* 所以只有盒子1变色 */background-color: skyblue;
}
/* :nth-of-type(2n) 从前往后选择flat下所有div元素偶数元素设置样式 */
#flat div:nth-of-type(2n) {/* 注意:会把同一级div进行筛选,不会受其他元素印象 *//* 所以2、6会更改背景颜色 */background-color: pink;
}
/* :nth-last-of-type(2n) 从后往前选择flat下所有div元素偶数元素设置样式 */
#flat div:nth-last-of-type(2n) {/* 注意:会把同一级div进行筛选,不会受其他元素印象 *//* 所以4、1会更改背景颜色 */background-color: skyblue;
}
/* :only-child选择父元素中唯一的子元素 */
#flat h3:only-child {/* 不生效h3同级下有其他标签,不满足条件 */color: red;
}
#flat h3>i:only-child {/* 生效h3下只有i标签 */color: red;
}
5.5.2 否定伪类(:not())
用于排除某些元素。例如,:not(p)
会选择除了<p>
元素之外的所有元素。
div:not(.special) {color: red;
}
5.5.3 表单相关伪类
- :enabled:选择所有可用的表单元素。
- :disabled:选择所有禁用的表单元素。
- :checked:选择所有被选中的单选框或复选框。
- :indeterminate:选择状态不确定的表单元素(如部分浏览器中未完全选中的复选框组)。
input:enabled {background-color: white;
}
input:disabled {background-color: red;
}
六、伪元素选择器
6.1 ::before 和 ::after
这两个伪元素用于在元素内容之前或之后插入生成内容。例如,可以用来添加装饰性的图标或文本。
p::before {content: "前缀 ";color: green;
}
p::after {content: " 后缀";color: green;
}
6.2 ::first-letter 和 ::first-line
- ::first-letter:用于选择元素内容的第一个字母,可以对其设置独特的样式,常用于首字下沉效果。
- ::first-line:用于选择元素内容的第一行,可对其进行单独的样式设置。
p::first-letter {font-size: 200%;color: red;
}
p::first-line {font-style: italic;
}
6.3 CSS3 新增伪元素选择器
6.3.1 ::selection
用于选择用户在网页上选中的文本内容,可以为其设置样式,如改变背景色和文本颜色。
::selection {background-color: lightblue;color: white;
}
七、总结
CSS 选择器为我们提供了丰富多样的方式来选择和操作 HTML 元素,从基本的标签、类、ID 选择器,到复杂的组合选择器、属性选择器、伪类和伪元素选择器。特别是 CSS3 新增的选择器进一步增强了我们对网页元素的选择和样式控制能力,能够创建出更加丰富和细腻的网页视觉效果。在实际开发中,根据不同的需求灵活运用这些选择器,可以提高代码的效率和可维护性。同时,需要注意选择器的性能问题,尽量避免使用过于复杂或性能消耗大的选择器,以确保网页的加载速度和用户体验。
相关文章:
CSS回顾-CSS选择器详解
一、引言 我来填坑啦!之前在CSS基础知识详解中介绍过,CSS 是一门基于规则的语言。是由选择器与样式信息组成:选择器 {样式信息}。CSS 选择器是 CSS 规则的关键,能精准定位 HTML 元素,CSS3 新增选择器更是增强了设计能…...
FFMPEG录像推流时遇到的问题
FFMPEG录像推流时遇到的问题,记录一下供大参考 1. ret avformat_write_header( ofmt_ctx, NULL ); 执行写入头后,所有的流的时间基都会被内部重新设置,所以并不你想象的把原来的时间直接入到avPACKET中就可以发送了。必须要把你每个流的P…...
【STM32+K210项目】基于K210智能人脸识别+车牌识别系统(完整工程资料源码)
运行效果: 基于K210的智能人脸与车牌识别系统工程 目录: 运行效果: 目录: 前言: 一、国内外研究现状与发展趋势 二、相关技术基础 2.1 人脸识别技术 2.2 车牌识别技术 三、智能小区门禁系统设计 3.1 系统设计方案 3.2 系统设计目标 3.3 智能小区门禁系统硬件设计 3.3.1 控…...
Unity脚本基础规则
Unity脚本基础规则 如何在Unity中创建一个脚本文件? 在Project窗口中的Assets目录下,选择合适的文件夹,右键,选择第一个Create,在新出现的一栏中选择C# Script,此时文件夹内会出现C#脚本图标,…...
基于AIRTEST和Jmeter、Postman的自动化测试框架
基于目前项目和团队技术升级,采用了UI自动化和接口自动化联动数据,进行相关测试活动,获得更好的测试质量和测试结果。...
使用 Azure OpenAI 服务对数据进行联合 SharePoint 搜索
作者:来自 Elastic Gustavo Llermaly 使用 Azure OpenAI 服务处理你的数据,并使用 Elastic 作为向量数据库。 在本文中,我们将探索 Azure OpenAI 服务 “On Your Data”,使用 Elasticsearch 作为数据源。我们将使用 Elastic Shar…...
JavaScript学习笔记 1】初识JS
目录 一、JS是什么? 二、JS的作用? 三、JS的组成 四、JS的书写位置 1. 内部JS 2. 外部JS(外部导入) 3. 内联JS 4. 练习 五、JS的注释与结束符 1. 注释 2. 结束符 3. JS该不该加分号? 六、JS的输入和输出语法 1. 输出语法 a. 输出在页面中 b. …...
Linux-Samba
文章目录 Samba配置服务配置 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2024年11月18日13点20分 Samba配置 Samba是一个能让 Linux 系统应用与 Microsoft 网络通讯协议的软件&#x…...
【Java Web】JSON 以及 JSON 转换
JSON(JavaScript Object Notation)一种灵活、高效、轻量级的数据交换格式,广泛应用于各种数据交换和存储场景。 基本特点 1、简单易用:JSON格式非常简单,易于理解和使用。 2、轻量级:相比XML等其他数据格…...
Qt 元对象系统
Qt 元对象系统 Qt 元对象系统1. 元对象的概念2. 元对象系统的核心组件2.1 QObject2.2 Q_OBJECT 宏2.3 Meta-Object Compiler (MOC) 3. 信号与槽3.1 基本概念信号与槽的本质信号和槽的关键特征 3.2 绑定信号与槽参数解析断开连接 3.3 标准信号与槽查找标准信号与槽使用示例规则与…...
鸿蒙实战:使用隐式Want启动Ability
文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙应用项目2.2 修改Index.ets代码2.3 创建LuzhouAbility2.4 创建Luzhou页面2.5 设置模块配置文件 3. 测试效果4. 实战总结 1. 实战概述 本次鸿蒙应用实战,先创建项目“ImplicitWantStartAbility”,接着修改In…...
go-zero(二) api语法和goctl应用
go-zero api语法和goctl应用 在实际开发中,我们更倾向于使用 goctl 来快速生成代码。 goctl 可以根据 api快速生成代码模板,包括模型、逻辑、处理器、路由等,大幅提高开发效率。 一、构建api demo 现在我们通过 goctl 创建一个最小化的 HT…...
java 操作Mongodb
CRUD基础操作 Springboot 操作 MongoDB 有两种方式。 第一种方式是采用 Springboot 官方推荐的 JPA 方式,这种操作方式,使用简单但是灵活性比较差。第二种方式是采用 Spring Data MongoDB 封装的 MongoDB 官方 Java 驱动 MongoTemplate 对 MongoDB 进行…...
以Java为例,实现一个简单的命令行图书管理系统,包括添加图书、删除图书、查找图书等功能。
江河湖海中的代码之旅:打造你的命令行图书管理系统 一、系统简介 1. Java简介 Java,这个编程语言界的“瑞士军刀”,自1995年诞生以来就以其跨平台的特性和强大的生态系统征服了无数开发者的心。想象一下,Java就像是一条蜿蜒曲折…...
[JavaWeb]微头条项目
完整笔记和项目代码: https://pan.baidu.com/s/1PZBO0mfpwDPic4Ezsk8orA?pwdwwp5 提取码: wwp5 JavaWeb-微头条项目开发 1 项目简介 1.1 业务介绍 微头条新闻发布和浏览平台,主要包含业务如下 用户功能 注册功能登录功能 头条新闻 新闻的分页浏览通过标题关键字搜…...
Linux(CentOS)安装达梦数据库 dm8
CentOS版本:CentOS 7,查看操作系统版本信息,请查阅 查看Linux内核版本信息 达梦数据库版本:dm8 一、获取 dm8 安装文件 1、下载安装文件 打开达梦官网:https://www.dameng.com/ 下载的文件 解压后的文件 2、上传安…...
【专题】中国企业出海洞察报告暨解码全球制胜之道报告汇总PDF洞察(附原数据表)
原文链接:https://tecdat.cn/?p38314 在当今全球化的浪潮中,中国企业的出海行动正以前所未有的规模和速度展开,成为全球经济舞台上的重要力量。本报告旨在对 2024 年中国企业出海情况进行深度洞察,涵盖多个领域和视角。 从对外投…...
[ 跨域问题 ] 前后端以及服务端 解决跨域的各种方法
这篇文章主要介绍了跨域问题,包括其定义、产生原因及各种解决方法。原因是浏览器安全策略限制,方法有 JSONP、CORS、Domain、 postMessage、Nginx配置、.NetCore配置。 前言 什么是跨域问题? 在Web应用中,当一个网页的脚本试图去请求另一个域…...
网络安全之信息收集-实战-2
请注意,本文仅供合法和授权的渗透测试使用,任何未经授权的活动都是违法的。 目录 7、网络空间引擎搜索 8、github源码泄露 9、端口信息 10、框架指纹识别 11、WAF识别 12、后台查找 7、网络空间引擎搜索 FOFA:https://fofa.info/ 360 …...
利用飞书多维表格自动发布版本
文章目录 背景尝试1,轮询尝试2,长连接 背景 博主所在的部门比较奇特,每个车型每周都需要发版,所以实际上一周会发布好几个版本。经过之前使用流水线自动发版改造之后,发版的成本已经大大降低了,具体参考&a…...
深入内核讲明白Android Binder【一】
深入内核讲明白Android Binder【一】 前言一、Android Binder应用编写概述二、基于C语言编写Android Binder跨进程通信Demo0. Demo简介1. 服务的管理者server_manager.c2. Binder服务端代码实现 test_service.c2.1 实现思路2.2 完整实现代码 3. Binder客户端代码实现 test_clie…...
Photoshop(PS)——人像磨皮
1.新建一个文件,背景为白色,将图片素材放入文件中 2.利用CtrlJ 复制两个图层出来,选择第一个拷贝图层,选择滤镜---杂色---蒙尘与划痕 3.调整一下数值,大概能够模糊痘印痘坑,点击确定。 4.然后选择拷贝2图层…...
如何用Excel批量提取文件夹内所有文件名?两种简单方法推荐
在日常办公中,我们有时需要将文件夹中的所有文件名整理在Excel表格中,方便管理和查阅。手动复制文件名既费时又易出错,因此本文将介绍两种利用Excel自动提取文件夹中所有文件名的方法,帮助你快速整理文件信息。 方法一࿱…...
YOLOv8改进,YOLOv8通过RFAConv卷积创新空间注意力和标准卷积,包括RFCAConv, RFCBAMConv,二次创新C2f结构,助力涨点
摘要 空间注意力已广泛应用于提升卷积神经网络(CNN)的性能,但它存在一定的局限性。作者提出了一个新的视角,认为空间注意力机制本质上解决了卷积核参数共享的问题。然而,空间注意力生成的注意力图信息对于大尺寸卷积核来说是不足够的。因此,提出了一种新型的注意力机制—…...
【实验11】卷积神经网络(2)-基于LeNet实现手写体数字识别
👉🏼目录👈🏼 🍒1. 数据 1.1 准备数据 1.2 数据预处理 🍒2. 模型构建 2.1 模型测试 2.2 测试网络运算速度 2.3 输出模型参数量 2.4 输出模型计算量 🍒3. 模型训练 🍒4.模…...
chatgpt训练需要什么样的gpu硬件
训练像ChatGPT这样的大型语言模型对GPU硬件提出了极高的要求,因为这类模型的训练过程涉及大量的计算和数据处理。以下是训练ChatGPT所需的GPU硬件的关键要素: ### 1. **高性能计算能力** - **Tensor Cores**: 现代深度学习训练依赖于Tensor Cores&#…...
Kubernetes常用命令
Kubernetes常用命令 一、集群管理 kubectl cluster-info:显示集群信息,包括控制平面地址和服务的 URL。 kubectl get nodes:查看集群中的节点列表,包括节点状态、IP 地址等信息。 kubectl describe node <node-name>&…...
Flutter:key的作用原理(LocalKey ,GlobalKey)
第一段代码实现的内容:创建了3个块,随机3个颜色,每次点击按钮时,把第一个块删除 import dart:math; import package:flutter/material.dart; import package:flutter_one/demo.dart;void main() {runApp(const App()); }class App…...
R语言基础入门详解
文章目录 R语言基础入门详解一、引言二、R语言环境搭建1、安装R和RStudio1.1、步骤1.2、获取工作目录 三、R语言基础2、语法基础2.1、赋值操作2.2、注释 3、数据类型与结构3.1、向量3.2、矩阵 4、基本操作4.1、数据读取4.2、数据可视化 四、R语言使用示例4.1、统计分析示例4.2、…...
django启动项目报错解决办法
在启动此项目报错: 类似于: django.core.exceptions.ImproperlyConfigured: Requested setting EMOJI_IMG_TAG, but settings are not c启动方式选择django方式启动,以普通python方式启动会报错 2. 这句话提供了对遇到的错误的一个重要线索…...
武汉网站服务/上海网络推广招聘
1、下载MongoDb https://www.mongodb.com/try/download/community 安装很简单、基本都是下一步。安装好需要进行环境变量的配置、在path里面吧对应的bin路径加入到里面D:\mongodb-win32-x86_64-2012plus-4.2.23\bin 2、集成 配置YML spring:data:mongodb:host: localhostport:…...
网站策划用培训吗/深圳网络推广引流
引言 50 多年前激光技术的发展催生了光探测和测距 (LIDAR) 系统,该系统在距离计算方式上取得了突破。LIDAR 的原理与雷达使用的原理非常相似。主要区别在于雷达系统检测物体反射的无线电波,而激光雷达使用激光信号。这两种技术通常采用相同类型的飞行时间…...
国外设计师灵感网站/以图搜图百度识图
目录1. 两者区别的现象2. 部分代码解释2.1 open显示对话框2.1.1 对象方式创建2.1.2 指针方式创建2.2 exec显示对话框3. exec与open的区别4. 全部代码示例4.1 MainWindow.h4.2 MainWindow.cpp1. 两者区别的现象 注意:需要看下方的打印信息 2. 部分代码解释 2.1 open…...
网站建设相关语言/网络客服
WINE Error: Wine is a 64-bi installation, it can not be used with a 32-bit wineserver Solution:Delete and recreate the ~/.wine directory in your home directory. rm -r ~/.wine winecfg 转载于:https://my.oschina.net/vihcle/blog/300891...
网站建设培训四川/外贸网站有哪些平台
2017三月 UFED Series Releases 系列 6.1更新发布 转载于:https://www.cnblogs.com/doctorwonder/p/7543766.html...
学生个人网站作品/seo外包服务项目
习题集一 习题1:判断是否匹配成功,并输出对应匹配信息 import re source "1huhongqiang" if re.match("hu",source):#if re.match is not None print("可以匹配到") else: print ("没有匹配到") if re.search(…...