具有不同渐变颜色的可重用 SVG

Mr_*_*een 3 html css svg gradient linear-gradients

根据我的要求,我需要在其中应用不同渐变颜色的成形路径。仅举个例子,我正在绕一个圈并尝试做同样的事情。

这是代码:

.box--blue{
  fill: blue;
}

.box--red{
  fill: red;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <svg>
    <defs>
      <linearGradient id="Gradient2" x1="0" x2="0" y1="0" y2="1">
        <stop offset="0%" stop-color="transparent"/>
        <stop offset="100%" stop-color="blue"/>
      </linearGradient>
    </defs>
    <symbol id="gra2" viewbox="0 0 100 100">
  
  <circle cx="50" cy="50" r="50" fill="url(#Gradient2)" />
    </symbol>
</svg>
</div>


<div class="box box--red">
  <svg>
    <use xlink:href="#gra2"></use>
  </svg>
</div>

<div class="box box--blue">
  <svg>
    <use xlink:href="#gra2"></use>
  </svg>
</div>
Run Code Online (Sandbox Code Playgroud)

要求:

通过重用可用的 SVG,我需要这两个不同颜色的渐变形状。

浏览器支持:IE10+、chrome 和 Firefox。

注意:我不想在 SVG 下对每个颜色相关的渐变进行硬编码。Gradient 颜色应该可以继承。这就是我如何重用 SVG,IMO。

Pau*_*eau 5

你想要的是不可能的。

我认为你能得到的最接近的是使用特殊颜色currentColor将 CSS 的当前值传递color到符号中。您可以将其传递给符号,但不能传递给渐变。所以你需要用它来给一个圆圈上色。然后在上面放一个渐变。但是,在此解决方案中,圆圈显然不能像您的示例那样部分透明。

.box--blue {
  color: blue;
}

.box--red {
  color: red;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <svg>
    <defs>
      <linearGradient id="Gradient2" x1="0" x2="0" y1="0" y2="1">
        <stop offset="0%" stop-color="white"/>
        <stop offset="100%" stop-color="transparent"/>
      </linearGradient>
    </defs>
    <symbol id="gra2" viewbox="0 0 100 100">
      <circle cx="50" cy="50" r="50" fill="currentColor" />
      <circle cx="50" cy="50" r="50" fill="url(#Gradient2)" />
    </symbol>
</svg>
</div>


<div class="box box--red">
  <svg>
    <use xlink:href="#gra2"></use>
  </svg>
</div>

<div class="box box--blue">
  <svg>
    <use xlink:href="#gra2"></use>
  </svg>
</div>
Run Code Online (Sandbox Code Playgroud)