使用带类选择器参数的:has伪类能否实现相同样式效果?
结论很明确:不能。两者的匹配逻辑完全不同,具体区别如下:
nav.HasThis:直接匹配自身带有.HasThis类的<nav>元素,这正是你需要的场景——当<nav>自己有这个类时,设置红色背景。nav:has(.HasThis):匹配的是内部包含带有.HasThis类后代元素的<nav>元素,和<nav>自身是否有这个类无关。
代码示例对比
1. nav.HasThis生效的场景
<nav class="HasThis">我是自身带.HasThis类的nav</nav>
对应的CSS:
nav.HasThis { background-color: red !important; }
此时这个<nav>的背景会变成红色,符合你的需求。
2. nav:has(.HasThis)生效的场景
<nav> <span class="HasThis">我是nav的子元素,带.HasThis类</span> </nav>
对应的CSS:
nav:has(.HasThis) { background-color: red !important; }
此时这个<nav>的背景会变红,但前提是它的后代里有带.HasThis类的元素,而不是<nav>自己有这个类。
如果你的<nav>只是自身带有.HasThis类,没有带这个类的后代元素,那么nav:has(.HasThis)不会匹配它,自然也不会设置红色背景。
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

