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

如何实现SVG中矩形及其上方文本悬停时均触发矩形阴影效果

解决方案

问题核心是text元素层级高于rect,会拦截鼠标事件,导致rect的hover状态无法触发,可选用以下任意一种方案解决:

方案一:绑定悬停效果到父级g容器(推荐)

你之前使用g标签分组未生效,是因为没有将hover选择器绑定到g元素上。悬停在g容器的任意子元素(包括rect和text)都会触发g的hover状态,适配后续新增交互的扩展性更强。
修改后的完整代码如下:

<svg viewBox="0 0 100 100">
  <defs>
    <style>
      .slip {
        fill: blue;
      }
      .st {
        fill: white;
      }
      /* hover选择器绑定到父级g的类上 */
      .slip-group:hover .slip {
        cursor: pointer;
        -webkit-filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.7));
        filter: drop-shadow(3px 3px 2px rgba(0, 0, 0, 0.7));
      }
    </style>
  </defs>
  <g id="slips">
    <!-- 给每组矩形+文本套上带类的g容器 -->
    <g class="slip-group">
      <rect class="slip" x="10" y="10" width="80" height="50"/>
      <text class="st" x="20" y="30">1000</text>
    </g>
  </g>
</svg>

方案二:设置文本不响应鼠标事件

如果不需要给文本单独加交互,可以直接给text元素添加pointer-events: none属性,让鼠标事件直接穿透文本触发下方rect的hover效果,无需改动结构。
仅需要修改对应的css规则即可:

.st {
  fill: white;
  /* 新增该属性,让文本不拦截鼠标事件 */
  pointer-events: none;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:54:04