.card:has(img) - 选中包含图片的卡片
input:has(:placeholder-shown) - 选中空输入框
li:has(a[aria-current]) - 选中当前页导航项
.card:has(.btn:hover) - 子按钮悬停时卡片变化
h2:has(+ p) - 选中后面紧跟段落的标题
.container:has(.active) - 选中含.active的容器
这张卡片包含img标签
这张卡片没有img标签
也包含img标签
没有img但有其他内容
全球支持率: 92%+ (2024)
CSS :has()选择器是CSS Selectors Level 4中引入的关系型伪类,被称为"CSS父选择器"。它允许你根据元素内部或后续兄弟元素的内容来选择元素,彻底改变了CSS只能从上到下选择的限制。
:has(选择器列表) — 当元素匹配选择器列表中的任一选择器时,:has()伪类生效。
:has()是CSS4新增的关系型伪类选择器,允许根据子元素或后续兄弟元素的存在来选择父元素。它被称为'父选择器',是CSS中最受期待的功能之一。
:has()选择器已被所有主流浏览器支持:Chrome 105+、Firefox 121+、Safari 15.4+、Edge 105+。全球浏览器支持率超过92%。
常规CSS选择器是从上到下(父→子)选择,而:has()可以从下到上(子→父)选择。例如 .card:has(img) 可以选中包含img的.card元素,这在以前只能用JavaScript实现。
简单场景下:has()性能很好。但复杂的:has()嵌套(如:has(:has()))或在大DOM树上使用可能影响渲染性能。建议避免深层嵌套,限制:has()中的选择器复杂度。
完全安全。所有CSS代码解析和预览在浏览器本地完成,不发送任何数据到服务器,不存储任何代码。关闭页面后数据自动清除。