CSS :has() 选择器:改变游戏规则的父选择器

简介: CSS :has() 选择器:改变游戏规则的父选择器

CSS :has() 选择器:改变游戏规则的父选择器

前端开发者常面临「父元素根据子元素状态变化」的挑战。2025年主流浏览器全面支持的 :has() 选择器终于解决了这个痛点!

🔥 核心能力

/* 当卡片包含被聚焦的输入框时 */
.card:has(input:focus) {
   
  border-color: #3a86ff;
  box-shadow: 0 0 0 3px rgba(58, 134, 255, 0.3);
}

/* 当列表项包含删除按钮时 */
li:has(button.delete) {
   
  background: #fff5f5;
}

/* 图片容器中有加载失败图片时 */
.figure:has(img:broken)::after {
   
  content: "图片加载失败";
  color: #e53e3e;
}

🚀 四大实战场景

  1. 表单交互增强
    根据子输入框状态动态改变父容器样式,无需JS监听

  2. 空状态检测

    .cart:has(.empty-state) {
         
      display: flex; /* 购物车为空时启用居中布局 */
    }
    
  3. 自动化错误处理
    实时检测图片/视频加载失败并显示备用内容

  4. 组件级条件渲染
    替代部分React条件渲染场景,减少虚拟DOM操作

⚠️ 性能优化建议

  • 避免在滚动容器中过度使用(如 :has(.complex-selector)
  • 与CSS Containment配合使用:
    .optimized {
         
      container-type: size;
    }
    .optimized:has(.target) {
          ... }
    
  • 在Chromium 105+/Safari 15.4+优先启用

💡 对比JS方案优势

方案 代码量 渲染性能 可维护性
JS DOM监听 25行 60fps
:has() 3行 120fps ✅✅

":has() 让CSS具备了声明式父子关系处理能力,是近五年最重要的CSS革新之一" —— Chrome团队访谈 2025


相关文章
|
JavaScript 前端开发
Node.js中的EventEmitter模块:基本概念、使用方法和常见应用场景
Node.js中的EventEmitter模块:基本概念、使用方法和常见应用场景
441 0
|
存储
uniApp监听左右滑动事件
uniApp监听左右滑动事件
1319 0
|
11月前
|
Web App开发 前端开发 iOS开发
CSS嵌套:告别选择器地狱的新魔法!
CSS嵌套:告别选择器地狱的新魔法!
|
11月前
|
缓存 监控 前端开发
告别卡顿!3大前端性能优化魔法 + CSS容器查询实战
告别卡顿!3大前端性能优化魔法 + CSS容器查询实战
346 95
|
12月前
|
人工智能 自然语言处理 监控
2025年如何通过SOP工具实现流程标准化?详解6大构建步骤及7款软件选型指南
标准作业程序(SOP)是企业核心知识资产与效率引擎,其科学构建和高效落地成为2025年数字化转型的关键。本文解析SOP全生命周期流程,探讨可视化技术对流程管理的赋能,并推荐7款智能工具。从概念到实施,SOP助力企业实现技术储备、效率提升与风险防控。通过动态协同、富媒体化及AI增强,企业可在高效与创新间取得平衡,构建可持续竞争优势。
4127 2
|
JavaScript 安全
利用宝塔面板搭建nodejs网站(不使用pm2)
面板-安全-添加端口规则,这里步骤3中的端口。
1389 3
|
前端开发 数据处理
对象数据的读取,看这一篇就够了!Object.keys()、Object.values()和Object.entries()用法详解;如何获取对象原型链上的属性
Object.keys()、Object.values()和Object.entries()都是利于对象操作的便捷方法,能有效提升数据处理的效率。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
7593 1
|
JavaScript
基于Vue2或Vue3实现任意上下左右拖拽悬浮的元素,且配置为自定义的全局指令
这篇文章介绍了如何在Vue 2或Vue 3项目中实现一个自定义的全局指令`v-dragSwitch`,用于创建可以任意方向拖拽并悬浮的元素,同时包含边界处理的逻辑。
4507 2
基于Vue2或Vue3实现任意上下左右拖拽悬浮的元素,且配置为自定义的全局指令

热门文章

最新文章