踩坑日记 svg 颜色更改失败

前言

最近入职了新公司,感觉还不错,还在熟悉阶段。

然后刚来两天就遇到一个小问题,封装的svg组件在处理某个svg图片时,无法修改svg图片的颜色。

类似这种:

鼠标移动上去之后

但是有一个svg图片,在svg组件中使用时,无法改变其svg图片颜色。

问题排查

在了解svg图片为什么无法改变颜色之前,我们先了解svg的使用环境。

这个svg图片是使用在一个封装的svg组件中,使用如下:

html 复制代码
<svg>
    <use xlink:href="SVG路径"></use>
</svg>

改变颜色的方法则是通过修改svg标签的style属性,如:

html 复制代码
<svg style={fill: color}>
    ...
</svg>

可以看到这里的样式是通过 style 直接注入的

那这个样式最后为什么会影响svg图片呢?又为什么某些svg图片不会被这些样式影响呢?

所以这里我们来看看异常的svg图片的代码是怎么样子的(无关紧要的内容已删除)。

首先svg是矢量图,浏览器通过svg图片中的路径信息,进行绘制,因此这里修改的实际上就是 fill 的值即填充的颜色

然后通过阅读代码,我们可以看到path 路径中,默认补充了fill的值,而我们通过style的方法修改fill 是影响path的父元素,通过继承父亲样式的方式,以期更改样式,如果默认补充了fill的值,那么就不会使用基础的内容。

因此无法影响svg颜色的原因就确定了,因为默认填充了颜色。

问题解决

原因排查清楚之后,问题解决也就轻而易举了。

我们可以将默认的fill填充提取到svg标签中,Path通过继承svg标签的fill来确定颜色,保证svg组件更改颜色的时候,可以更改到fill填充色。

改动大致如下:

总结

到此问题修复完毕,如果用户朋友们遇到svg无法改变颜色的情况,不妨尝试排查下这方面。

下次见!

相关推荐
梦帮科技2 小时前
GRAVIS v4.0:基于Web的极速套利架构设计与实时数据流实现
前端·人工智能·rust·自动化·区块链·智能合约·数字货币
爱勇宝3 小时前
办公资料反复修改、补传、交接混乱,我做了个桌面工具来解决这件事
前端·后端·程序员
微信开发api-视频号协议4 小时前
企业微信外部群开发自动化实践过程
java·前端·微信·自动化·企业微信·ipad
甲维斯4 小时前
Fable5:20美金的顶级设计师!
前端·人工智能
kyriewen4 小时前
我同时用了 Claude Code、Cursor 和 Codex,说说三个工具的真实差距——2026 年选错工具比不用 AI 更浪费时间
前端·ai编程·claude
Jackson__4 小时前
为了拯救我的腰椎和颈椎,我做了款浏览器插件!
前端·javascript·开源
闲猫4 小时前
Python FastAPI + SQLAlchemy 入门教程:从零搭建你的第一个 Web 应用
前端·python·fastapi
林小帅5 小时前
NestJS v11 + Prisma v7 ESM 迁移配置解析
前端·javascript·后端
IT_陈寒5 小时前
React的setState竟然不是立刻生效的,害我调试半天
前端·人工智能·后端
简简单单就是我_hehe5 小时前
前端埋点日志解决方案:完整 User-Agent 解析工具实现,爬虫识别、设备品牌、操作系统、浏览器版本全解析(附完整源码)
前端·爬虫