<pattern>タグを使うと、SVG画像内で繰り返し使える任意のパターンを定義できる。パターンは、fill属性またはstroke属性で参照する。
使いどころ
例えば、ドット模様をSVGで表現することを考える。これは、<circle>タグを繰り返し使うことで簡単に実現できる。
ただ、これだとドットの数だけ<circle>タグが必要だ。違うのは座標だけであり、その座標にも決まったパターンがある。コピー&ペーストを繰り返すのは無駄が多い。
こんな時こそ、<pattern>タグの出番である。
使い方
<pattern>タグは、以下のような流れで使う。
<defs>タグの中に<pattern>タグを定義する。- 定義したパターンを使いたい要素の
strokeあるいはfillで参照する。
<pattern>の定義、というとややこしそうだが、実際はシェイプ要素やパス要素で任意の画像を描くだけである。外から繰り返し参照できる<svg>タグ、のように捉えても良いかと思う。
指定できる属性
| 属性名 | 概要 |
|---|---|
| viewBox | パターンのビューポートの境界を数値のリストで指定。デフォルトはnone |
| x | パターンのX座標を長さか%で指定。デフォルトは0 |
| width | パターンの幅を長さか%で指定。デフォルトは0 |
| height | パターンの高さを長さか%で指定。デフォルトは0 |
| href | 既存のパターンを再利用したいときに、そのidを指定。デフォルトはnone |
| patternContentUnits | パターンの座標系を、userSpaceOnUse(SVG)かobjectBoundingBox(シェイプ)のいずれかで指定。デフォルトはuserSpaceOnUse。また、viewBoxを指定している場合、この属性は無効 |
| patternTransform | パターンに何らかの変換処理(例rotate(45))を指定したい場合に指定。デフォルトはnone |
| patternUnits | x、y、width、heightの値を適用する座標単位を、userSpaceOnUse(SVG)かobjectBoundingBox(シェイプ)のいずれかで指定。デフォルトはobjectBoundingBox。 |
| preserveAspectRatio | パターンが定義と異なるアスペクト比の図形に使われた場合の処理を指定する。指定できる値はnone、xMinYMin、xMidYMin、xMaxYMin、xMinYMid、xMidYMid、xMaxYMid、xMinYMax、xMidYMax、xMaxYMaxのいずれか。また、これにmeet(納める)、slice(切れてもいい)のいずれかを指定できる。デフォルト値はxMidYMid meet |
ちなみに、先に示したドット模様は、<pattern>タグを使うと以下のように表現できる。
座標の計算がちょっとややこしいが、こちらの方がずっと見やすい。