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

你还在给每个图片父元素加类名?CSS :has() 让选择器“逆天改命”

你还在给每个图片父元素加类名CSS :has() 让选择器“逆天改命”引言“组长这个需求我写不了。”“什么需求”“产品经理说所有包含图片的卡片要在卡片上加一个‘带图标识’的边框。但是这些卡片是动态渲染的图片可有可无我总不能每个卡片都写个条件判断吧”组长瞥了我一眼“你用 CSS 啊。”“CSS 怎么选CSS 又没办法判断一个元素里有没有图片……”组长微微一笑“那是以前的 CSS 了。你知道:has()吗它能让父元素根据子元素的状态来改变自己。简单来说就是‘子凭父贵’的反过来——父凭子贵。”我当时一脸懵还有这种操作那天下午我学会了:has()然后发现——原来 CSS 早就不是当年的 CSS 了。它悄悄给自己装了个“逆向思维”的外挂只是我们都不知道。一、:has() 是什么CSS 的“时光倒流”在 CSS 选择器的历史上我们一直只能从上往下选父元素 → 子元素兄弟元素 → 相邻兄弟。比如div p选择 div 里的所有 ph1 p选择紧跟在 h1 后面的 p。但从来没有人能根据子元素的状态来选择父元素。直到:has()出现。:has()是一个关系伪类它允许你根据元素的后代或后续兄弟元素来匹配该元素。语法看起来就像是在问“嘿这个元素里面有没有符合某个条件的子元素”/* 选择所有包含 img 元素的 figure */figure:has(img){border:2px solid gold;}/* 选择所有包含 .error-message 的表单 */form:has(.error-message){border:1px solid red;background-color:#ffeeee;}更妙的是:has()里面可以写几乎任何复杂选择器包括伪类、组合器甚至可以嵌套:has()。二、实战那些让你拍大腿的场景2.1 场景一包含图片的卡片加特殊样式终于不用 JS 了divclasscardh3标题/h3p一些文字.../pimgsrcphoto.jpgalt配图/divdivclasscardh3标题/h3p没有图片的卡片/p/div.card:has(img){box-shadow:0 4px 12pxrgba(0,0,0,0.1);border-left:4px solid #ff8800;}只有带图片的卡片才会获得橙色左边框干净利落。2.2 场景二表单实时校验反馈不用 JS 监听/* 如果有无效输入框给表单加个红框 */form:has(input:invalid){border:2px solid red;padding:10px;}/* 如果有被选中的复选框给父级加个标记 */fieldset:has(input[typecheckbox]:checked){background-color:#e0ffe0;}这比以前用 JS 监听每个 input 然后给父级加类名优雅太多。2.3 场景三空状态提示/* 如果列表里没有 li显示空状态提示 */ul:not(:has(li))::after{content:暂无数据;display:block;color:#999;text-align:center;}:not(:has(...))这个组合很有用表示“没有子元素满足条件”。2.4 场景四兄弟元素的影响:has()不仅可以选祖先还可以选兄弟/* 如果 h2 后面紧跟着 p给 h2 加下划线 */h2:has( p){text-decoration:underline;}这利用了组合器 p表示“后面紧邻的 p”所以h2:has( p)就是“后面有 p 的 h2”。实际上:has()里的选择器可以往后看。2.5 场景五多级嵌套的“父选择”/* 如果某个 section 里有一个 article且 article 内有 img给 section 加背景 */section:has(article:has(img)){background:#fafafa;}这就是嵌套:has()越看越像 XPath但威力巨大。三、:has() 的“阴暗面”性能与兼容这么强大的东西有没有什么坑3.1 兼容性:has()是CSS 选择器 Level 4的一部分。它在Chrome 105、Edge 105、Firefox 121、Safari 15.4开始支持。也就是说2023 年以后的主流浏览器基本都能用。但对于老浏览器需要做降级处理比如用 JS 回退。3.2 性能考虑:has()被称为“昂贵的选择器”因为它需要检查元素的后代或后续兄弟浏览器可能需要做更多工作。但现代浏览器已经做了大量优化在合理使用下不会明显影响性能。不要滥用比如不要给每个元素都加上:has(*)这种通配。最佳实践尽量限定范围比如nav:has( a.active)比*:has(a)高效得多。3.3 一些你不能做或不应做的事不能在:has()里使用:has()自身形成循环引用理论上可以但你会把自己绕晕。不能用:has()选择祖先的祖先它可以但性能会下降。不能用:has()来改变页面结构它只是选择器只能应用样式不能添加或删除元素。四、还有哪些“逆天”的新选择器与:has()同期或稍早CSS 还引入了:where()优先级为 0用于降低选择器权重。:is()可以写一组选择器比如:is(header, main, footer) p。:not()也升级了可以接受复杂选择器列表。scope实验性功能可以限定样式的作用域。这些新特性正在把 CSS 从“声明式样式表”变成“轻量级逻辑引擎”。五、总结CSS 不再是“语言残疾”以前我们常开玩笑说“CSS 不是编程语言。”现在有了:has()CSS 居然能根据子元素来决定父元素样式这几乎就是一种“条件判断”能力。:has()的出现让我们可以少写很多 JavaScript 类名操作让样式更纯粹、更内聚。虽然兼容性还没到 100%但已经值得我们在现代项目中尝试。下次产品经理再提“根据子元素内容改变父元素样式”的需求你可以自信地说“交给 CSS不用写 JS。”每日一问你还遇到过哪些用 JS 实现很麻烦但 CSS 新特性可以轻松解决的问题评论区分享一起刷新认知

相关文章:

你还在给每个图片父元素加类名?CSS :has() 让选择器“逆天改命”

你还在给每个图片父元素加类名?CSS :has() 让选择器“逆天改命” 引言 “组长,这个需求我写不了。” “什么需求?” “产品经理说,所有包含图片的卡片,要在卡片上加一个‘带图标识’的边框。但是这些卡片是动态渲染的&…...

YOLOv11目标检测与伏羲气象模型的融合应用:灾害天气图像识别预警

YOLOv11目标检测与伏羲气象模型的融合应用:灾害天气图像识别预警 最近几年,极端天气好像越来越频繁了。有时候,一场突如其来的暴雨或浓雾,就能让整个城市的交通陷入瘫痪,甚至带来不小的经济损失。传统的天气预报&…...

3分钟搞定Mac外接显示器控制:MonitorControl完全指南

3分钟搞定Mac外接显示器控制:MonitorControl完全指南 【免费下载链接】MonitorControl MonitorControl/MonitorControl: MonitorControl 是一款开源的Mac应用程序,允许用户直接控制外部显示器的亮度、对比度和其他设置,而无需依赖原厂提供的软…...

GPT-5.4 Pro接入Java!百万上下文+电脑操控,Spring AI集成教程

文章目录前言一、先搞清楚你在驯服什么野兽二、Spring AI Alibaba是什么鬼?核心优势三、环境准备:别在JDK版本上栽跟头四、基础对话:先让AI开口说话五、百万上下文的正确打开方式六、Computer Use:让AI真的动起来实际应用场景七、…...

WeChatExporter深度解析:如何三步搞定iOS微信聊天记录完整导出

WeChatExporter深度解析:如何三步搞定iOS微信聊天记录完整导出 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 还在为无法备份微信聊天记录而烦恼吗&#xff…...

Mermaid在线编辑器:技术图表制作的高效解决方案

Mermaid在线编辑器:技术图表制作的高效解决方案 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor …...

避坑指南:Prescan8.5安装常见报错解决方案(含MATLAB集成配置)

Prescan8.5安装避坑指南:7类典型报错与MATLAB集成深度解析 当仿真工程师第一次打开Prescan8.5安装包时,很少有人能预料到接下来可能遭遇的"技术迷宫"。作为自动驾驶仿真领域的重要工具,Prescan的安装过程就像它的功能一样复杂——从…...

AI写教材必备!高效工具生成低查重教材,节省大量时间

AI教材生成工具评测与介绍 在编写教材前,选择合适的工具简直是一场“挣扎”的过程!如果用普通的办公软件,功能就显得太简单,框架和格式都需要自己一一调整;若选用专门的AI教材写作工具,操作却显得复杂&…...

从零配置YOLOv5与RealSense D405:深度测距与目标检测的完整流程指南

从零构建YOLOv5与RealSense D405的智能视觉系统:深度感知与目标检测实战手册 当计算机视觉遇上深度感知,会碰撞出怎样的火花?YOLOv5作为当前最流行的实时目标检测框架,与Intel RealSense D405深度相机结合,能够为机器…...

从串口通信到内存总线:手把手拆解‘波特率’、‘比特率’与‘总线带宽’的异同与实战计算

从串口通信到内存总线:深度解析波特率、比特率与总线带宽的实战差异 在嵌入式开发和计算机体系结构领域,数据传输速率的计算是工程师日常工作中无法绕开的基础技能。但令人困惑的是,同样的"速率"概念在不同场景下却有着完全不同的…...

Wan2.2-I2V-A14B文生视频入门必看:WebUI可视化操作+命令行示例详解

Wan2.2-I2V-A14B文生视频入门必看:WebUI可视化操作命令行示例详解 1. 快速了解Wan2.2-I2V-A14B Wan2.2-I2V-A14B是一款强大的文生视频模型,能够根据文本描述生成高质量视频内容。这个私有部署镜像专为RTX 4090D 24GB显存显卡优化,内置完整运…...

LWIP内存管理踩坑实录:从pbuf泄漏到pcb耗尽,我的嵌入式网络调试日记

LWIP内存管理踩坑实录:从pbuf泄漏到pcb耗尽,我的嵌入式网络调试日记 凌晨三点,调试器上的红色LED还在闪烁。这是我连续第三个通宵追踪LWIP的内存问题——设备在运行48小时后必然崩溃,日志里满是"pbuf_alloc failed"和&q…...

终极LxgwWenKai字体配置指南:如何为VSCode和IDEA打造完美中文编程体验

终极LxgwWenKai字体配置指南:如何为VSCode和IDEA打造完美中文编程体验 【免费下载链接】LxgwWenKai LxgwWenKai: 这是一个开源的中文字体项目,提供了多种版本的字体文件,适用于不同的使用场景,包括屏幕阅读、轻便版、GB规范字形和…...

3天快速掌握RCWA光学仿真:从零到一的完整高效指南

3天快速掌握RCWA光学仿真:从零到一的完整高效指南 【免费下载链接】Rigorous-Coupled-Wave-Analysis modules for semi-analytic fourier series solutions for Maxwells equations. Includes transfer-matrix-method, plane-wave-expansion-method, and rigorous c…...

【Zynq 进阶一】深度解析 PetaLinux 存储布局:NAND Flash 分区与 DDR 内存分配全攻略

【Zynq 进阶】深度解析 PetaLinux 存储布局:NAND Flash 分区与 DDR 内存分配全攻略 文章目录【Zynq 进阶】深度解析 PetaLinux 存储布局:NAND Flash 分区与 DDR 内存分配全攻略📝 前言📦 第一部分:大局观——NAND 与 D…...

Lobe Theme:为Stable Diffusion WebUI注入现代设计美学的终极界面解决方案

Lobe Theme:为Stable Diffusion WebUI注入现代设计美学的终极界面解决方案 【免费下载链接】sd-webui-lobe-theme 🤯 Lobe theme - The modern theme for stable diffusion webui, exquisite interface design, highly customizable UI, and efficiency …...

【PAT甲级真题】- Is It a Binary Search Tree (25)

题目来源 Is It a Binary Search Tree (25) 题目描述点击链接自行查看 注意点: 这里的二叉搜索树大于等于插到右边 思路简介 一道二叉树模板题(6202年了应该不会还有人不会写二叉树吧bushi ) 一开始想到前序遍历不可能确定一棵树还以为题目…...

QGIS 3.28 保姆级配置指南:从中文界面到高德底图,手把手搞定智驾地图工作流

QGIS 3.28 智能驾驶地图工程师开箱指南:从零构建高精度工作流 刚拿到工牌的智能驾驶地图工程师小李,面对全新的QGIS界面有些手足无措。作为空间数据处理的核心工具,QGIS的配置直接决定了后续高精地图生产的效率与精度。本文将带你完成从软件…...

SmartBMS:革新性开源智能电池管理系统技术解析

SmartBMS:革新性开源智能电池管理系统技术解析 【免费下载链接】SmartBMS Open source Smart Battery Management System 项目地址: https://gitcode.com/gh_mirrors/smar/SmartBMS 破解锂电池管理行业痛点:从安全隐患到性能瓶颈 在新能源技术飞…...

VSCode里藏着的绘图神器:Live Preview搭配Mermaid插件,边写代码边出图真香了

VSCode绘图革命:用Mermaid实现代码与图表无缝协同 在IDE里切换窗口查看流程图的日子该结束了。作为每天与代码打交道的开发者,我们早已厌倦了在Visio、ProcessOn和代码编辑器之间反复横跳的繁琐操作。Mermaid语法配合VSCode的实时预览功能,正…...

数据清洗避坑指南:缺失值和异常值处理的5个常见错误(附真实案例)

数据清洗避坑指南:缺失值和异常值处理的5个常见错误(附真实案例) 在电商平台的用户行为分析中,我们曾遇到一个诡异现象:某促销活动页面的转化率突然飙升到98%。进一步排查发现,是爬虫程序将未加载完成的页…...

从GTS-800到GTS-400:手把手教你移植C#点胶机程序到不同固高控制卡

从GTS-800到GTS-400:工业点胶系统迁移实战指南 当生产线上的点胶机控制卡需要从GTS-800更换为GTS-400时,许多工程师会发现"使用方法类似"这个说法背后隐藏着大量细节差异。去年我们团队完成了一个医疗设备点胶系统的迁移项目,原计划…...

深入解析Golang中的占位符:%w、%v、%s的应用与最佳实践

1. Golang占位符基础入门 刚开始接触Golang时,fmt包里的那些百分号开头的占位符确实让我有点懵。记得第一次看到%s、%v、%w这些符号时,我还以为是什么特殊运算符。后来在实际项目中用多了才发现,这些看似简单的占位符,其实是Gola…...

哲学家吃饭问题没搞懂?用Python模拟信号量帮你彻底理解进程同步(附可运行代码)

用Python动态模拟哲学家进餐问题:从死锁到解决方案的完整实践指南 在操作系统的学习中,哲学家进餐问题堪称进程同步与死锁的"经典案例"。这个看似简单的场景却蕴含着并发编程中最棘手的挑战——如何协调多个进程对有限资源的访问。本文将带你…...

5分钟搞定:用OpenAI Function Calling自动生成Python函数(附Gmail API实战代码)

5分钟实战:用OpenAI Function Calling生成Gmail自动化脚本 每次对接Gmail API都要翻文档写重复代码?试试这个方案——用自然语言描述需求,让AI直接生成可运行的生产级代码。下面这段完整代码就是AI生成的成果,包含错误处理、类型…...

3步搞定:如何让VR视频在普通屏幕上完美播放

3步搞定:如何让VR视频在普通屏幕上完美播放 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh_mirrors/vr/V…...

告别模糊人像:AI驱动的面部增强新方案

告别模糊人像:AI驱动的面部增强新方案 【免费下载链接】DZ-FaceDetailer a node for comfyui for restore/edit/enchance faces utilizing face recognition 项目地址: https://gitcode.com/gh_mirrors/dz/DZ-FaceDetailer 在数字图像处理领域,人…...

手柄硬件校准与操控优化:从故障排查到竞技级设置的实战手册

手柄硬件校准与操控优化:从故障排查到竞技级设置的实战手册 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 在《艾尔登法环》的 boss 战中,角色总是不受控制地缓慢…...

探索:空间网格编码SpatialGridCoding在北斗导航与地理实体管理中的应用

1. 空间网格编码:北斗导航的"数字身份证" 想象一下,当你打开手机导航时,系统如何快速锁定你的位置并规划路线?这背后离不开空间网格编码技术的支持。简单来说,空间网格编码就像给地球表面贴满二维码&#xf…...

2026年03月26日全球AI前沿动态

一句话总结全球AI领域密集发布技术、产品、企业动态,覆盖通用/垂直大模型、专项技术、智能体、机器人、硬件基建等全赛道,中国AI在视频、音乐、办公智能体领域领跑,OpenAI关停Sora战略转型,Arm、苹果、腾讯等大厂新品落地&#xf…...