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

为什么SVG悬停brightness效果仅对第一个path路径生效?

问题原因与解决方案

1. 第二个半圆hover无响应的问题

核心原因是路径事件捕获规则受层叠关系影响:你的SVG路径绘制顺序是.cls-1在前、.cls-2在后,.cls-2的路径边界框覆盖了整个SVG视口,即便未填充的透明区域,部分浏览器也会错误捕获hover事件,遮挡住下层路径的事件响应。
修复方案:给所有路径添加pointer-events: fill配置,仅让路径的填充区域响应鼠标事件即可:

svg path {
  pointer-events: fill;
}
.cls-1:hover, .cls-2:hover {
  filter: brightness(140%);
}

2. 外部CSS修改填充色被SVG内部样式覆盖的问题

SVG <defs> 内定义的样式和外部CSS同类选择器优先级相同,遵循「后定义生效」的规则,如果你的外部CSS加载顺序早于SVG内部样式,就会被覆盖。
修复方案:使用更高优先级的选择器即可覆盖内部样式,比如添加标签名限定:

/* 优先级高于内部的 .cls-1 选择器 */
svg .cls-1 {
  fill: #自定义颜色值;
}
svg .cls-2 {
  fill: #自定义颜色值;
}

完整可运行示例代码

svg path {
  pointer-events: fill;
}
/* 悬停发光效果 */
svg .cls-1:hover, svg .cls-2:hover {
  filter: brightness(140%);
}
/* 自定义填充色,不需要可以删除 */
svg .cls-1 {
  fill: #fbb03b;
}
svg .cls-2 {
  fill: #f0f;
}
<div class="container">
<svg id="Layer_3" data-name="Layer 3" height="500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 177.63 166.83">
  <path class="cls-1" id="hcircle" d="M739.09,372.27a90.19,90.19,0,1,1-135-98.74l10.22,17a70,70,0,1,0,104.17,76.57Z" transform="translate(-561.46 -273.53)"/>
  <path class="cls-2" d="M696.06,297.36l-13.14,15a50,50,0,1,1-74.52,65.35l-16.53,11a70,70,0,1,0,104.19-91.39Z" transform="translate(-561.46 -273.53)"/>
</svg>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:21:01