:has功能性伪类选择器:

    :has() 是 CSS 中的一个功能性伪类选择器,它允许开发者根据元素的后代元素、兄弟元素或后续元素的存在或状态来选择目标元素。它本质上是一个“父选择器”或“关系选择器”,解决了 CSS 长期以来无法根据子元素反向选择父元素的痛点。

核心功能与语法 :

/* 选择包含匹配子元素的父元素 */
parent:has(childSelector) {/* 样式规则 */
}/* 选择包含匹配兄弟元素的元素 */
element:has(+ siblingSelector) {/* 样式规则 */
}

关键特性详解:

1.基于后代/兄弟关系选择

  • 选择包含特定子元素的父元素:
/* 选择所有包含 <img> 子元素的 <div> */div:has(> img) {border: 2px solid blue;
}
  • 选择包含特定兄弟元素的元素:
/* 选择紧邻 <h2> 的 <div> */
div:has(+ h2) {background: yellow;
}

2.支持复杂嵌套条件

可组合其他选择器实现精细控制:

/* 选择包含 "active" 类子按钮的卡片 */
.card:has(> .btn.active) {box-shadow: 0 0 10px red;
}

3.链式调用

允许多层条件筛选:

/* 选择包含已勾选复选框的表单 */
form:has(input[type="checkbox"]:checked) {background: lightgreen;
}

实际应用场景

1.动态表单反馈

当输入框无效时高亮其父容器:

.form-group:has(:invalid) {border-left: 3px solid red;
}

2.响应图片容器

为包含图片的卡片添加特殊样式:

article:has(figure > img) {padding: 1.5em;
}

3.交互状态联动

根据子元素状态改变父元素样式:

/* 下拉菜单展开时改变按钮颜色 */
.dropdown:has(.menu:visible) > .dropdown-btn {background: #555;
}

浏览器兼容性

浏览器支持版本
Chrome105+ (2022年起)
Safari15.4+ (2022年起)
Firefox121+ (2023年起)
Edge105+
移动端浏览器主流版本均已支持

提示:在旧版浏览器中需使用 JavaScript 实现类似逻辑。

 

注意事项

  1. 性能优化
    避免在大型DOM树中使用复杂 :has() 选择器,可能影响渲染性能。

  2. 作用域限制
    不能用于匹配伪元素(如 ::before)。

  3. 组合优先级
    选择器优先级由 :has() 内部的选择器决定:

/* 优先级等效于 div.foo:has(...) */
div:has(.foo) { ... }

 

总结: 

     :has() 彻底改变了 CSS 的选择器能力,使开发者能够基于子元素状态动态控制父元素样式,大幅减少对 JavaScript 的依赖,标志着 CSS 在现代 Web 开发中的重大进步。

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

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

相关文章

深度学习8(梯度下降算法改进2)

目录 RMSProp 算法 Adam算法 学习率衰减 RMSProp 算法 RMSProp(Root Mean Square Prop)算法是在对梯度进行指数加权平均的基础上&#xff0c;引入平方和平方根。 其中e是一个非常小的数&#xff0c;防止分母太小导致不稳定,当 dw 或 db 较大时&#xff0c;(du)2,(db)2会较大&…

JAVA面试宝典 -《网络编程核心:NIO 与 Netty 线程模型详解》

网络编程核心&#xff1a;NIO 与 Netty 线程模型详解 文章目录网络编程核心&#xff1a;NIO 与 Netty 线程模型详解一、传统 BIO 模型&#xff1a;排队买奶茶的阻塞模式 &#x1f964;1.1 专业解释1.2 简单点比喻1.3 简单示例二、NIO 模型&#xff1a;智能叫号餐厅系统 &#x…

蓝桥杯 第十六届(2025)真题思路复盘解析

本文以洛谷平台所提供的题目描述及评测数据为基础进行讲解。 前言&#xff1a;这是本人的蓝桥杯试卷&#xff0c;大概排省一前40%的位置&#xff0c;实际上这届题目偏难&#xff0c;我没有做出太多的有效得分。我把当时的思路和现在学习的思路都复盘进来&#xff0c;希望给大家…

兰顿蚂蚁路径lua测试

兰顿蚂蚁local p0 local x,y,z0,7,0 local function add() local result,id Block:getBlockID(x,y,z)if id1 thenBlock:destroyBlock(x,y,z,false) pp90 elseBlock:setBlockAll(x,y,z,1,0) pp-90 end x,zx-math.floor(0.5math.sin(math.rad(p))),z-math.floor(0.5math.cos(m…

【Axure RP】什么是Axure?Axure可以用来做什么?

【Axure RP】什么是Axure&#xff1f;Axure可以用来做什么&#xff1f; 目录【Axure RP】什么是Axure&#xff1f;Axure可以用来做什么&#xff1f;Axure RP简介Axure RP 是什么&#xff1f;Axure RP核心功能和应用场景Axure RP简介 Axure RP 是什么&#xff1f; Axure RP 是一…

Java项目:基于SSM框架实现的畅玩北海旅游网站管理系统【ssm+B/S架构+源码+数据库+毕业论文】

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本畅玩北海旅游网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

NuxtJS中网络请求模块的封装与最佳实战

在网络开发中&#xff0c;封装一个简洁、高效的网络请求模块对于项目的可维护性和扩展性至关重要。本文将详细介绍如何在NuxtJS中封装一个通用的网络请求模块&#xff0c;并结合最佳实践来说明如何使用它来进行网络请求。良好的代码结构和封装&#xff0c;不但结构清晰还能够大…

云归子批量混剪软件批量剪辑软件批量分割视频更新记录

www.yunguizi.com 优化显卡硬件加速配置 ⚡ 优化 2025年07月07日 版本 v1.1.6 优化显卡硬件加速配置 修复了一些重要内容 &#x1f41b; 修复 2025年07月06日 版本 v1.1.6 修复了一些重要内容 重构读写机制 ⚡ 优化 2025年07月06日 版本 v1.1.6 优化了一些重要内容&#xff1b;…

SpringBoot校园外卖服务系统设计与实现源码

概述 基于SpringBoot开发的校园外卖服务系统&#xff0c;实现了从外卖管理到订单处理的全流程数字化解决方案&#xff0c;包含外卖管理、订单处理、用户管理等全方位功能。 主要内容 核心功能模块&#xff1a; ​​个人信息管理​​&#xff1a; 修改密码个人信息修改 ​​…

东软8位MCU低功耗调试总结

简介主控选用8位ES7P7021&#xff0c;应用于磁吸无线充电场景&#xff0c;有一个双向C口&#xff08;IP5219&#xff09;&#xff0c;MCU控制电量灯显示&#xff0c;通过IIC控制C口的降额&#xff0c;插入TYPE-C线之后有一个外部中断信号&#xff0c;触发MCU唤醒&#xff0c;开…

什么是 3D 文件?

3D 文件是 3D 对象的数字表示形式&#xff0c;可以在计算机辅助设计 &#xff08;CAD&#xff09; 软件中创建或编辑。它们包含有关物体的形状、大小和结构的信息&#xff0c;对 3D 打印过程至关重要。3D 文件格式允许在不同的程序和打印机之间交换 3D 模型&#xff0c;并确定模…

语言模型 RLHF 实践指南(一):策略网络、价值网络与 PPO 损失函数

在使用 Proximal Policy Optimization&#xff08;PPO&#xff09;对语言模型进行强化学习微调&#xff08;如 RLHF&#xff09;时&#xff0c;大家经常会问&#xff1a; 策略网络的动作概率是怎么来的&#xff1f;价值网络的得分是如何计算的&#xff1f;奖励从哪里来&#xf…

日常--记一次gitlab Runner配置与CI/CD环境搭建流程

文章目录一、前言二、相关知识1.相关定义1.什么是 CI&#xff1f;2.什么是 CD&#xff1f;2.CI/CD 构建块与工具链3.为什么要使用 CI/CD&#xff1f;三、准备四、实现1.Runner安装与配置1.更新源2.安装Runner3.注册Runner4.启动Runner5.查看Runner信息2.CI/CD流程测试1.CI/CD构…

东方仙盟AI数据中间件使用教程:开启数据交互与自动化应用新时代——仙盟创梦IDE

一、启动未来之窗AI 二、初始化数据接口三、便捷接口数据进入东方仙盟获取接口标准四、同步参数仙界界牌&#xff0c;冥界界牌&#xff0c;仙盟界牌 五、开始同步六、东方仙盟青云剑魂架构在当今数字化浪潮下&#xff0c;数据的采集、处理与传输成为众多应用场景的核心需求。而…

Rust 仿射类型(Affine Types)

在 Rust 中&#xff0c;仿射类型&#xff08;Affine Types&#xff09; 是所有权系统的理论基础&#xff0c;它规定了每个值有且仅有一次使用机会。这与线性类型&#xff08;必须恰好使用一次&#xff09;有所不同&#xff0c;允许值未被使用就被丢弃。Rust 中的仿射类型核心特…

python库 arrow 库的各种案例的使用详解(更人性化的日期时间处理)

文章目录 一、arrow概述1.1 arrow介绍1.2 安装 arrow1.3 注意事项二、基本使用2.1 创建 Arrow 对象2.2 格式化输出2.3 时间运算三、高级功能3.1 时区处理3.2 时间范围3.3 时间间隔四、实际应用案例4.1 日志时间处理4.2 会议时间提醒4.3 国际化时间显示5. Arrow 与 datetime 互操…

window 服务器上部署前端静态资源以及nginx 配置

最近搞了一台境外服务器 这种境外服务器是不可以配置域名的 但是可以使用ip访问 但是如果需要 配置 需要下载nginx nginx: download 我这个是windows 的 服务器 所以下载windows 的nginx 下载完成以后 这个里面的html 文件 就是前端项目 里面必须要有index.html文件 部署…

行业实践案例:医疗行业数据治理的挑战与突破

“医疗数据不仅是资源,更关乎生命。” ——医疗行业的数据治理,是合规、安全、质量与智能化的多重挑战。 📘 本文目录 为什么医疗行业亟需数据治理? 医疗行业数据治理的独特挑战 医疗数据治理体系设计原则 关键能力模块与实践案例 工具选型与落地建议 总结与下一步 1️⃣ …

单细胞转录组学和空间转录组学数据的整合方法

文章目录问题1&#xff1a;现有技术是否可以拿取固定数目的细胞进行组合形成spot问题2&#xff1a;是否有关于这方面的研究问题3&#xff1a;相关论文推荐一、细胞反卷积的核心目标与挑战二、单细胞与空间转录组数据的整合方法分类1. 概率型方法&#xff08;Probabilistic-base…

【Java EE】SpringBoot 配置文件、日志和单元测试

1. 什么是配置文件在我们的计算机上诸如 C:/Users&#xff0c;C:/Windows&#xff0c;.config&#xff0c;.xml 都是配置文件&#xff0c;配置文件主要为了解决硬编码带来的问题。硬编码是将数据直接写在程序的源代码中&#xff0c;代码写死后再想改变就很麻烦。因此&#xff0…