动态修改svg图片颜色

使用场景

引入颜色为纯色的svg图片时,动态修改svg图片填充颜色。引入的方式包括直接svg代码引用和img标签间接引用。

直接引用SVG

如果通过svg代码的方式引入图片,那么可以直接修改fill属性动态修改颜色。代码如下

	  <style>
        svg:hover{
            fill: #fa0;
        }
    </style>
    <div class="container">
        <svg t="1661261007730" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1771" width="200" height="200"><path d="M512.64 645.12a153.6 153.6 0 0 1-153.6-153.6 39.04 39.04 0 0 1 77.44 0 76.16 76.16 0 1 0 152.32 0 39.04 39.04 0 0 1 77.44 0 153.6 153.6 0 0 1-153.6 153.6z" fill="#445365" p-id="1772"></path><path d="M928 354.56A112.64 112.64 0 0 0 810.24 256h-67.84V192a128 128 0 0 0-124.8-128H405.76a128 128 0 0 0-124.8 128v64h-64a112.64 112.64 0 0 0-120.96 98.56l-23.68 496a97.92 97.92 0 0 0 28.16 72.32A122.88 122.88 0 0 0 192.64 960h640a123.52 123.52 0 0 0 90.24-37.12 97.92 97.92 0 0 0 28.16-72.32zM357.76 192a48.64 48.64 0 0 1 48-48h211.84a48.64 48.64 0 0 1 48 48v64H357.76zM213.76 330.88h596.48c23.68 0 40.32 14.08 40.96 26.88l4.48 95.36H168.32l4.48-95.36c0.64-12.8 19.84-26.88 40.96-26.88z m654.08 538.88a46.72 46.72 0 0 1-33.92 13.44H192.64a46.72 46.72 0 0 1-33.92-13.44 20.48 20.48 0 0 1-7.04-15.36l15.36-323.84h692.48l15.36 323.84a18.56 18.56 0 0 1-7.04 15.36z" fill="#445365" p-id="1773"></path></svg>
    </div>

需要注意的是该SVG代码中不能含有fill属性值,如果有的话则需要手动删除。
在这里插入图片描述
也有的SVG图片通过clss类来设置填充颜色,此时只要设置的style样式层级比该类更高就可以修改成功。比如:
在这里插入图片描述

通过img标签引用SVG

若通过img标签引入SVG,则无法直接改变SVG填充色。此时可以使用一个很妙的主意:利用滤镜filter并设置drop-shadow再造一个图片,并把原来的图片遮挡住不显示。
filter是css3的一个属性,用于定义元素(通常是 )的视觉效果。比如定义图像模糊度(blur)、亮度(brightness)、对比度(contrast)等。而drop-shadow用于生成投影效果。
drop-shadow语法如下图所示:

filter: drop-shadow(x偏移 y偏移 模糊大小 色值)

drop-shadow产生的效果实际上可以看作投影[1]。由于SVG图里的图纹是透明的,因此可以再生成一个相同形状的图片效果。比如

filter: drop-shadow(blue 200px 0);

产生的效果如图所示
在这里插入图片描述
生成想要的阴影图后,只需要再把原图隐藏掉就可以了。可以通过transform的translate属性偏移原图,并将父元素设置overflow为hidden。
代码示例如下:

   <style>
        .container{
            width: 800px;
            height:300px;
            display: flex;
            align-items: center;
            justify-content: center;
            background-color: aliceblue;
        }
        .container:hover{
            background-color:lightblue;
            overflow: hidden;
        }
        .svg-img{
            width: 200px;
            height: 200px;
        }
        .svg-img:hover{
            transform: translateX(-500px);
            filter: drop-shadow(blue 500px 0);
        }
    </style>
    <div class="container" >
      <img class="svg-img" src="../assets/岗位管理.svg" alt="">
    </div>

效果如右图所示:
在这里插入图片描述
在这里插入图片描述

参考链接

[1].详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值