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

CSS伪类选择器全解析:让你的样式更加灵活和智能

目录

前言

一、什么是伪类选择器?

二、常见的伪类选择器详解

1. :hover —— 悬停状态

2. :active —— 活动状态

3. :focus —— 焦点状态

综合案例

4. :first-child —— 第一个子元素

5. :last-child —— 最后一个子元素

6. :nth-child(n) —— 按顺序选中特定子元素

7. :not(selector) —— 非选择器

三、表单元素相关伪类

1. :checked —— 选中状态

2. :disabled —— 禁用状态

3. :required —— 必填状态

四、伪类选择器应用技巧

1. 结合使用多个伪类选择器

2. 改善用户体验

五、总结


前言

       在CSS中,伪类选择器是非常强大的工具,它们可以帮助你在页面样式中根据元素的特定状态进行动态调整。这些选择器让我们能够无需额外的JavaScript代码,仅通过CSS就实现诸如按钮按下、链接悬停等交互效果,使得网页的表现力大大增强。

本篇博客将详细讲解CSS中的常见伪类选择器,包括其语法、应用场景和注意事项。


一、什么是伪类选择器?

伪类是CSS中用于选中元素特定状态或特定条件下的特殊选择器。它们通常用于选中那些不是DOM树中某个元素的本身,但我们依然希望能够应用样式的情况。例如,当用户将鼠标悬停在链接上时,链接的样式可能需要改变,或者在表单元素获得焦点时需要突出显示。

伪类选择器的语法如下

selector:pseudo-class {property: value;
}

常见的伪类选择器分为几类:交互状态伪类结构伪类表单元素伪类等。


二、常见的伪类选择器详解

1. :hover —— 悬停状态

:hover是最常见的伪类之一,用于选中鼠标悬停在元素上的状态。常用在按钮、链接等元素上,以实现交互效果。

<a href="#">悬停链接</a>
a:hover {color: red;text-decoration: underline;
}

当用户将鼠标悬停在链接上时,链接文字颜色变为红色,并添加下划线。

2. :active —— 活动状态

:active用于选中当前被用户点击的元素状态。常用于按钮、链接等元素上,表示用户正在点击该元素。

<button>点击我</button>
button:active {background-color: green;
}

当用户点击按钮时,按钮背景颜色变为绿色。

3. :focus —— 焦点状态

:focus用于选中获得键盘输入焦点的元素。常用于表单输入框、按钮等,能够使元素在获得焦点时表现突出。

<input type="text" placeholder="请输入内容">
input:focus {border: 2px solid blue;
}

当用户点击输入框或通过键盘导航聚焦输入框时,输入框的边框变为蓝色。

综合案例

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>动态伪类</title><style>/* 未访问的链接 */a:link{color: blue;}/* 访问过的链接 */a:visited{color: green;}/* 鼠标悬停 */a:hover{color: red;}/* 激活的链接 */a:active{color: yellow;}span:hover{color: red;}span:active{color: yellow;}/* 获得焦点--输入框获得焦点 */input:focus,select:focus{color:brown;background-color: red;}</style>
</head>
<body><a href="http://www.baidu.com">百度</a><a href="http://www.hao123.com">你好</a><br><span>hello</span><br><input type="text" ><input type="text" ><input type="text" ><select><option>四川</option><option>北京</option><option>上海</option></select>
</body>
</html>

4. :first-child —— 第一个子元素

:first-child伪类选择器用于选中父元素中的第一个子元素,不管该元素的类型是什么。

<ul><li>第一个项</li><li>第二个项</li>
</ul>
ul li:first-child {font-weight: bold;
}

第一个<li>元素会加粗,而其他项不会受到影响。

  • :first-child —— 父元素的第一个子元素
  • :last-child —— 父元素的最后一个子元素
  • :nth-child(n) —— 父元素中第n个子元素
  • :nth-last-child(n) —— 从后往前数的第n个子元素
  • :only-child —— 父元素中唯一的子元素
  • :nth-of-type(n) —— 同类型元素的第n个子元素
  • :first-of-type —— 同类型元素的第一个
  • :last-of-type —— 同类型元素的最后一个
  • :empty —— 没有任何子元素的元素

5. :last-child —— 最后一个子元素

:last-child:first-child类似,用于选中父元素中的最后一个子元素。

<ul><li>第一项</li><li>第二项</li>
</ul>
ul li:last-child {color: green;
}

最后一个<li>元素的文字颜色变为绿色。

6. :nth-child(n) —— 按顺序选中特定子元素

:nth-child(n)允许你选择父元素中的特定位置的子元素。这里的n可以是具体的数字、公式或关键词。

<ul><li>项1</li><li>项2</li><li>项3</li>
</ul>
ul li:nth-child(2) {color: orange;
}

这里,第二个<li>元素的文本颜色将变为橙色。

ul li:nth-child(odd) {background-color: lightgray;
}

odd表示所有奇数位置的元素将应用背景色。

7. :not(selector) —— 非选择器

:not()是一个非常实用的伪类,它选中不匹配指定选择器的元素。它是CSS中唯一一个能够选择不匹配条件的伪类,广泛应用于排除特定元素。

<ul><li class="highlight">项1</li><li>项2</li><li class="highlight">项3</li>
</ul>
ul li:not(.highlight) {color: gray;
}

所有不具有highlight类的<li>元素将呈现灰色。


三、表单元素相关伪类

表单元素伪类选择器专门用于控制表单元素的状态。以下是一些常见的伪类:

1. :checked —— 选中状态

:checked用于选中已被勾选已选中的复选框、单选框等。

<input type="checkbox" checked>选项1
<input type="checkbox">选项2
input:checked {background-color: yellow;
}

已勾选的复选框背景色变为黄色。

2. :disabled —— 禁用状态

:disabled用于选中被禁用的表单元素。

<input type="text" disabled>
input:disabled {background-color: #e0e0e0;
}

禁用的输入框背景色变为灰色。

3. :required —— 必填状态

:required用于选中标记为“必填”的表单元素。

<input type="text" required>
input:required {border: 2px solid red;
}

标记为必填的输入框将呈现红色边框。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>伪类</title><style>/* 选中勾选的复选或者单选框 */input:checked{width:30px;height:30px;}/* 选中可用的输入框 */input:enabled{background-color:green;}/* 选中禁用的输入框 */input:disabled{background-color:grey;}</style>
</head>
<body><input type="checkbox"><input type="radio" name="gender"><input type="radio" name="gender"><input type="password"></input><input type="text" disabled></input>
</body>
</html>

 


四、伪类选择器应用技巧

1. 结合使用多个伪类选择器

你可以将多个伪类选择器组合在一起,增加选择的精确度。例如,选中同时满足:hover:focus状态的元素。

a:hover:focus {color: blue;
}

当链接既被悬停(hover)又获得焦点(focus)时,颜色变为蓝色。

2. 改善用户体验

伪类选择器广泛应用于改善用户交互体验。例如,:focus可以让表单元素在获得焦点时具有明显的样式,帮助用户在填写表单时获得更好的视觉反馈。


五、总结

CSS伪类选择器是让页面样式更加动态、交互性更强的利器。通过掌握伪类选择器的应用,我们可以轻松实现悬停、点击、焦点等状态下的样式变化,使网页更加生动、互动,提升用户体验。常用的伪类如:hover:active:focus等是日常开发中必不可少的工具,熟练掌握这些伪类,将大大增强网页设计能力。

下篇博客我们将伪类选择器进行分类整合,让大家有一个更好的理解记忆, 

相关文章:

CSS伪类选择器全解析:让你的样式更加灵活和智能

目录 前言 一、什么是伪类选择器&#xff1f; 二、常见的伪类选择器详解 1. :hover —— 悬停状态 2. :active —— 活动状态 3. :focus —— 焦点状态 综合案例 4. :first-child —— 第一个子元素 5. :last-child —— 最后一个子元素 6. :nth-child(n) —— 按顺序选…...

【GESP】2024年12月图形化一级 -- 飞行的小猫

飞行的小猫 1. 准备工作 &#xff08;1&#xff09;删除默认小猫角色。 &#xff08;2&#xff09;添加角色Cat Flying和Clouds。 &#xff08;3&#xff09;删除默认白色背景&#xff0c;添加背景Blue Sky 2。 2. 功能实现 &#xff08;1&#xff09;点击绿旗&#xff0c…...

30填学习自制操作系统第二天

今天要干什么&#xff1f; 初步了解汇编语言使用汇编重新写个昨天的镜像文件继续开发 一: 什么是电信号&#xff1f; 电脑的处理中心是CPU&#xff0c;即“central process unit”的缩写&#xff0c;翻译成中文就是“中央处理单元”&#xff0c;顾名思义&#xff0c;他就是…...

MapReduce的工作原理及其在大数据处理中的应用

MapReduce是一种由Google提出的面向大数据并行处理的计算模型、框架和平台&#xff0c;它通过将复杂的数据处理任务分解为两个简单的阶段——Map&#xff08;映射&#xff09;和Reduce&#xff08;归约&#xff09;&#xff0c;实现了分布式并行计算&#xff0c;极大地提高了数…...

vue3.x 的provide 与 inject详细解读

在 Vue 3.x 中&#xff0c;provide 和 inject 是一对用于实现依赖注入的 API。它们允许父组件向其所有子组件&#xff08;无论嵌套多深&#xff09;传递数据或方法&#xff0c;而不需要通过 props 逐层传递。这在开发复杂组件或高阶组件时非常有用。 1. provide 的基本用法 p…...

c#中“事件-event”的经典示例与理解

在C#编程语言中&#xff0c;事件&#xff08;Event&#xff09;是一个非常重要的概念&#xff0c;它提供了一种松耦合的方式&#xff0c;让对象间能够通知彼此&#xff0c;而无需直接联系。事件的使用可以让我们的代码更加灵活、可扩展且易于维护。 事件可以视作委托的实例&…...

《第三代大语言模型Grok 3:闪亮登场》

《第三代大语言模型Grok 3:闪亮登场》 在科技飞速发展的今天,人工智能领域的每一次重大突破都如同巨石投入平静湖面,激起千层浪。当地时间 2 月 15 日,马斯克在社交平台 X 上投下了这样一颗 “巨石”,他宣布旗下人工智能公司 xAI 开发的第三代大语言模型 Grok 3,将于北京…...

rem、em、vw区别

在前端开发里&#xff0c;rem、em、vw都是用来设置元素大小的单位&#xff0c;下面就用大白话讲讲它们的区别。 参考标准不一样 rem&#xff1a;就像大家都用同一把“大尺子”来量东西&#xff0c;这把“大尺子”就是网页里根元素&#xff08;也就是 <html> 标签&#…...

最新Apache Hudi 1.0.1源码编译详细教程以及常见问题处理

1.最新Apache Hudi 1.0.1源码编译 2.Flink、Spark、Hive集成Hudi 1.0.1 3.flink streaming写入hudi 目录 1. 版本介绍 2. 安装maven 2.1. 下载maven 2.2. 设置环境变量 2.3. 添加Maven镜像 3. 编译hudi 3.1. 下载hudi源码 3.2. 修改hudi源码 3.3. 修改hudi-1.0.1/po…...

C语言简单练习题

文章目录 练习题一、计算n的阶乘bool类型 二、计算1!2!3!...10!三、计算数组arr中的元素个数二分法查找 四、动态打印字符Sleep()ms延时函数system("cls")清屏函数 五、模拟用户登录strcmp()函数 六、猜数字小游戏产生一个随机数randsrandRAND_MAX时间戳time() 示例 …...

C++ ——static关键字

1、static修饰局部变量---->静态局部变量 特点&#xff1a; &#xff08;1&#xff09;第一次调用时创建&#xff0c;然后第一次调用结束时没有被回收&#xff0c;以后每次调用&#xff0c;都延用上一次调用结束时的值&#xff0c;直到程序结束时&#xff0c;才被回收 &a…...

Jasper AI技术浅析(二):语言模型

Jasper AI 的核心语言模型是基于 OpenAI 的 GPT-4(Generative Pre-trained Transformer 4)构建的。GPT-4 是一种生成式预训练语言模型,利用深度学习技术,特别是 Transformer 架构,来理解和生成自然语言。 1. GPT-4 的基本原理 1.1 Transformer 架构 GPT-4 基于 Transfo…...

QML 部件获得焦点触发的全局槽函数 onActiveFocusItemChanged

在qml的window窗口中&#xff0c;假如添加里许多其他部件&#xff0c;当这些部件改变时&#xff0c;会有一个全局部件焦点改变槽函数触发&#xff0c;就是 onActiveFocusItemChanged 可以通过此槽函数就可以知道当前焦点在哪一个部件上&#xff0c;也可以做一些自动化测试等&…...

【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例

&#x1f680; Git 工作区 → 暂存区 → 本地仓库 → 回退实战 Git 的核心流程是&#xff1a; &#x1f449; 工作区&#xff08;Working Directory&#xff09; → git add → 暂存区&#xff08;Staging Area&#xff09; → git commit → 本地仓库&#xff08;Local Repos…...

Python 中从零开始的随机梯度下降

文章目录 一、说明二、了解基础知识的重要性&#xff1a;2.1 什么是梯度下降&#xff1f;2.2 梯度下降的类型&#xff1a; 三、随机梯度下降 &#xff08;SGD&#xff09; 有何不同3.1 随机性的概念&#xff1a;3.2 SGD的优点和缺点&#xff1a; 四、随机梯度下降的分步说明五、…...

期权隐含波动率是什么意思?

财顺小编本文主要介绍期权隐含波动率是什么意思&#xff1f;期权隐含波动率&#xff08;Implied Volatility&#xff09;是根据当前期权市场价格&#xff0c;利用期权定价模型&#xff08;如Black-Scholes模型&#xff09;推导出的关于合约标的理论上的价格波动率。它反映了市场…...

python中使用数据库sqlite3

Python使用sqlite3数据库 python3.x标准库内置了SQLite3 查看sqlite的版本 import sqlite3 sqlite_version sqlite3.sqlite_version print(f"SQLite version: {sqlite_version}") 显示 导入模块连接sqlitte3 import sqlite3 consqlite3.connect("d:/fi…...

JavaScript数组-数组的概念

在JavaScript编程中&#xff0c;数组&#xff08;Array&#xff09;是一种非常重要的数据结构&#xff0c;它允许我们将多个值存储在一个单独的变量中。数组可以包含任意类型的元素&#xff0c;如数字、字符串、对象甚至是其他数组&#xff0c;并提供了丰富的内置方法来操作这些…...

英语---基础词汇库

〇、动词类&#xff08;常见谓语表述&#xff09; 1.show&#xff0c;indicate&#xff0c;find 认为&#xff0c;表明 2.improve,promote,boost,enhance,increase&#xff0c;advocate&#xff0c;strength 改善&#xff0c;提升&#xff0c;促进&#xff0c;增强&#xff0…...

ASCII 与 Unicode:两种字符编码的定义和不同

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 &#x1f4af;前言&#x1f4af;一、ASCII编码详解1.1 ASCII的组成1.2 ASCII的局限性 &#x1f4af;二、Unicode编码详解2.1 Unicode编码方式2.2 Unicode的字符范围 &#x1f4af;三、ASCII与Unicode的…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

python打卡day49@浙大疏锦行

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...

运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.

报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符&#xff0c;最后运行&#xff1a;npm run lint --fix...