You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用CSS为非内联SVG图片设置fill填充颜色?

如何用CSS为<img>引入的SVG设置fill颜色(无需内联)

这个问题很常见——当用<img>标签引入SVG时,外部CSS确实没法直接修改它的fill属性,原因是浏览器把<img>里的SVG当作独立的外部资源,CSS样式无法穿透这个隔离层。下面给你几个不用内联SVG的解决方案:

方案1:使用CSS滤镜(Filter)快速调整颜色

如果你的需求是快速改变SVG的颜色,不需要完全精准匹配,可以用CSS的filter属性。通过组合hue-rotatesaturateinvert等滤镜函数,能把原SVG的颜色转换成目标色。

比如你想把原灰色的SVG改成rgb(18, 136, 222)(蓝色),可以用这套滤镜:

.svg {
  filter: invert(39%) sepia(90%) saturate(1800%) hue-rotate(190deg) brightness(95%) contrast(90%);
}

你可以通过调整这些参数,或者用在线滤镜生成工具来匹配你想要的颜色。

优缺点:优点是不用修改SVG文件或HTML结构;缺点是颜色调整不够精准,适合对颜色要求不高的场景。

方案2:使用SVG Sprite(推荐)

SVG Sprite是把多个SVG整合到一个文件中,用<use>标签引用,这种方式能让CSS直接控制fill属性,还能复用SVG资源。

步骤:

  1. 创建Sprite文件
    新建一个sprites.svg文件,把你的文件夹SVG用<symbol>包裹,去掉原有的fill样式(或者改成currentColor),并设置唯一的id
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
      <symbol id="folder" viewBox="0 0 25 19" version="1.1" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
        <g transform="matrix(1,0,0,1,-87.34,-350.89)">
          <g transform="matrix(1,0,0,0.947605,-375.66,-124.574)">
            <g id="Mail-Icon" transform="matrix(1,0,0,1.05529,-47.0001,-2366.53)">
              <path d="M532.5,2737L511.5,2737C510.672,2737 510,2736.33 510,2735.5L510,2719.5C510,2718.67 510.672,2718 511.5,2718L518.065,2718L518.065,2720L532.5,2720C533.329,2720 534,2720.67 534,2721.5L534,2735.5C534,2736.33 533.329,2737 532.5,2737ZM531,2724L531,2722.43L513,2722.44L513,2724L531,2724Z" />
            </g>
          </g>
        </g>
      </symbol>
    </svg>
    
  2. 在HTML中引用Sprite
    替换原来的<img>标签为<svg>+<use>组合:
    <svg class="svg" viewBox="0 0 25 19">
      <use href="assets/images/sprites.svg#folder"></use>
    </svg>
    
  3. 用CSS控制fill
    现在直接给.svg类设置fill就生效了:
    .svg {
      fill: rgb(18, 136, 222);
    }
    

优缺点:优点是样式控制灵活,支持hover等交互效果,还能复用多个SVG;缺点是需要调整HTML结构和创建Sprite文件。

方案3:修改SVG文件的fill属性为currentColor

如果允许修改原SVG文件,这是最简单的方法:

步骤:

  1. 编辑原SVG
    打开folder.svg,把<path>里的style="fill:rgb(131,147,167);"改成style="fill:currentColor;"(或者直接删除fill样式,让它继承)。
  2. 用CSS控制颜色
    <img>标签设置color属性,SVG会继承这个颜色作为fill值:
    .svg {
      color: rgb(18, 136, 222);
    }
    

优缺点:优点是操作简单,不用改HTML结构;缺点是需要修改SVG文件,部分旧浏览器可能对外部SVG的currentColor支持不佳。

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

火山引擎 最新活动