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

CSS伪类详解:从基础到高级应用

CSS伪类详解从基础到高级应用一、什么是CSS伪类CSS伪类是一种选择器用于选择处于特定状态的元素。它们以冒号:开头可以为元素的不同状态设置不同的样式。伪类的强大之处在于它们能够根据用户交互、文档结构或元素状态来动态改变样式而无需JavaScript的介入。伪类主要分为以下几类用户交互伪类:hover、:active、:focus、:focus-within、:focus-visible结构伪类:first-child、:last-child、:nth-child()、:nth-of-type()表单伪类:checked、:disabled、:required、:valid、:invalid链接伪类:link、:visited否定伪类:not()逻辑伪类:is()、:where()、:has()二、用户交互伪类详解2.1 :hover - 鼠标悬停状态:hover伪类用于选择鼠标指针悬停在其上的元素。.button { background: #4CAF50; color: white; padding: 12px 24px; border: none; border-radius: 4px; transition: all 0.3s ease; } .button:hover { background: #45a049; transform: translateY(-2px); box-shadow: 0 4px 12px rgba(76, 175, 80, 0.3); }最佳实践配合transition属性实现平滑过渡效果避免突然的样式变化。2.2 :active - 激活状态:active伪类匹配用户正在激活的元素通常是鼠标按下到释放的时间段。.button:active { transform: translateY(0); box-shadow: 0 2px 4px rgba(76, 175, 80, 0.2); }2.3 :focus - 焦点状态:focus伪类匹配获得焦点的元素常用于表单元素。input:focus { outline: none; border-color: #4CAF50; box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.2); }2.4 :focus-within - 内部焦点状态:focus-within伪类匹配包含获得焦点元素的父元素。.form-group:focus-within { border-color: #4CAF50; background: rgba(76, 175, 80, 0.05); }2.5 :focus-visible - 可见焦点状态:focus-visible伪类只在键盘导航时显示焦点样式鼠标点击时不显示。.button:focus-visible { outline: 2px solid #4CAF50; outline-offset: 2px; }三、结构伪类详解3.1 :first-child 和 :last-child选择第一个或最后一个子元素。.list li:first-child { border-top: 2px solid #4CAF50; } .list li:last-child { border-bottom: 2px solid #4CAF50; }3.2 :nth-child() - 第n个子元素:nth-child()是最强大的结构伪类之一可以选择特定位置的子元素。/* 选择奇数行 */ .table tr:nth-child(odd) { background: #f2f2f2; } /* 选择偶数行 */ .table tr:nth-child(even) { background: #ffffff; } /* 选择前3个元素 */ .items li:nth-child(-n3) { font-weight: bold; } /* 选择从第4个开始的元素 */ .items li:nth-child(n4) { opacity: 0.7; } /* 选择第3个、第6个、第9个... */ .items li:nth-child(3n) { color: #4CAF50; }3.3 :nth-of-type() - 特定类型的第n个元素与:nth-child()类似但只计数特定类型的元素。/* 选择第2个段落 */ .container p:nth-of-type(2) { font-size: 1.1em; }3.4 :only-child - 唯一子元素选择没有兄弟元素的元素。.box:only-child { width: 100%; }四、表单伪类详解4.1 :checked - 选中状态匹配被选中的radio或checkbox。input[typecheckbox]:checked { accent-color: #4CAF50; } input[typecheckbox]:checked label { color: #4CAF50; font-weight: bold; }4.2 :disabled 和 :enabled匹配禁用或启用的表单元素。input:disabled { background: #f0f0f0; cursor: not-allowed; opacity: 0.6; } input:enabled { cursor: text; }4.3 :required 和 :optional匹配必填或可选的表单元素。input:required { border-left: 3px solid #f44336; } input:optional { border-left: 3px solid #9e9e9e; }4.4 :valid 和 :invalid匹配验证通过或失败的表单元素。input:valid { border-color: #4CAF50; } input:invalid { border-color: #f44336; } input:invalid:not(:placeholder-shown) { border-color: #f44336; }五、链接伪类详解链接伪类有特定的声明顺序要求LVHA:link→:visited→:hover→:active。a:link { color: #2196F3; text-decoration: none; } a:visited { color: #9C27B0; } a:hover { color: #1976D2; text-decoration: underline; } a:active { color: #0D47A1; }六、逻辑伪类详解6.1 :not() - 否定选择器选择不匹配特定选择器的元素。/* 选择除了.last类之外的所有li */ li:not(.last) { border-bottom: 1px solid #eee; } /* 选择除了按钮之外的所有可点击元素 */ .clickable:not(button) { cursor: pointer; }6.2 :is() - 匹配任意选择器:is()伪类接受选择器列表匹配列表中任意一个选择器的元素。/* 简化多个选择器的写法 */ :is(header, main, footer) p { line-height: 1.6; } /* 等价于 */ header p, main p, footer p { line-height: 1.6; }6.3 :where() - 零特异性选择器:where()与:is()类似但它的特异性为0。:where(.article, .post) p { color: #333; }6.4 :has() - 父选择器:has()伪类选择包含特定子元素的父元素这是CSS历史上首次实现父选择器。/* 选择包含img子元素的a标签 */ a:has(img) { display: block; } /* 选择包含.active子元素的nav */ nav:has(.active) { background: #f8f9fa; } /* 选择后面跟着p元素的h2 */ h2:has( p) { margin-bottom: 0.5rem; }七、实战应用场景7.1 卡片悬停效果.card { background: white; border-radius: 8px; padding: 1rem; transition: all 0.3s ease; } .card:hover { transform: translateY(-4px); box-shadow: 0 12px 24px rgba(0, 0, 0, 0.1); } .card:hover .card-title { color: #4CAF50; }7.2 表单验证反馈.form-field { position: relative; } .form-field input:focus:invalid { border-color: #f44336; } .form-field input:focus:valid { border-color: #4CAF50; } .form-field:has(input:invalid:not(:placeholder-shown)) .error-message { display: block; } .error-message { display: none; color: #f44336; font-size: 0.875rem; }7.3 导航菜单高亮.nav-item:has(.active) { background: rgba(76, 175, 80, 0.1); border-radius: 4px; } .nav-item .active { color: #4CAF50; font-weight: bold; }八、伪类组合使用技巧8.1 链式伪类/* 未访问过的链接且处于hover状态 */ a:link:hover { text-decoration: underline; } /* 获得焦点且无效的输入框 */ input:focus:invalid { border-color: #f44336; }8.2 嵌套伪类/* 列表项的第一个子元素且处于hover状态 */ li:first-child:hover { background: #f0f0f0; } /* 偶数行中被选中的复选框 */ tr:nth-child(even) input:checked { accent-color: #2196F3; }8.3 与伪元素组合.button:hover::after { content: →; margin-left: 4px; } .card:hover::before { content: ; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, #4CAF50, #2196F3); }九、浏览器兼容性伪类ChromeFirefoxSafariEdge:hover✅✅✅✅:focus✅✅✅✅:focus-within✅✅✅✅:focus-visible✅✅✅✅:nth-child()✅✅✅✅:nth-of-type()✅✅✅✅:not()✅✅✅✅:is()✅✅✅✅:where()✅✅✅✅:has()✅✅✅✅十、最佳实践总结遵循LVHA顺序链接样式必须按:link→:visited→:hover→:active的顺序声明。考虑可访问性使用:focus-visible区分键盘和鼠标焦点确保键盘用户的可访问性。性能优化避免过度使用复杂的伪类选择器特别是:nth-child()和:has()可能影响渲染性能。语义化使用伪类应该增强交互体验而不是改变元素的语义含义。测试交互状态确保在各种设备和输入方式下都能正确显示不同状态的样式。总结CSS伪类是构建现代Web界面不可或缺的工具。它们提供了强大的选择能力使我们能够创建丰富的交互体验而无需编写JavaScript。掌握各种伪类的用法和组合技巧能够极大提升你的CSS技能水平。通过本文的学习你应该能够理解各种伪类的作用和使用场景正确组合使用多个伪类创建优雅的交互效果和表单验证反馈遵循最佳实践编写高质量的CSS代码继续探索伪类的更多用法结合CSS变量、动画等特性你将能够构建出更加精美和交互丰富的Web应用。

相关文章:

CSS伪类详解:从基础到高级应用

CSS伪类详解:从基础到高级应用 一、什么是CSS伪类 CSS伪类是一种选择器,用于选择处于特定状态的元素。它们以冒号 : 开头,可以为元素的不同状态设置不同的样式。伪类的强大之处在于它们能够根据用户交互、文档结构或元素状态来动态改变样式&a…...

通过Taotoken CLI工具一键配置团队开发环境与统一模型调用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken CLI工具一键配置团队开发环境与统一模型调用 在团队协作开发中,统一管理大模型API的接入配置是一项常见且…...

Flutter国际化与本地化完全指南

Flutter国际化与本地化完全指南 引言 国际化是构建全球化应用的关键环节,Flutter提供了完善的国际化支持。本文将深入探讨Flutter中的国际化和本地化技术。 一、基础配置 1.1 添加依赖 dependencies:flutter_localizations:sdk: flutterintl: ^0.18.11.2 更新main.d…...

CSS背景效果完全指南

CSS背景效果完全指南 引言 CSS背景效果是美化网页的重要手段,通过合理使用背景属性,可以创造出丰富的视觉效果。本文将深入探讨CSS背景的各种属性和高级技巧。 一、背景基础 1.1 background-color .element {background-color: #4CAF50;background-color…...

2026免费一键去图片水印App详细教程,哪个好用一看就会

你是不是也遇到过这种抓狂瞬间:好不容易找到一张绝美壁纸,下载下来发现右下角有个硕大的水印;刷小红书看到一张干货满满的食谱长图,想保存下来慢慢看,结果水印刚好盖在关键步骤上;又或者自己做图时手滑把水…...

144-基于Flask的电商超市数据可视化分析系统

基于 Flask 的电商超市数据可视化分析系统 — 技术文档 目录 项目概述技术栈项目结构系统架构数据库设计后端路由设计数据分析引擎前端页面设计API 接口文档用户认证与权限管理后台部署与运行依赖清单 1. 项目概述 本系统是一个基于 Flask 框架的电商超市数据可视化分析平台…...

Codeforces Round 1058

【实况】Codeforces Round 1058 (Div. 2)(rk3194;perf1423;solve3) https://www.bilibili.com/video/BV1Tv4GzwE5r/ 【赛时3/7】Codeforces Round 1058(Div.2)上1000了记录一下 https://www.bilibili.com/video/BV1BC4kzMEoa/ Codeforces Round 1058 (Di…...

2026最新免费图片去水印工具详细教程丨手把手教会你,一看就会

你是不是也遇到过这样的抓狂时刻:相册里翻到一张超好看的壁纸,刚想设成桌面,角落那个大大的水印瞬间让人没了心情;做课件做汇报,急需一张干净的产品图,翻遍全网不是带标的就是要付费;刷视频看到…...

Kubernetes成本优化与资源管理:降低云原生基础设施成本

Kubernetes成本优化与资源管理:降低云原生基础设施成本 一、成本优化概述 Kubernetes成本优化是通过合理配置资源、优化调度策略、选择合适的实例类型等方式,降低云原生基础设施的运营成本。 1.1 成本组成 成本类型说明优化方向计算成本CPU、内存资源…...

Kubernetes事件驱动架构设计:构建响应式微服务系统

Kubernetes事件驱动架构设计:构建响应式微服务系统 一、事件驱动架构概述 事件驱动架构(EDA) 是一种设计模式,其中系统的行为由事件触发。在Kubernetes环境中,事件驱动架构可以实现松耦合、高可扩展的微服务系统。 …...

Linux渗透测试实战命令指南:从信息收集到横向移动

1. 这不是命令手册,而是一张渗透测试现场的“作战地图”你有没有过这样的经历:坐在靶机前,刚扫出一个Web服务,脑子里立刻蹦出七八个工具名——nmap、gobuster、sqlmap、hydra……可手一伸向键盘,却卡在了第一个参数上&…...

Linux端口敲门原理与knockd实战部署指南

1. 端口敲门不是玄学,是可控的“隐形门铃”很多人第一次听说“SSH端口敲门”,第一反应是:这玩意儿是不是给服务器加了一把看不见的锁?听起来很酷,但真用起来会不会像在黑盒里调音——敲对了门开,敲错了直接…...

AWVS 25.5 Windows版深度部署指南:CVE精准验证与DevSecOps集成

1. 这不是普通安装教程:AWVS 25.5 Windows版的真实价值在哪?很多人搜“AWVS安装教程”,点进来第一反应是“又要填注册码、改hosts、下破解补丁?”——这种认知已经严重落后于2025年的真实技术现场。我用AWVS 25.5在三个不同行业的…...

2026年AI论文写作工具实测认证:5款神器从文献到降重一站式避坑指南

写论文的焦虑,是每个科研人和学生绕不开的“必修课”。选题无从下手,文献检索耗时费力,格式调整反复修改,查重降重更是让人抓耳挠腮。2026年的AI工具早已不是当年的“辅助软件”,而是升级为能理解学术逻辑、生成高质量…...

2026年AI论文写作软件盘点:12款神器助你高效完成去痕改写、润色和过检

随着 AI 技术的持续突破,2026 年的论文写作工具市场已进入“智能化、精细化、合规化”的全新发展阶段。从本科生的课程论文到研究生的学位论文,再到科研人员的期刊投稿,AI 工具正以强大的技术支撑覆盖各类学术场景。无论是选题方向的启发、文…...

《当下的力量》7-10章终章解读:从临在到臣服,活出生命的终极自由

《当下的力量》7-10章终章解读:从临在到臣服,活出生命的终极自由终章:这是全书最具力量的部分,它将告诉你如何在最艰难的人生境遇中,依然保持内心的平静与自由前言 在前六章中,我们已经了解了人类痛苦的根源…...

Python算法基础篇之广度优先搜索(BFS)

一、什么是广度优先搜索(BFS)? 广度优先搜索(Breadth-First Search, BFS) 是一种用于遍历或搜索图、树的算法。其核心策略是:从起始节点出发,先访问所有直接邻居(第1层)&…...

Python算法基础篇之深度优先搜索(DFS)

一、什么是深度优先搜索(DFS)? 深度优先搜索(Depth-First Search, DFS) 是一种用于遍历或搜索图、树的算法。其核心策略是:从起始节点出发,沿着一条路径尽可能深入地探索,直到无法继…...

信创中间件深度解析:东方通TongWeb vs 金蝶天燕 vs 宝兰德,企业级选型指南

📚 信创中间件 🔧 企业级部署 🚀 国产化替代 ⏱️ 阅读约15分钟开篇导读:你是否在信创改造中不知道用什么替代WebLogic或WebSphere?网上搜到的中间件资料要么只讲产品功能不讲迁移方案,要么直接给配置却不解…...

中小企业AI落地成本杀手!DeepSeek计费冷知识曝光(含4个可立即启用的免费优化开关)

更多请点击: https://codechina.net 第一章:中小企业AI落地成本杀手!DeepSeek计费冷知识曝光(含4个可立即启用的免费优化开关) 很多中小企业误以为调用 DeepSeek API 的成本仅取决于 token 数量,却忽略了隐…...

网络技术05-TCP拥塞控制算法——从CUBIC到BBR的性能进化

🚗 一句话总结:TCP拥塞控制就像开车——看到前面堵车就减速(拥塞避免),路通畅了就慢慢加速(慢启动)。CUBIC是"看到堵车就猛踩刹车",BBR是"根据路况预测提前调整"…...

eClinMed 中国人民解放军总医院第五医学中心介入超声科:基于超声的可解释性机器学习模型用于≤3cm肝细胞癌分类的开发与验证

01文献信息本次分享的文献是由中国人民解放军总医院第五医学中心介入超声科联合厦门大学附属翔安医院、南开大学医学院和福州市第一总医院超声科等55家医院在2025年2月在柳叶刀子刊《eClinicalMedicine》(中科院1区,IF10.0)上的研究“Develop…...

J Thorac Oncol(IF=20.8)广东省人民医院钟文昭教授团队:基于影像组学的支持向量机区分驱动肺腺癌进展的分子事件

01文献信息本次分享的文献是由广东省人民医院肺癌研究所钟文昭教授团队联合华南理工大学医学院、广东省人民医院病理科、核医学科等多学科团队在2024年9月19日在《Journal of Thoracic Oncology》(中科院1区,IF20.8)上发表的研究“Radiomics-…...

Claude Code 2026 全命令实战:6分钟开发完整坦克对战游戏

文章目录前言第一步:新建文件夹,然后输入一个单词第二步:/plan命令,比产品经理还贴心的规划师第三步:看着AI写代码,自己在旁边喝咖啡第四步:/rewind命令,程序员的后悔药第五步&#…...

深度剖析Claude Code实操逻辑,解锁AI编程高效开发方式

文章目录前言一、我用Claude Code的翻车现场,能写一本《程序员血泪史》二、Claude Code的核心设计思想:你以为它是保姆,其实它是保安三、普通模式vs规划模式:一个是临时工,一个是项目经理四、两条核心指令,…...

掌握AI技能配置技巧 大幅提升日常办公开发效率

P.S. 目前国内还是很缺AI人才的,希望更多人能真正加入到AI行业,共同促进行业进步,增强我国的AI竞争力。想要系统学习AI知识的朋友可以看看我精心打磨的教程 http://blog.csdn.net/jiangjunshow,教程通俗易懂,高中生都能…...

量子机器学习模型安全:反向工程威胁与防御策略解析

1. 量子机器学习模型的反向工程:安全威胁与防御策略量子计算与机器学习的结合,正以前所未有的方式重塑我们处理复杂问题的能力。作为一名长期关注量子算法与信息安全交叉领域的研究者,我亲眼见证了量子机器学习从理论构想走向实际应用的飞速发…...

【Sora 2视频后期处理黄金法则】:20年AI影像专家亲授5大不可绕过的帧级调优技巧

更多请点击: https://codechina.net 第一章:Sora 2视频后期处理的底层逻辑与帧级思维重构 Sora 2并非传统时间轴驱动的剪辑工具,其视频后期处理建立在扩散模型与隐空间帧序列联合优化的基础之上。每一帧不再作为孤立图像存在,而是…...

Burp Suite实操避坑指南:从抓包失败到漏洞验证的完整链路

1. 这不是又一本“Burp Suite入门指南”,而是一份我亲手调试过37次配置、在真实客户环境里跑通21个靶场、被5个刚转行的安全新人追着问细节的实操手记你点开这个标题,大概率正站在两个路口之间:一边是满屏英文弹窗、Proxy拦截失败、Repeater发…...

【2024新闻稿生产力白皮书】:实测17款Prompt后沉淀出的唯一高通过率模板(附A/B测试数据:发布成功率↑410%)

更多请点击: https://codechina.net 第一章:ChatGPT新闻稿写作模板的底层逻辑与范式演进 新闻稿生成并非简单拼接关键词,而是语义意图建模、事实锚定与传播修辞三重机制协同作用的结果。早期模板依赖规则引擎(如正则匹配预设句式…...