我想围绕一个圆圈创建一条彩虹,如下图所示。
但是如何绘制弯曲的多色渐变呢?
这是我当前的代码:
<svg width="500" height="500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="test">
<stop offset="0%" stop-color="#f00"/>
<stop offset="100%" stop-color="#0ff"/>
</linearGradient>
</defs>
<circle cx="50" cy="50" r="40" fill="none" stroke="url(#test)" stroke-width="6"/>
</svg>
免费翻译问题svg 圆形笔划上的多种颜色

这在Leah Veru 的 polyfill 的帮助 下是可能的。
conic-gradient这种方法行不通。SVG 没有锥形渐变。为了模仿这种效果,您需要用很多小片段来伪造它。或者使用其他一些类似的技术。
更新:
这是一个例子。我正在对 .
360deg创建的六个跨度上的色调进行 近似path's。每个都path包含一个跨越 60 度圆的弧。我用来linear gradient从每条路径的开头到结尾插入颜色。它并不完美(您可以看到颜色相交处有一些缝隙),但大多数人不会注意到。您可以通过使用六个以上的段来提高准确性。
小提琴的例子
更新 2:
对于具有六个或更多分段的变体,有一个解决方案
javascript,它将创建一个具有任意数量分段的圆。下面的示例使用 12 个段。
svg multiple color on circle stroke的 松散翻译@Paul LeBeau的回答。
我将在英文版中添加我对类似问题的回答的翻译:https ://stackoverflow.com/a/58399254/1566316添加。
通过使用 transform:matrix3d 或 rotate3d 和 perspective 在 css 中将它们在一侧挤压成三角形,可以在线性渐变矩形上使用中心投影(透视)变换。
如果matrix3d的第四个参数非零,则设置透视消失点在地平线x轴上坐标的倒数(1/x)值。第十三参数水平偏移矩形。虽然在矩阵中使用 calc 是可以接受的,但它不适用于单位,因此在缩放时,matrix3d 会变得混乱,它只能在 svg 中使用并且只能在 Firefox 中使用,因为 svg 不支持负责透视的参数在铬 (4, 8) 中。然而,后者已经有了一个 conic-gradient,虽然它不能应用于任何 svg 元素,但只能应用于 foreignObject。我不知道 svg 中的 tranform-origin 属性是如何工作的,所以矩阵的元素是随机选择的。
SVG 版本的色轮。
渐变控制点通过以下公式获得(来自边长为 350x200 的直角三角形的几何形状):
其中 v 是变化的颜色通道的值。
SVG 版本的戒指。
在 HTML 中,您可以使用 transform:rotate3D。通过将视点放置在非常靠近矩形的位置,您几乎可以得到一个三角形。