16-CSS3新增选择器
知识目标
- 掌握属性选择器的使用
- 掌握关系选择器的使用
- 掌握结构化伪类选择器的使用
- 掌握伪元素选择器的使用
如何减少文档内class属性和id属性的定义,使文档变得更加简洁?
可以通过属性选择器、关系选择器、结构化伪类选择器、伪元素选择器。
1. 属性选择器
1.1 E[attribute]选择器
E[attribute]选择器用于选取标签名称为E(代指标签名称),并且定义了attribute(代指属性名称)属性的标签。其中,E可以省略,如果省略则表示可以匹配满足条件的任意标签。
例1:选取包含id属性的<div>标签:div[id]
例2:选取包含align属性,属性值为center的全部标签:[align=center]
1.2 E[attribute~=value]选择器
E[attribute~=value]选择器用于选取标签名称为E(代指标签名称),并且定义了attribute(代指属性名称)属性,包含某个value(代指属性值字符)属性值的标签。
E[attribute]选择器和E[attribute~=value]选择器区别在于前者需要属性和属性值完全一致,后者只要标签包含属性值即可被选中。
1.3 E[attribute|=value]
E[attribute|=value]选择器能够选取带有value属性值或以value-开头的属性值的标签,不包括两个属性的标签。
例1: [class|=a] { } 选取属性值为a或属性值以a-开头的标签。一般用于匹配en-US、zh-CN 等。
1.4 E[attribute^=value]
E[attribute^=value]选择器能够选取以value开头的属性值的标签。
例1:选取属性值以one开头的标签 [class ^=one] {}
1.5 E[attribute$=value]
E[attribute$=value]选择器用于选择属性值后缀为value(代指属性值字符)字符的标签。
例1: div[id$=section] 选取包含id属性,且id属性值以section字符串结尾的div标签。
1.6 E[attribute*=value]
E[attribute*=value]选择器用于选择属性值包含value(代指属性值字符)字符的标签。
例1:div[i*=section] 选取包含id属性,且id属性值包含“section”字符的<div>标签
1.7 总结
选择器和作用列表如下:

2. 关系选择器
2.1 子元素选择器
子元素选择器主要用来选择父级标签的子标签,由符号“>”连接标签名称。
例如:h1>strong选取<h1>标签中的子标签<strong>标签
2.2 兄弟选择器
兄弟选择器可以选择位于同一个父标签中,指定标签后面,具有并列关系的子标签。在CSS3中,兄弟选择器分为邻近兄弟选择器和普通兄弟选择器两种。
2.2.1 邻近兄弟选择器
使用加号**“+”连接前后两个选择器。选择器中的两个子标签从属同一个父标签,而且被选取子标签必须紧跟指定的标签。强调“紧接”,如A+B,选择的B必须是A之后的第一个兄弟元素**。
2.2.2 普通兄弟选择器
使用**“~”**来连接前后两个选择器。选择器中的两个子标签从属同一个父标签,而且被选取子标签需要位于指定的标签后面。如A~B只要B是A后面出现的兄弟都能被选择。
3. 结构化伪类选择器
3.1 :root
:root选择器用于匹配文档根标签,在HTML中,根标签指的<html>标签。因此使用:root选择器定义的样式,对所有页面标签都生效。
3.2 :not
:not选择器可以排除设置的标签或属性。例如,h3:not(.one)会选取没有类名.one的<h3>标签。
3.3 :only-child
:only-child选择器用于选取父标签中的唯一子标签,也就是说,如果某个父标签仅有一个子标签,使用:only-child选择器可以选择这个子标签。例p:only-child能选中我是独生子,而不满足类型的div和多个孩子的标签不能被选中。
<body><div><p>我是独生子</p></div><div><div>我是独生子,是div</div></div><div><p>我是第1个段落</p><p>我是第2个段落</p></div>
</body>
3.4 :first-child
:first-child选择器用于选择父标签中的第一个子标签。
3.5 :last-child
:last-child选择器用于选取父标签中的最后一个子标签。
3.6 :nth-child(n)和nth-last-child(n)
:nth-child(n)选择器用于选择父标签中的第n个子标签。例如:选取父标签中的第2个子标签::nth-child(2)。
:nth-last-child(n)用于选取父标签中的倒数第n个子标签。
此时还可以使用关键字、公式等进行选择;
比如:nth-child(even), 选择的是偶数孩子。
比如:nth-child(3n), 选择的是3倍数的孩子。
3.7 :first-of-type和:last-of-type
:first-of-type选择器用于匹配父标签中第1个特定类型的子标签。例如p:first-of-type,选择父标签中的第1个p类型的子标签。
:last-of-type选择器用于匹配父标签中最后1个特定类型的子标签。
nth-of-type(n)和nth-child(n)区别:前面的会把指定元素的例子排序序号再选,后面的会先排序,然后看当前的序号孩子是否满足是指定元素。

4. 伪元素选择器
4.1 :empty
:empty选择器用来选择没有子标签或内容为空的所有标签。
4.2 :target
:target选择器用于突出显示当前活动的目标元素。只有用户单击页面中的超链接,并且跳转到:target选择器控制的元素后,:target选择器所设置的样式才会起作用。
4.3 :before :after
:before选择器 / :after选择器用于在被选取标签的前面/后面插入内容(属于行内元素,在文档中找不到的,称为伪元素)。在使用:before选择器/ :after选择器时必须配合content属性来指定要插入的具体内容。
常用场景:1. 鼠标放上去出现的遮罩、图层 2.

5. 实践
我会提供代码但会将样式删除,接下来的案例题麻烦大家使用以上述学的知识来补充选择器及样式!!!可以在评论区上传自己的代码和样例截图哦!!!
提供的样例代码:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS3 Selectors Example</title><!-- 整体页面样式需求:1. 字体使用 Arial 或无衬线字体 2. 行高为 1.6 3. 页面边距为 20px-->
</head><body><!-- h1 样式需求:1. 颜色为 #333 2. 字体大小为 2em 3. 文本居中对齐 4. 文本阴影为 2px 2px 4px rgba(0, 0, 0, 0.1) --><h1>CSS3 Selectors Example</h1><!-- h2 样式需求:1. 颜色为 #5552. 字体大小为 1.6em3. 底部有 1px 实线的 #ccc 颜色边框4. 底部内边距为 5px --><h2>属性选择器示例</h2><!-- a标签样式需求,可采用E[att="value"]的方式进行选择:1. 颜色为橙色2. 去除下划线3. 字体加粗 --><p>访问 <a href="https://www.example.com" target="_blank">安全网站</a> 获取更多信息。</p><!-- img[src^="images/"] 样式需求:1. 边框为 2px 实线的 #ccc 颜色2. 边框圆角为 5px3. 阴影为 0 0 5px rgba(0, 0, 0, 0.3)--><p><img src="images/sample.jpg" alt="Sample Image"></p><!-- highlight样式需求 采用*= 的方式:1. 背景颜色为黄色2. 字体大小为 1.1em--><p class="highlight">这是一个高亮显示的段落。</p><!-- 样式需求: 采用$=的方式1. 颜色为蓝色2. 字体为斜体--><p>下载 <a href="document.docx">文档</a> 了解详情。</p><!-- important样式需求: 采用~=选择的方式1. 颜色为红色2. 字体加粗3. 有下划线--><p>这里有个 <span class="important">重要</span> 的信息。</p><!-- li[data-lang|="en"] 样式需求:1. 背景颜色为浅蓝色2. 字体大小为 0.9em--><!-- ul 样式需求:1. 列表样式类型为圆形2. 左内边距为 20px--><ul><li data-lang="en-US">英文列表项1</li><li data-lang="fr-FR">法文列表项2</li><li data-lang="en-GB">英文列表项3</li></ul><!-- h3 样式需求:1. 颜色为 #7772. 字体大小为 1.3em--><h3>兄弟选择器示例</h3><!-- h3 + p 样式需求:1. 字体为斜体2. 颜色为 #7773. 字体大小为 0.95em--><p>这是紧跟在h3后面的段落,使用邻兄弟选择器设置样式。</p><!-- h3 ~ ol 样式需求:1. 背景颜色为 #f9f9f92. 边框为 1px 实线的 #ddd 颜色3. 内边距为 10px--><!-- ul li:first-child 样式需求:1. 字体加粗2. 字体大小为 1.1em3. 颜色为 #333--><!-- ul li:last-child 样式需求:1. 有下划线2. 字体为斜体--><!-- ul li:nth-child(3n) 样式需求:背景颜色为 #eee--><!-- ol li:nth-child(even) 样式需求:1. 颜色为紫色2. 字体大小为 1.05em--><!-- ol li:nth-child(odd) 样式需求:颜色为 #555--><!-- ol 样式需求:列表样式类型为大写罗马数字左内边距为 25px--><!-- p 样式需求:颜色为 #666--><ol><li>有序列表项1</li><li>有序列表项2</li><li>有序列表项3</li><li>有序列表项4</li><li>有序列表项5</li></ol><!-- h2 样式需求:同上面的 h2 样式需求--><h2>表格示例</h2><!-- table 样式需求:1. 边框合并,无边框间距2. 宽度为 100%--><!-- th 样式需求:1. 背景颜色为 #f0f0f02. 字体加粗3. 文本居中对齐4. 内边距为 8px--><!-- td 样式需求:1. 边框为 1px 实线的 #ccc 颜色2. 内边距为 8px--><!-- 奇数孩子样式需求:可使用:nth-child(even)的方式 使用背景颜色为 #f9f9f9--><table><thead><tr><th>姓名</th><th>年龄</th><th>职业</th></tr></thead><tbody><tr><td>张三</td><td>25</td><td>程序员</td></tr><tr><td>李四</td><td>30</td><td>设计师</td></tr><tr><td>王五</td><td>22</td><td>学生</td></tr></tbody></table><!-- a.info-link 样式需求:1. 颜色为 green2. 文本有下划线--><p>更多信息请访问 <a href="#" class="info-link">这里</a>。</p><!-- span.secondary 样式需求:1. 颜色为 #9992. 字体大小为 0.9em--><p><span class="secondary">这是一段次要信息</span>,需要特殊样式。</p>
</body></html>
需实现的样式如图所示:

相关文章:
16-CSS3新增选择器
知识目标 掌握属性选择器的使用掌握关系选择器的使用掌握结构化伪类选择器的使用掌握伪元素选择器的使用 如何减少文档内class属性和id属性的定义,使文档变得更加简洁? 可以通过属性选择器、关系选择器、结构化伪类选择器、伪元素选择器。 1. 属性选择…...
C语言pthread库的线程休眠和唤醒的案例
一、代码如下 #include<stdio.h> #include<pthread.h> // 定义独占锁 pthread_mutex_t mutex; // 定义条件信号对象 pthread_cond_t condition; // 初始化函数 void init(){ int code pthread_mutex_init(&mutex, NULL); printf("共享锁初…...
Spring Boot 2.x 到 3.x 迁移实战:Redis 配置篇
前言 随着 Spring Boot 3.x 的发布,其对 Java 17 的支持和 模块化架构 的深化,Redis 配置与集成方式发生了显著变化。今天简单讲下redis的变化 一、Redis 配置前缀的模块化演进:从 spring.redis 到 spring.data.redis 1.1 Spring Boot 2.x&…...
SQL Server:用户权限
目录 创建 & 删除1. 创建用户命令整理创建 admin2 用户创建 admin_super 用户 2. 删除用户命令删除 admin2 用户删除 admin_super 用户 3. 创建时权限的区别admin2 用户权限admin_super 用户权限 查看方法一:使用对象资源管理器(图形化界面ÿ…...
Windows .gitignore文件不生效的情况排查
概述 今天下班在家里捣腾自己的代码,在配置.gitignore文件忽略部分文件的时候,发现死活不生效 问题根源 经过一通分析和排查才发现,是.gitignore文件的编码错了,刚开始还没注意到,因为是在Windows下开发,…...
cJSON 处理 JSON(轻量级 C 语言库)(二)
第二部分:cJSON 处理 JSON(轻量级 C 语言库) 📢 快速掌握 cJSON!文章 + 视频双管齐下 🚀 如果你觉得阅读文章太慢,或者更喜欢 边看边学 的方式,不妨直接观看我录制的 cJSON 课程视频!🎬 视频里会用更直观的方式讲解 cJSON 的核心概念、实战技巧,并配有动手演示…...
服务器数据恢复—误格式化NTFS文件系统分区别慌,NTFS数据复活秘籍
NTFS文件系统下格式化在理论上不会对数据造成太大影响,但有可能造成部分文件目录结构丢失的情况。下面介绍一个人为误操作导致服务器磁盘阵列中的NTFS文件系统分区被格式化后的服务器数据恢复案例。 服务器数据恢复过程: 1、将故障服务器连接到一台备份…...
《Linux运维总结:基于银河麒麟V10+ARM64架构CPU源码编译部署单实例redis7.2.6》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、环境信息 环境信息如下: 主机IP 操作系统 Redis版本 CPU架构 192.168.1.111 K…...
华为云对象存储服务(OBS)
华为云对象存储服务(OBS) 前言 华为云为开发者提供了丰富的 Java SDK,借助这些 SDK 能够方便地与华为云的各类服务进行交互。下面以 华为云对象存储服务(OBS) 的 Java SDK 为例,介绍其使用步骤。 华为云…...
【3】数据结构的双向链表章
目录标题 双向链表的定义双向链表的初始化双向链表的创建插入操作删除操作 双向链表总代码与调试 双向链表的定义 结点结构组成:数据域(data)、指针域(pre)、指针域(next)。其中, da…...
分布式环境下的主从数据同步
目录 1. 数据同步的推/拉方式 1.1 主节点推送 1.2 从节点拉取 1.3 常见组件的推拉方式 2.复制方式 2.1 同步复制 2.2 异步复制 2.3 半同步复制 2.4 常见组件的同步方式 3.日志格式 3.1 基于语句复制 SBR 3.2 基于行复制 RBR 3.3 基于预写日志 WAL 3.4 基于触发器…...
蓝桥杯杯赛-日期模拟
知识点 处理日期 1. 按天枚举日期:逐天遍历起始日期到结束日期范围内的每个日期。 2. 处理闰年:正确判断闰年条件。闰年定义为:年份 满足以下任意一个条件:(闰年的2月只有29天) 满足下面一个条件就是闰年 1> 是 400 的倍数…...
【SQL】MySQL基础2:视图,存储过程,游标,约束,触发器
文章目录 1. 视图2. 存储过程2.1 创建存储过程2.2 执行存储过程 3. 游标4. 约束4.1 主键约束4.2 外键约束4.3 唯一约束4.4 检查约束 5. 触发器 1. 视图 视图是虚拟的表,它是动态检索的部分。使用视图的原因:避免重复的SQL语句;使用表的部分而…...
【TS学习】(15)分布式条件特性
在 TypeScript 中,分布式条件类型(Distributive Conditional Types) 是一种特殊的行为,发生在条件类型作用于裸类型参数(Naked Type Parameter) 时。这种特性使得条件类型可以“分布”到联合类型的每个成员…...
Android 小组件
小部件的布局文件支持如下布局: FrameLayout LinearLayout RelativeLayout GridLayout 以及如下控件 AnalogClock Button Chronometer ImageButton ImageView ProgressBar TextView ViewFlipper ListView GridView StackView AdapterViewFlipper 应该不止这些有空…...
搭建开源笔记平台:outline
折腾的意义 为什么要自己搭建一个笔记平台?没理由,就是突然想试试。有时候突然有个想法,搜了一下正好有合适的方案,就顺手试一下。 其实已经有很多成熟的笔记软件,例如Notion/OneNote,但谁不想要一个数据完…...
Unity编辑器功能及拓展(2) —Gizmos编辑器绘制功能
Unity中的Gizmos功能是用于在场景视图中绘制辅助图形或图标的工具,帮助开发者在编辑模式下直观调试和可视化游戏对象的位置、范围、方向等信息。 一.定义概述 Gizomsd 概述 Gizoms是Unity提供的一个API,或者叫做一个工具类,包含一系列静态…...
电脑屏幕亮度随心控,在Windows上自由调整屏幕亮度的方法
调整电脑屏幕的亮度对于保护视力和适应不同环境光线条件非常重要。无论是在白天强光下还是夜晚昏暗环境中,合适的屏幕亮度都能让您的眼睛更加舒适。本文中简鹿办公小编将向您介绍几种在 Windows 系统中调整屏幕亮度的方法。 方法一:使用快捷键 大多数笔…...
presto行转列
presto的行列转换和spark、hive一样也是通过外链语句实现的,只不过语法和关键子有点不同,如下 with tmp1 as (select 1,2,3 as a1,4,5,6 as a2 ) select * from tmp1 cross join unnest(split(tmp1.a1, ,),split(tmp1.a2, ,) ) as b(a1s,a2s) 结果如下...
MySQL 5.7 Online DDL 技术深度解析
14.13.1 在线DDL操作 索引操作主键操作列操作生成列操作外键操作表操作表空间操作分区操作 索引操作 下表概述了对索引操作的在线DDL支持情况。星号表示有附加信息、例外情况或依赖条件。有关详细信息,请参阅语法和使用说明。 操作原地执行重建表允许并发DML仅修…...
【汽车功能安全:软件与硬件缺一不可】
随着汽车变得越来越智能,功能安全就成为汽车电子系统不可回避的标准体系,日益复杂的功能导致了汽车中电子元件的数量和复杂性的指数级增长(Leen)。如今高级别汽车拥有多达90个电子控制单元(ECU),…...
docker打包使用有头模式playwright
1.打包镜像 创建Dockerfile文件如下 # playywright 官方镜像 FROM mcr.microsoft.com/playwright:v1.37.0-jammy# 设置非交互式环境变量和时区 ENV DEBIAN_FRONTENDnoninteractive ENV TZEtc/UTC# 安装 Python 3.9 和 pip(修复时区阻塞问题) RUN apt-g…...
TCP/IP协议的应用层与传输层
TCP/IP协议簇是互联网的核心通信框架,定义了数据如何在网络中封装、寻址、传输和路由(确定数据包从源主机到目标主机的传输路径的过程)。 应用层 直接面向用户和应用,负责实现网络服务的具体功能(如网页浏览、文件传输…...
51c自动驾驶~合集15
我自己的原文哦~ https://blog.51cto.com/whaosoft/11720657 #DRAMA 首个基于Mamba的端到端运动规划器(新加坡国立) 运动规划是一项具有挑战性的任务,在高度动态和复杂的环境中生成安全可行的轨迹,形成自动驾驶汽车的核心能…...
拼多多 anti-token unidbg 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 版本7.3-7.4 都试过加密没什…...
【Git】5 个分区的切换方式及示例
目录 1. **工作区(Working Directory)**2. **缓存区(Stage/Index)**3. **本地仓库(Local Repository)**4. **远程仓库(Remote Repository)**5. **贮藏区(Stash࿰…...
Java高频面试之并发编程-02
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:进程和线程的区别是什么? 1. 资源分配与独立性 进程: 独立性:每个进程拥有独立的内存…...
openwebui和keycloak集成,使用keycloak的用户名和密码登录
1,实现效果 使用keycloak定义的用户名和密码,直接登录openwebui 2,实现原理 keycloak中用户信息中包含用户名和密码,以及email。 使用keycloak中的用户名和密码登录之后,会用email创建一个openwebui的账号。之后每次…...
html实现手势密码
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>手势密码</title><style>body {font-fam…...
【区块链安全 | 第八篇】多签机制及恶意多签
部分参考:慢雾科技 文章目录 为什么需要多签多签机制Tron钱包下的恶意多签Tron 钱包多签权限分类Tron 多签机制的运作方式 恶意多签的过程黑客通过多签机制控制账户黑客剥夺用户权限,完全控制账户 恶意多签成因 在区块链中,多签(M…...
