美しい塗り - グラデーションとパターン
SVGの図形を単色で塗りつぶすだけでなく、もっと表情豊かにしたいと思ったことはありませんか?SVGでは、滑らかな色の変化を作り出す「グラデーション」や、繰り返し模様で塗りつぶす「パターン」を使って、図形の見た目を劇的に向上させることができます。
これらの高度な塗りは、通常 <defs>
要素の中に定義し、id
を付けて名前を付けます。そして、図形の fill
属性や stroke
属性から url(#yourGradientID)
や url(#yourPatternID)
のようにして参照します。それでは、具体的な方法を見ていきましょう!
線形グラデーション (<linearGradient>
)
線形グラデーションは、ある方向に向かって色が直線的に徐々に変化する塗りです。水平、垂直、斜めなど、どんな方向にも設定できます。
主な属性:
id
: このグラデーションを識別するためのユニークなID。x1, y1, x2, y2
: グラデーションの開始点 (x1,y1) と終了点 (x2,y2) を定義するベクトル。パーセンテージ (0%
~100%
) または数値で指定します。gradientUnits
:x1, y1, x2, y2
などの座標の単位系。userSpaceOnUse
(現在の座標系) またはobjectBoundingBox
(適用対象の図形の境界ボックスを基準とする、デフォルト) を指定。spreadMethod
: グラデーションベクトルが図形より短い場合の描画方法 (pad
: 端の色で埋める (デフォルト),reflect
: 反射して繰り返す,repeat
: そのまま繰り返す)。
<linearGradient>
要素の中には、一つ以上の <stop>
要素を配置して、色の変化点を定義します。
offset
: グラデーションベクトル上の位置 (0%
~100%
または0.0
~1.0
)。stop-color
: その位置での色。stop-opacity
: (オプション) その位置での色の不透明度。
線形グラデーション デモ
fill="url(#myLinearGradient)"
円形グラデーション (<radialGradient>
)
円形(または楕円形)グラデーションは、中心から外側に向かって色が放射状に変化する塗りです。ハイライトや光源のような効果を表現するのに適しています。
主な属性:
id
: このグラデーションを識別するためのユニークなID。cx, cy, r
: グラデーションの外側の円の中心 (cx,cy) と半径 (r)。fx, fy, fr
: グラデーションの焦点(光が最も強い点)の中心 (fx,fy) と半径 (fr)。fr
はSVG 2で追加。SVG 1.1ではfx,fy
のみ。省略するとcx,cy
と同じになり、同心円状のグラデーションになります。gradientUnits
,spreadMethod
: 線形グラデーションと同様。
<stop>
要素の使い方も線形グラデーションと同じです。
円形グラデーション デモ
fill="url(#myRadialGradient)"
パターン (<pattern>
)
<pattern>
要素を使うと、自分で定義した図形や画像をタイル状に敷き詰めて、図形の塗りや線として使用できます。壁紙や布地の模様のような表現が可能です。
主な属性:
id
: パターンを識別するためのID。x, y, width, height
: パターンタイル1枚の位置とサイズ。これらの値の単位はpatternUnits
属性で決まります。patternUnits
:x, y, width, height
の単位系。userSpaceOnUse
またはobjectBoundingBox
(デフォルト)。patternContentUnits
: パターンの中身(<pattern>
の子要素として描く図形)の座標系の単位。userSpaceOnUse
(デフォルト) またはobjectBoundingBox
。patternTransform
: パターンタイル自体に適用する変形(回転、拡大縮小など)。href
(またはxlink:href
): 他のパターンを継承して、それを基に変更を加えることができます。
<pattern>
要素の中に、タイルとして繰り返したいSVG図形(<rect>
, <circle>
, <path>
, <image>
など)を記述します。
パターン デモ
fill="url(#dotsPattern)"
Did you know? Gradients and patterns can also be applied to the `stroke` of a shape, not just its `fill`. This allows for creative outlining effects, like a rainbow-stroked path or a textured border. You simply use `stroke="url(#yourGradientOrPatternID)"`.
知っていましたか?グラデーションやパターンは、図形の `fill` (塗り) だけでなく、`stroke` (線) にも適用できるんです。これにより、虹色の線を持つパスや、テクスチャのある境界線など、クリエイティブな輪郭線の効果を作り出すことができます。単に stroke="url(#yourGradientOrPatternID)"
のように使用します。
まとめ
線形グラデーション、円形グラデーション、そしてパターンは、SVGの図形に深みと豊かさを与える強力なツールです。<defs>
に定義し、fill
や stroke
属性からIDで参照するという基本的な使い方を覚えれば、表現の幅が大きく広がります。
各属性の値をインタラクティブデモで変更してみて、その効果を確かめてみてください。特に gradientUnits
や patternUnits
、spreadMethod
といった属性は、見た目に大きく影響するので、色々試してみるのがおすすめです。
次は、SVGにさらに高度な視覚効果を加える「魔法の効果 - SVGフィルター」について学びます。
このページの要約
日本語
SVGでは、<linearGradient>
(線形グラデーション)、<radialGradient>
(円形グラデーション)、<pattern>
(パターン)を使って、図形の塗りや線を単色以上に豊かに表現できます。これらは通常<defs>
内に定義され、id
で参照されます。グラデーションは<stop>
要素で色の変化点を指定し、方向や範囲、繰り返し方法も制御可能です。パターンは図形や画像をタイル状に敷き詰めます。これらの定義には変形も適用できます。
English
SVG allows for rich fills and strokes beyond solid colors using <linearGradient>
, <radialGradient>
, and <pattern>
. These are typically defined within <defs>
and referenced by ID. Gradients use <stop>
elements to specify color transitions, and their direction, range, and spread method can be controlled. Patterns tile shapes or images. Transformations can also be applied to these definitions.
Español
SVG permite rellenos y trazos enriquecidos más allá de los colores sólidos utilizando <linearGradient>
(degradado lineal), <radialGradient>
(degradado radial) y <pattern>
(patrón). Estos se definen típicamente dentro de <defs>
y se referencian por ID. Los degradados usan elementos <stop>
para especificar transiciones de color, y se puede controlar su dirección, rango y método de propagación. Los patrones repiten formas o imágenes como mosaicos. También se pueden aplicar transformaciones a estas definiciones.
中文
SVG允许使用<linearGradient>
(线性渐变)、<radialGradient>
(径向渐变)和<pattern>
(图案)来实现比纯色更丰富的填充和描边效果。这些通常在<defs>
中定义,并通过ID引用。渐变使用<stop>
元素指定颜色过渡点,并且可以控制其方向、范围和扩展方法。图案将形状或图像平铺。变换也可以应用于这些定义。