SVGで「角度グラデーション」を実行する方法はありますか?
(正式な用語はわかりません。これは、カラーピッカーに見られる種類のグラデーションで、角度によって異なります。)
SVGは線形グラデーションと放射状グラデーションのみをサポートしているようですが、変換を使用して必要なものをシミュレートする方法があるのではないかと考えています。
ありがとう!
...10年後...
CSSは円錐形のグラデーションをサポートするようになりましたが、これを書いている時点ではブラウザのサポートはまちまちです。
内容がCSS円錐グラデーションを使用するにを適用し<clipPath />
て<foreignObject />
、目的の効果を実現できます。
角度(円錐)グラデーションを実行するための標準的なサポートはありません。
ただし、いくつかの近似方法については、 http://wiki.inkscape.org/wiki/index.php/Advanced_Gradients#Conical_gradientを参照してください(ただし、ソースコードは含まれていません)。そのリンクの例は機能しません。
パターンを使用してそれを行う方法は次のとおりです:https ://jsfiddle.net/prozoroff/8eodzrke/
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="800" width="800">
<defs>
<linearGradient id="Gradient1" gradientTransform="rotate(90)">
<stop offset="0%" stop-color="#ff0000"/>
<stop offset="100%" stop-color="#00ff00"/>
</linearGradient>
<linearGradient id="Gradient2" gradientTransform="rotate(90)">
<stop offset="0%" stop-color="#0000ff"/>
<stop offset="100%" stop-color="#00ff00"/>
</linearGradient>
<pattern id="Pattern" x="0" y="0" width="600" height="600" patternUnits="userSpaceOnUse">
<g transform="rotate(0, 300, 300)">
<rect shape-rendering="crispEdges" x="0" y="0" width="300" height="600" fill="url(#Gradient1)"/>
<rect shape-rendering="crispEdges" x="300" y="0" width="300" height="600" fill="url(#Gradient2)"/>
</g>
</pattern>
</defs>
<path id='arc5' style="stroke: url(#Pattern);" fill='transparent' stroke-width='60' d='M 364 58 A 250 250 0 1 1 235 58'/>
</svg>
この同様の質問に対する私の答えでは、円錐のグラデーションを近似するために6つの線形グラデーションを使用しました。塗りつぶしではなく、円のストローク/周囲のグラデーションのみが必要な場合は、十分な近似値である必要があります。
これが可能なベクトル円錐勾配ですが、VML(+ IE)のみがそれを行うことができます...:
このページを掘り下げると、一連の1度の円弧として描画することにより、SVGの円錐曲線を近似するコードが見つかります。
幅と高さが100%のパターンを追加して、1回の繰り返しパターンにします
<div style="width:100px">
<svg viewBox="0 0 35 35" style="transform: scale(1) rotate(-90deg)">
<defs>
<pattern
id="p1"
patternUnits="userSpaceOnUse"
width="100%"
height="100%"
patternTransform="rotate(90)"
>
<image href="https://blogs.igalia.com/dpino/files/2020/06/conic-gradient.png" width="36" height="36" />
</pattern>
</defs>
<g>
<circle
cx="50%"
cy="50%"
stroke-width="2"
r="15.915"
stroke-dasharray="89, 100"
stroke="url(#p1)"
fill="none"
/>
</g>
</svg>
</div>
http://en.wikipedia.org/wiki/File:Blended_colour_wheel.svgは、革新的な手法を使用して近似します。