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


相关文章
Vue3中怎么监听store中的数据变化
Vue3中怎么监听store中的数据变化
|
Web App开发 前端开发 iOS开发
CSS嵌套:告别选择器地狱的新魔法!
CSS嵌套:告别选择器地狱的新魔法!
|
8月前
|
数据采集 数据挖掘 API
1688品类API:市场趋势分析,选品更精准!
借助1688品类API,获取商品类目、价格、销量、供应商等数据,通过热度、价格、增长性、竞争度和趋势五大维度分析,实现科学选品。结合Python技术抓取与处理数据,助力精准决策,提升电商竞争力。(239字)
|
JavaScript 安全
利用宝塔面板搭建nodejs网站(不使用pm2)
面板-安全-添加端口规则,这里步骤3中的端口。
1464 3
|
供应链 数据可视化 安全
如何用低代码平台自己开发一个进销存的系统?
本文介绍了如何利用低代码平台(如简道云)快速搭建企业进销存系统,解决传统ERP成本高、灵活性差的问题。内容涵盖适用场景、核心模块设计(商品信息、采购入库、销售出库)、库存看板与权限设置,并提供时间与成本参考,助力小团队高效实现个性化管理。
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
7667 1
|
存储 缓存 开发工具
Git stash命令的详细使用说明及案例分析。
通过上述案例,我们看到stash命令能够在不丢失进度的情况下,帮助开发者临时切换开发上下文,这在处理多个任务或紧急bug时特别有用。正确使用Git stash可以大大提高开发的灵活性和效率。
2765 0
|
存储 缓存 JavaScript
npm link 与 pnpm link 的用法以及不同之处
npm link 与 pnpm link 的用法以及不同之处
2118 0
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
2162 9
|
JavaScript
基于Vue2或Vue3实现任意上下左右拖拽悬浮的元素,且配置为自定义的全局指令
这篇文章介绍了如何在Vue 2或Vue 3项目中实现一个自定义的全局指令`v-dragSwitch`,用于创建可以任意方向拖拽并悬浮的元素,同时包含边界处理的逻辑。
4618 2
基于Vue2或Vue3实现任意上下左右拖拽悬浮的元素,且配置为自定义的全局指令

热门文章

最新文章