公司一直使用svg作为字体图标,从一开始我使用svg字体图标的方式也是通过img标签引入的,直到最近公司做的业务有个附件预览需求是这样的:展示几种不同的样式,当预览的附件里面没有数据和有数据的时候svg图标展示的样式不一样,鼠标移入的时候,又展示不同的样式图标,一开始感觉就是把所有要展示的svg图标切出来就行了,但是后来发现有几种图标没有,
![](https://img-blog.csdnimg.cn/ba8847234c674e46841bb181c38047c1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6aqo54Gw57qn5YmN56uv6I-c6bif5a6e5Lmg55Sf,size_8,color_FFFFFF,t_70,g_se,x_16)
如图,其中的模板有数据时,和鼠标经过-无数据悬停态的时候的svg图标没有,于是我和ui就去要了一下图标,但是ui说svg可以改颜色,并让我按照这个改下就行,不必要再切图了,
![](https://img-blog.csdnimg.cn/0b695728de684a67b034e07dd3b39864.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6aqo54Gw57qn5YmN56uv6I-c6bif5a6e5Lmg55Sf,size_20,color_FFFFFF,t_70,g_se,x_16)
我发现按照这样的方式改是不可以的,因为我用svg都是使用img的src属性引入的,并不能渲染成svg标签,用fill属性也不起作用,后来我找到了这样的一个方法把问题解决了,可以改变svg的字体颜色了,
<div class="image">
<img src="1.svg" />
</div>
?
.image{
display: inline-block;
overflow: hidden;
}
img{
position: relative;
left: -80px;
filter: drop-shadow(#ffffff 80px 0);
}
后来,我在网上偶然看见了一个react-svg库,使用起来挺简单的,而且别人封装好的库,里面api提供的也比较全,还可以把切出来且引入的svg图片渲染成svg标签,接下来说一下我使用react-svg的流程:
- 首先执行
npm i react-svg 引入react-svg库 -
引入ReactSVG和使用的svg图片路径
![](https://img-blog.csdnimg.cn/92675b502e594c8091ade7fed7e99906.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6aqo54Gw57qn5YmN56uv6I-c6bif5a6e5Lmg55Sf,size_13,color_FFFFFF,t_70,g_se,x_16) ? import { ReactSVG } from "react-svg";
import deleteSvg from "static/images/delete_icon.svg"; //这里应该是你自己的svg图标路径 -
在render中进行渲染
![](https://img-blog.csdnimg.cn/690997fa6d824253bb3cf51193965a42.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6aqo54Gw57qn5YmN56uv6I-c6bif5a6e5Lmg55Sf,size_17,color_FFFFFF,t_70,g_se,x_16) <div className="demo-svg">
<ReactSVG
className="wrapper"
onClick={() => {
console.log("wrapper onClick");
}}
src={deleteSvg}
wrapper="a"
beforeInjection={(svg) => {
svg.classList.add('svg-class-name')
svg.setAttribute('style', 'fill: red')
}}
/>
</div> ?直接在react的render函数中只用就行了,正常来说只需要用到src就可以正常使用了, -
最终展示的效果
![](https://img-blog.csdnimg.cn/06195d3a488b4967825c938f8d3c0d7a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6aqo54Gw57qn5YmN56uv6I-c6bif5a6e5Lmg55Sf,size_20,color_FFFFFF,t_70,g_se,x_16) -
改变填空颜色 ? //改变svg大小
.wrapper svg {
width: 200px;
height: 200px;
}
.wrapper path {
//改变填充颜色
fill: aqua;
height: 190px;
// stroke: darkmagenta;
width: 190px;
} ![](https://img-blog.csdnimg.cn/8c317987dc6a417ba80214c8ffb86af1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6aqo54Gw57qn5YmN56uv6I-c6bif5a6e5Lmg55Sf,size_20,color_FFFFFF,t_70,g_se,x_16) ? 更多api的使用可以去访问github源码查看,react-svg 关于样式的修改建议看external stylesheet里面的demo,![](https://img-blog.csdnimg.cn/c9c412ee3e554240b313df323bbe7760.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6aqo54Gw57qn5YmN56uv6I-c6bif5a6e5Lmg55Sf,size_16,color_FFFFFF,t_70,g_se,x_16) ? ?
|