CSS :has与:not(:has(*))组合选择器无法生效的问题咨询
问题:组合
:has()与:not()选择器失效的原因及解决 元素结构
<div class="general"> <div class="general-container"> <div class="general-grid"> <div class="general-wrapper"></div> </div> </div> </div>
需求
当.general-wrapper无任何子元素时,隐藏.general容器。
已验证的有效代码
- 给无内容的
.general-wrapper设置红色背景,生效正常:
.general-wrapper:not(:has(*)) { background-color: red; }
- 匹配包含
.general-wrapper的.general-container并设置绿色背景,生效正常:
.general-container:has(.general-wrapper) { background-color: green; }
无效的组合代码
将两者组合后,无法实现隐藏效果:
.general-container:has( .general-wrapper:not(:has(*) ) ) { display:none; // 本该隐藏但实际仍显示 }
问题原因
你写的组合选择器存在语法错误::not()内部的:has(*)后面多了一个多余的空格,导致整个选择器解析失败。另外注意,你的需求是隐藏.general容器,但当前选择器的目标是.general-container,若要匹配需求还需调整选择器层级。
正确写法
- 修正语法错误,去掉多余空格(隐藏
.general-container):
.general-container:has(.general-wrapper:not(:has(*))) { display: none; }
- 若要隐藏最外层的
.general容器(符合你的核心需求):
.general:has(.general-wrapper:not(:has(*))) { display: none; }
这样就能正常实现:当.general-wrapper没有任何子元素时,隐藏指定容器。
内容的提问来源于stack exchange,提问作者Redox
相关产品推荐
相关产品推荐

