公司一直使用svg作为字体图标,从一开始我使用svg字体图标的方式也是通过img标签引入的,直到最近公司做的业务有个附件预览需求是这样的:展示几种不同的样式,当预览的附件里面没有数据和有数据的时候svg图标展示的样式不一样,鼠标移入的时候,又展示不同的样式图标,一开始感觉就是把所有要展示的svg图标切出来就行了,但是后来发现有几种图标没有,
如图,其中的模板有数据时,和鼠标经过-无数据悬停态的时候的svg图标没有,于是我和ui就去要了一下图标,但是ui说svg可以改颜色,并让我按照这个改下就行,不必要再切图了,
我发现按照这样的方式改是不可以的,因为我用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图片路径
? import { ReactSVG } from "react-svg";
import deleteSvg from "static/images/delete_icon.svg"; //这里应该是你自己的svg图标路径 -
在render中进行渲染
<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就可以正常使用了, -
最终展示的效果
-
改变填空颜色 ? //改变svg大小
.wrapper svg {
width: 200px;
height: 200px;
}
.wrapper path {
//改变填充颜色
fill: aqua;
height: 190px;
// stroke: darkmagenta;
width: 190px;
} ? 更多api的使用可以去访问github源码查看,react-svg 关于样式的修改建议看external stylesheet里面的demo, ? ?
|