You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用纯(S)CSS实现hover时修改无关联div的样式

是否存在纯(S)CSS方案,hover某元素时修改无关联div的样式?

用户原实现代码如下:

原SCSS代码

.blue,.green {
  width: 5rem;
  height: 3rem;
  margin: 1rem;
}

.blue {
  background-color: blue;
}

.green {
  background-color: green;
  &:hover {
    background-color: lightgreen;
  }
  &:hover .blue {
    background-color: lightblue; // 尝试修改.blue的样式
  }
}

原HTML代码

<div>
  <div class="blue" />
</div>

<div>
  <div class="green" />
</div>

解答

可以实现,需要使用CSS的:has()伪类,目前所有主流现代浏览器均已支持该特性。
你原来的写法不生效是因为Sass编译后的选择器.green:hover .blue属于后代选择器,只会匹配.green内部嵌套的.blue子元素,你的DOM结构中两个元素既没有嵌套关系也不是兄弟节点,自然无法命中。

修复后的SCSS代码

.blue,.green {
  width: 5rem;
  height: 3rem;
  margin: 1rem;
}

.blue {
  background-color: blue;
}

.green {
  background-color: green;
  &:hover {
    background-color: lightgreen;
  }
}

/* 核心逻辑:当页面内存在处于hover状态的.green元素时,修改所有.blue元素的背景色 */
body:has(.green:hover) .blue {
  background-color: lightblue;
}

HTML代码无需做任何调整即可生效。

兼容说明

如果需要兼容不支持:has()的旧版浏览器(如IE、2022年之前发布的Safari版本),没有纯CSS实现方案,需要通过JavaScript监听mouseenter和mouseleave事件来修改.blue的样式。


内容的提问来源于stack exchange,提问作者AlwaysLearning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:06:05