本文为个人学习总结,如有谬误欢迎指正。前端知识众多,后续将继续记录其他知识点!

目录

前言

一、伪类选择器

1.概念

2.动态选择器(用户交互)

3.结构伪类

:first-child:选择所有兄弟元素的第一个

:last-child:选择所有兄弟元素的最后一个

:nth-child(n):选择选择所有兄弟元素的第n个

:first-of-type:所有同类型的兄弟元素的第一个

:last-of-type:所有同类型的兄弟元素的最后一个

:nth-of-type(n):所有同类型的兄弟元素的第n个

4.否定伪类(作排除)

实际应用场景

(1) 表单控件排除

(2) 导航菜单高亮

(3) 列表样式控制

(4) 无障碍优化

5.UI选择器

二、伪元素选择器

::first-letter

::first-line

::selection

::before

::after


前言

伪类选择器与伪元素选择器作为 CSS 中极具特色的两类选择器,伪类选择器专注于选取元素的特殊状态;伪元素选择器则着眼于元素内部的特定部分,本文将记录伪类选择器和伪元素选择器的概念、用法、实际应用场景及注意事项,希望这份笔记能为同样正在学习CSS的同学提供参考,也欢迎大家结合原课程视频深入学习,共同进步。

网课链接: https://www.bilibili.com/video/BV1p84y1P7Z5/?share_source=copy_web&vd_source=faad59aa4025692c65fca19bc4320e39


一、伪类选择器

1.概念

  • 作用:是选中特殊状态的元素

2.动态选择器(用户交互)

注意顺序:link(未连接),visited(已访问),hover(悬停),active(激活)

对于一个未访问的超链接,处于link,然后鼠标悬浮(hover),点击激活(active),最后处于已访问(visited)

visited不能写在最后,不然,后来者居上,不会出现悬浮和激活状态(被覆盖)

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>伪类选择器</title><style>/* 访问过a元素,颜色也不会改变<a href="hhtps://www.baidu.com">去百度</a>*//* 前提是a标签的target属性是_self,在该页面跳转 *//* link和visited是超链接特有的 *//* 选中没有访问过的a元素 */a:link{color:chocolate;}/* 选中访问过的a元素 */a:visited{color:grey;}/* 选中鼠标悬浮的a元素 */a:hover{color: cadetblue;}/* 选中激活(鼠标点击不松手)状态的a元素 */a:active{color: blue;}/* 这四个有顺序:link visited hover active *//* hover与active可以用于其他元素,例如p,span等等 */p:hover{color: blueviolet;}/* 获取焦点(只有表单元素才能使用focus伪类) */input:focus{/* 输入文字颜色变成蓝色 */color: blue;}select:focus{color: aqua;}</style>
</head>
<body><a  href="https://www.baidu.com" >去百度</a><a href="https://www.jd.com" >去京东</a><br><p>前端</p><!-- 输入框 --><input type="text"><br><!-- 下拉框 --><select name="age" ><option value="under 18">18以下</option><option value="18-25">18-25岁</option><option value="26-35">26-35岁</option></select>
</body>
</html>

3.结构伪类

-child 基于其父元素的所有子代元素;-of-type 基于其父元素的所有同类型的子代元素

:first-child:选择所有兄弟元素的第一个

:first-child 伪类与指定的元素匹配:该元素是另一个元素的第一个子元素。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>结构伪类01</title><style>/* 后代选择器:选中div后代(儿子,孙子,。。)p元素(在div所有子元素中找),p元素的父亲是谁无所谓,但是p必须是其父亲的第一个儿子——结构3 *//* main的p元素变色,它是div的孙子,是后代元素,是第一个 */div p:first-child{color: blue;}/* 选中p元素,p元素的父亲是谁无所谓,但是p必须是其父亲的第一个儿子——结构3 *//* 同时定义了div p:first-child和p:first-child两个选择器,前者具有更高的特异性(因为它更具体),所以即使两个规则都匹配,蓝色的规则会覆盖红色的规则。 */p:first-child{color: red;}</style>
</head>
<body><!-- 结构3 --><div><p>开发</p><!-- main表示主要内容 --><main><p>张三:98</p></main><!-- div的第二个子元素 --><p>李四:88</p><p>王五:76</p><p>赵六:68</p></div></body>
</html>

:last-child:选择所有兄弟元素的最后一个

/* 选中div的最后一个儿子元素(按照所有兄弟计算)——结构1 */div > p:last-child{        color: red;        }<!-- 结构1 --><div>        <p >张三:98</p><p>李四:88</p><p>王五:76</p><p>赵六:68  <span>99</span>  </p></div>        

选择器拆解

  • div > p----------选择所有直接子级<p> 元素(必须是 <div> 的直接子元素)。
  • :last-child------------进一步筛选这些 <p> 中的最后一个子元素相对于其父元素 <div>
  • 如果 <div> 的最后一个是其他元素(如 <span>),则不会匹配任何 <p>

:nth-child(n):选择选择所有兄弟元素的第n个

n的取值范围:0到正无穷

  • 写0,不选中
  • 写n,全选中(不用)
  • 2*n,或者even:选中偶数元素
  • 2*n+1,或者odd:选中奇数元素
  • 必须写

n的取值形式:a*x+b

  • 可以写数字(a=0),选中单个;但是不要超过兄弟元素个数
  • 可以写表达式(固定格式a*x+b),进行一定范围选中
  • 例如,可以写-n+5,选中前5个(n的值从0开始遍历,到n为5结束),但是不能写5-n
 /*选中div的第n个儿子p元素(按照所有兄弟计算)——结构1  */div > p:nth-child(3){color: blue;}

注意:它基于父元素中的所有子元素来计算的,而不仅仅是特定类型的子元素。它会按照子元素的顺序进行编号,然后根据选择器的规则来选择元素。

  • nth-child(-n+4) 的意思是选择父元素中的前 4 个子元素(包括所有类型的子元素,而不仅仅是 <p> 元素
    • 第 1 个子元素是 <span>
    • 第 2 个子元素是第一个 <p>(张三)。
    • 第 3 个子元素是第二个 <p>(李四)。
    • 第 4 个子元素是第三个 <p>(王五)。

因此,nth-child(-n+4) 会选择这 4 个子元素,但只有其中的 <p> 元素会应用样式。

希望选择前 4 个 <p> 元素,而不是前 4 个子元素,应该使用 nth-of-type,而不是 nth-child

<!-- 选中div的第4,3,2,1个子代p元素(先找子代元素) -->
div > p:nth-child(-n+4){background-color: burlywood;}<div><span>测试</span> <!-- 第一个子代元素 --><p>张三:98</p><p>李四:88</p><p>王五:76</p><p>赵六:68</p>
</div>
<!--在这个结构中,<span> 是第一个子元素,而 <p> 元素是从第二个子元素开始的。  -->

:first-of-type:所有同类型的兄弟元素的第一个

选中div的第一个儿子p元素(按所有同类型的兄弟计算)

  • 选中div的第一个同类型(p元素)的(状态)子代p元素

:last-of-type:所有同类型的兄弟元素的最后一个

选中div的最后一个儿子p元素(按所有同类型的兄弟计算)

  • 选中div的最后一个同类型(p元素)的(状态)子代p元素
  • 只找同类型的p元素

:nth-of-type(n):所有同类型的兄弟元素的第n个

nth-of-type 是基于特定类型的子元素来计算的,而不是所有子元素。

选中div的第n个儿子p元素(按所有同类型的兄弟计算)

  • 选中div的第n个同类型(p元素)的(状态)子代p元素


选择器

作用

当前示例匹配结果

div > p:last-child

选择作为父元素最后一个子元素的直接 <p>

<p>赵六:68</p>

div p:last-of-type

选择父元素内同类型的最后一个 <p>

<p>赵六:68</p>

div > p:last-of-type

:last-of-type

,但仅限直接子级

<p>赵六:68</p>

4.否定伪类(作排除)

  • 作用:排除满足括号中条件的元素
  • 语法:not(选择器){

        属性名:属性值

}

括号里可以是类选择器,属性选择器,id选择器,结构选择器等等

实际应用场景

(1) 表单控件排除
/* 为所有非隐藏输入框添加边框 */
input:not([type="hidden"]) {border: 1px solid #ccc;
}
(2) 导航菜单高亮
/* 当前页面菜单项不加粗 */
.nav-item:not(.active) {font-weight: normal;
}
(3) 列表样式控制
/* 最后一项不加下划线 */
li:not(:last-child) {border-bottom: 1px solid #eee;
}
(4) 无障碍优化
/* 非禁用按钮悬停效果 */
button:not([disabled]):hover {background-color: #555;
}

注意事项

不支持嵌套 :not()

/* 无效写法 */
:not(:not(p)) {}

不能包含伪元素

/* 无效写法 */
:not(::before) {}

优先级计算
:not() 的优先级由其参数决定。例如:

  • :not(.class) 的优先级 = 类选择器(10)
  • :not(#id) 的优先级 = ID 选择器(100)

5.UI选择器

选中就变大,不选中就保持原状;

focus是选中变大,取消选中不变回原状

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style>/* 选中的是勾选得复选框或者单选框(不能写颜色的样式) */input:checked{width: 30px;height: 40px;}/* 选中被禁用的input元素 */input:disabled{background-color:grey;}</style>
</head>
<body><input type="checkbox"><input type="radio" name="gender"><input type="radio" name="gender"><input type="text"><input type="text" disabled>
</body>
</html>

二、伪元素选择器

  • 作用:CSS 伪元素是一种特殊的选择器,它可以在不改变 HTML 结构的情况下对页面元素的特定部分进行样式设置选中元素中的一些特殊位置。
  • 使用两个冒号

::first-letter

选中块级元素的第一个字母(汉字,字符) 设置特殊样式

或者:使用span标签包裹要改变的元素,使用元素选择器

::first-line

选中块级元素的第一行 设置特殊样式

  • 会随着界面大小变化,第一行文字变化,但永远只选中第一行

::selection

选中被鼠标选择的文字 设置特殊样式

注意:以下属性可以与 ::selection 一起使用:(不能与字体大小一起使用)

  • color
  • background-color
  • text-decoration
  • text-shadow

::before

在元素最开始的位置,创建一个子元素(必须用content属性指定内容,属性:值的方式)

使用 content 属性指定要插入的内容。content 的值可以是:

  • 字符串:content: "Hello world!";
  • 图片:content: url(myimage.jpg);
  • 无内容:content: none;
  • 计数器:content: counter(li);
  • 引号:content: open-quote;
  • 属性值:content: " (" attr(href) ")";

注意:插入的内容仍然位于指定元素内部。插入的内容会添加到元素内部的其他内容之前。

::after

在元素最后的位置,创建一个子元素(必须用content属性指定内容

注意:插入的内容仍然位于指定元素内部。插入的内容会添加到元素内部的其他内容之后。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92894.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92894.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92894.shtml

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

相关文章

深入探索 PDF 数据提取:PyMuPDF 与 pdfplumber 的对比与实战

在数据处理和分析领域&#xff0c;PDF 文件常常包含丰富的文本、表格和图形信息。然而&#xff0c;从 PDF 中提取这些数据并非易事&#xff0c;尤其是当需要保留格式和颜色信息时。幸运的是&#xff0c;Python 社区提供了多个强大的库来帮助我们完成这项任务&#xff0c;其中最…

Springboot注册过滤器的三种方式(Order 排序)

一、使用 Component Order&#xff08;简单但不够灵活&#xff09; 适用于全局过滤器&#xff0c;无需手动注册&#xff0c;Spring Boot 会自动扫描并注册。 Component Order(1) // 数字越小&#xff0c;优先级越高 public class AuthFilter implements Filter {Autowired /…

电脑硬件详解

前几天我的风扇转的很快&#xff0c;而且cpu占用率很高&#xff0c;然后我在想怎么回事&#xff0c;然后就浅浅研究了一下电脑的硬件。 笔记本主板&#xff1a; 台式机主板&#xff1a; 图1&#xff1a; 图2&#xff1a; 电脑硬件详解 电脑的硬件是组成计算机系统的物理设…

力扣47:全排列Ⅱ

力扣47:全排列Ⅱ题目思路代码题目 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 思路 又是任意顺序和所有不重复的排列&#xff0c;显而易见我们要使用回溯的办法。 首先是回溯的结束条件即新数组的长度等于nums的长度。这道题的难点…

学习笔记091——如何实现web登录时,密码复杂度校验?(后端)

1、创建工具类 /*** 密码复杂度校验* param password 密码*/ public static void validatePassword(String password) {// 至少8位if (password.length() < 8) {throw new IllegalArgumentException("密码长度至少为8位");}// 包含大小写字母if (!password.matche…

雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论

一、前言在日趋复杂的分布式系统中&#xff0c;数据量越来越大&#xff0c;数据库分库分表是一贯的垂直水平做法&#xff0c;但是需要一个全局唯一ID标识一条数据或者MQ消息&#xff0c;数据库id自增就显然不能满足要求了。因为场景不同&#xff0c;分布式ID需要满足以下几个条…

【PCB设计经验】去耦电容如何布局?

0805 和 0603 以及更小 封装的电容用作于对中高频的去耦,其摆放位置是有要求的: 一、建议尽可能的靠近主控芯片的 电源管脚放置。 二、使用较宽和短的引线连接到电源和地过孔可以采用如下 图 4–1 中的图 ( 2 )、( 3)、 ( 4 )任意一种方式,避免使用长线或者较细的…

自动化运维实验

目录 一、实验拓扑 二、实验目的 三、实验步骤 实验思路&#xff1a; 代码部分&#xff1a; 四、实验结果&#xff1a; 一、实验拓扑 二、实验目的 利用python脚本&#xff0c;在本地&#xff0c;或者虚拟机里实现&#xff0c;设备CRC数量统计&#xff0c;并输出成表格 三、实验…

Wed前端第二次作业

一、作业1&#xff1a;完成自己学校的官网&#xff0c;动忘内容直接贴&#xff0c;至少三个不同的页面1、界面1&#xff08;1&#xff09;相关代码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

第5节 大模型分布式推理通信优化与硬件协同

前言 在分布式推理中,多设备(如GPU、CPU)之间的数据传输(通信)是连接计算的“桥梁”。如果通信效率低下,即使单设备计算能力再强,整体性能也会大打折扣。想象一下:如果工厂之间的物流卡车跑得比生产速度还慢,再多的工厂也无法提高整体产量。 本节将从最基础的单设备内…

XGBoost 的适用场景以及与 CNN、LSTM 的区别

XGBoost 的核心优势与适用场景XGBoost 是一种梯度提升决策树算法&#xff0c;属于集成学习方法。它在处理结构化/表格化数据方面表现极其出色&#xff0c;是 Kaggle 竞赛和工业界广泛应用的“冠军”模型。其核心优势和应用场景包括&#xff1a;1. 结构化/表格化数据数据形式&a…

快速设计简单嵌入式操作系统(3):动手实操,基于STC8编写单任务执行程序,感悟MCU指令的执行过程

引言 前面我们陆续学习了操作系统常见的基础概念&#xff0c;接着简单了解了一下8051单片机的内存结构和执行顺序切换的相关概念。接下来&#xff0c;我们就开始进行实操&#xff0c;基于8051单片机STC8来编写一个简单的操作系统&#xff0c;这里我们先实现一个单任务的执行程…

Spring AI Alibaba - 聊天机器人快速上手

本节对应 Github&#xff1a;https://github.com/JCodeNest/JCodeNest-AI-Alibaba/tree/master/spring-ai-alibaba-helloworld 本文将以阿里巴巴的通义大模型为例&#xff0c;通过 Spring AI Alibaba 组件&#xff0c;手把手带你完成从零到一的构建过程&#xff1a;首先&#…

串口通信学习

不需要校验位就选8位&#xff0c;需要校验位就选9位&#xff01;USRTUSART框图STM32的外设引脚这是USART的基本结构。数据帧&#xff0c;八位是这个公式还是很重要的&#xff01;如果在编辑器里面使用printf打印汉字的话&#xff0c;会出现乱码的话&#xff0c;前提是你的编码格…

面试经典150题[001]:合并两个有序数组(LeetCode 88)

合并两个有序数组&#xff08;LeetCode 88&#xff09; https://leetcode.cn/problems/merge-sorted-array/?envTypestudy-plan-v2&envIdtop-interview-150 1. 题目背景 你有两个已经排好序的数组&#xff1a; nums1&#xff1a;前面是有效数字&#xff0c;后面是空位&…

快速安装达梦8测试库

计划&#xff1a;数据库名实例名PORT_NUMMAL_INST_DW_PORTMAL_HOSTMAL_PORTMAL_DW_PORTDMDWDBINST_1533615101192.168.207.612510135101*****[2025-08-11 15:14:34]***** Last login: Fri Jul 25 17:36:04 2025 from 192.168.88.48 [rootdm01 ~]# ip a 1: lo: <LOOPBACK,UP,…

Hive中优化问题

一、小文件合并优化Hive中的小文件分为Map端的小文件和Reduce端的小文件。(1)、Map端的小文件优化是通过CombineHiveInputFormat操作。相关的参数是&#xff1a;set hive.input.formatorg.apache.hadoop.hive.ql.io.CombineHiveInputFormat;(2)、Reduce端的小文件合并Map端的小…

tlias智能学习辅助系统--Maven高级-继承

目录 一、打包方式与应用场景 二、父子工程继承关系 1. 父工程配置 2. 子工程配置 三、自定义属性与引用属性 1. 定义属性 2. 在 dependencyManagement 中引用 3. 子工程中引用 四、dependencyManagement 与 dependencies 的区别 五、项目结构示例 六、小结 在实际开…

把 AI 押进“小黑屋”——基于 LLM 的隐私对话沙盒设计与落地

标签&#xff1a;隐私计算、可信执行环境、LLM、沙盒、内存加密、TEE、SGX、Gramine ---- 1. 背景&#xff1a;甲方爸爸一句话&#xff0c;“数据不能出机房” 我们给某三甲医院做智能问诊助手&#xff0c;模型 70 B、知识库 300 GB。 甲方只给了两条铁律&#xff1a; 1. 患者…

Java 大视界 -- Java 大数据在智能教育学习效果评估指标体系构建与精准评估中的应用(394)

Java 大视界 -- Java 大数据在智能教育学习效果评估指标体系构建与精准评估中的应用&#xff08;394&#xff09;引言&#xff1a;正文&#xff1a;一、传统学习评估的 “数字陷阱”&#xff1a;看不全、说不清、跟不上1.1 评估维度的 “单行道”1.1.1 分数掩盖的 “学习真相”…