第14章:ペイントサーバー:グラデーションとパターン

14.1. はじめに

このセクションでは ペイントサーバー について説明します。これは、 オブジェクトの 塗り を 他の場所にあるリソースで定義できる方法です。この仕組みにより、リソースを文書全体で再利用できます。 オブジェクトの塗りや線についての一般的な説明は 塗りと線の描画 のセクションを参照してください。

SVGは、いくつかの種類のペイントサーバーを定義しています。

SVG 2 要件: 図形への任意の塗り。
決定: SVG 2 は任意の要素からの塗りと線をサポートする。
目的: 例えば、動画や画像を塗りのソースとして利用できるようにするため。
担当者: Alex?(未対応)
ペイントサーバーの2種類の例

ペイントサーバーの2種類。左から右へ: 線形グラデーション。 パターン。

ペイントサーバーは、URL参照塗り プロパティに含めることで使用されます(例: fill="url(#MyLightPurple)")。

プロパティは ペイントサーバー要素へ祖先から継承されますが、 ペイントサーバー要素を参照する要素からは 継承されません

ペイントサーバー要素は直接描画されることはありません。その唯一の用途は、 塗り プロパティで参照できるものとして使うことです。 これらの要素の display 値は noneユーザーエージェントスタイルシートによって常に設定され、他のCSSルールやプレゼンテーション属性よりも優先されなければなりません。 ペイントサーバー要素は、 その要素自身や祖先の display プロパティが none に設定されていても、参照可能です。

14.1.1. ペイントサーバーをテンプレートとして使用する

ほとんどのペイントサーバー要素は ‘href’ 属性を受け入れます。 この属性を使うことで、互換性のあるペイントサーバー要素をテンプレートとして定義できます。 テンプレート要素に定義された属性は、 現在の要素で該当する属性が指定されていない場合、初期値の代わりに使用されます。 さらに、現在の要素に 記述的要素 以外の子コンテンツがない場合は、 テンプレート要素の子コンテンツが複製されて置き換えられます。

pattern における 記述的コンテンツの除外はSVG 2で新たに追加されたもので、グラデーションの挙動と一致し、 あらゆるSVG要素で記述的コンテンツを有効にする変更と整合しています。

新しい点として、テンプレートの相互参照は外部ファイルリソースにも可能となりました (SVG 1.1の各章ではこの点について一貫した指針がありませんでした)。 また、子要素の「継承」はシャドウツリーによって表現されます。

テンプレート化は任意のレベルまで間接的に行うことができ (外部ファイルリソースのセキュリティ制限によって参照が無効になる場合があります)、 参照されたテンプレート要素に該当する子コンテンツがなかったり、指定された属性を定義していない場合は、 テンプレート自身の ‘href’ 属性で参照される別の要素から属性値や複製されたコンテンツが取得されます。

この章で説明する各 ‘href’ 属性の記述は、 以下のようにテンプレート処理の限界を定義します。

指定された属性が現在の要素で定義されていない場合や、 現在の要素に 記述的要素 以外の子要素がない場合、 ユーザーエージェントは URLの処理 を行い、 参照されたリソースを特定する必要があります。 URL参照が 無効 でなければ、 次のようにURLの対象要素がテンプレート要素として使われます。

ペイントサーバー要素にシャドウツリーがある場合、 そのツリー内の 要素インスタンス は ペイントサーバーの効果をレンダリングする際に、 あたかもペイントサーバー要素自身の子要素であるかのように使用されます。

テンプレート化のための use要素シャドウツリー モデルにより、 複製されたコンテンツは元のものとは異なるスタイルを継承できます。 この挙動はSVG 2で新たに定義されたもので、 SVG 1.1では継承されたペイントサーバーコンテンツにスタイルがどう適用されるか定義されていませんでした。

14.2. グラデーション

グラデーションは、描画面上の点間で滑らかに色が変化するものです。SVGでは、次の3種類のグラデーションが用意されています:

グラデーションを定義した後、グラフィックス要素塗りプロパティにグラデーションを参照させることで、塗りつぶしや線描画にグラデーションを適用できます。

線形および放射グラデーションの色の変化は、グラデーションベクトル上の一連の色ストップによって定義されます。 グラデーションノーマルは、ベクトル上の色がどのように面に描画されるかを決定します。 線形グラデーションの場合、ノーマルはベクトルに垂直な直線です。放射グラデーションの場合、ノーマルはベクトルと直交する円です。 各グラデーションノーマルは、ベクトルによって決定される1色で塗られます。

線形および放射グラデーションのベクトルとノーマルを示す画像

線形グラデーションと放射グラデーションのベクトル例。ベクトルには小さな円で示される3つのストップがあります。各グラデーションごとにノーマルが1つ示されています。

線形および放射グラデーションでは、2つのストップ間のベクトル上の色値は、各チャンネルごとに両ストップの色をストップからの距離で重み付けして線形補間した値になります。

V = C 0 + ( C 1 - C 0 ) ( D - O 0 O 1 - O 0 )
    $V = C0.rgba + (C1.rgba - C0.rgba) * ((D - C0.offset) / (C1.offset - C0.offset));
  

各チャンネルにおいて、以下の通りです:

グラフィックス要素がグラデーションを参照する場合、概念的には グラフィックス要素がグラデーションベクトルとノーマルのコピーを自身のジオメトリの一部として扱います。 グラフィックス要素のジオメトリに変換が適用されると、それはコピーされたグラデーションベクトルとノーマルにも反映されます。 参照先グラデーションに指定されたグラデーション変換は、 グラフィックス要素の変換よりも先にグラデーションに適用されます。

14.2.1. 定義

グラデーション要素
グラデーション要素はグラデーション用のペイントサーバーを定義するものです。 本仕様が定義するグラデーション要素は以下の通りです: linearGradient および radialGradient

14.2.2. 線形グラデーション

線形グラデーションは、 linearGradient 要素によって定義されます。

linearGradient
カテゴリ:
グラデーション要素, 非描画要素, ペイントサーバー要素
内容モデル:
以下の要素を任意の順序・任意の個数で含むことができます:animate, animateTransform, script, set, stop, style
属性:
DOMインターフェース:

14.2.2.1. 属性

linearGradientx1y1x2y2 属性は プレゼンテーション属性ではありません。 使用される値はCSSスタイルの影響を受けません。 gradientTransform 属性は transform プロパティのプレゼンテーション属性です。

gradientUnits

x1y1x2y2 属性の座標系を定義します。

userSpaceOnUse | objectBoundingBox
初期値
objectBoundingBox
アニメーション可能
はい
userSpaceOnUse

gradientUnits="userSpaceOnUse" の場合、 x1y1x2y2 は グラデーション要素が参照された時点での現在のユーザー座標系(つまり、 fillstroke プロパティでグラデーション要素を参照する要素のユーザー座標系)に gradientTransform で指定された変換を適用した座標系での値を表します。 パーセンテージは現在のSVGビューポートに対する値です。

objectBoundingBox

gradientUnits="objectBoundingBox" の場合、 x1y1x2y2 のユーザー座標系は グラデーションが適用される要素のバウンディングボックスを使用して確立され (オブジェクトバウンディングボックス単位 を参照)、 その後 gradientTransform で指定された変換を適用します。 パーセンテージは対象オブジェクトのバウンディングボックスに対する値です。

gradientUnits="objectBoundingBox" かつ gradientTransform が単位行列の場合、 線形グラデーションのノーマルは、オブジェクトバウンディングボックス空間内で グラデーションベクトルに垂直になります(抽象座標系で (0,0) がバウンディングボックスの左上、 (1,1) が右下)。オブジェクトのバウンディングボックスが正方形でない場合、 バウンディングボックス空間でグラデーションベクトルに垂直なノーマルが、 ユーザー空間では垂直でなく描画される場合があります。 グラデーションベクトルがバウンディングボックスの軸と平行な場合、 ノーマルは垂直のままです。 これはバウンディングボックス空間からユーザー座標系への非均一なスケール変換の結果です。

gradientTransform

グラデーション座標系からターゲット座標系 ('userSpaceOnUse' または 'objectBoundingBox')への オプションの追加変換を定義します。 これによりグラデーションの傾斜などが可能となります。 この追加の変換行列は、既に定義されている変換(オブジェクトバウンディングボックス単位から ユーザー座標系への変換を含む)に右側(後)から掛け合わせて適用されます。

<transform-list>
初期値
単位変換
アニメーション可能
はい
x1

x1y1x2y2 は 線形グラデーションの グラデーションベクトル を定義します。 この グラデーションベクトル は、グラデーションストップ をマッピングする始点・終点となります。 x1y1x2y2 の値は 数値またはパーセンテージのいずれかです。

<length>
初期値
0%
アニメーション可能
はい
y1

x1 を参照してください。

<length>
初期値
0%
アニメーション可能
はい
x2

x1 を参照してください。

<length>
初期値
100%
アニメーション可能
はい
y2

x1 を参照してください。

<length>
初期値
0%
アニメーション可能
はい
spreadMethod

グラデーションが ターゲット矩形 の内部で始まったり終わったりした場合の挙動を示します。

pad | reflect | repeat
初期値
pad
アニメーション可能
はい
pad
グラデーションの端の色を使ってターゲット領域の残りを埋めます。
reflect
グラデーションパターンを start-to-end, end-to-start, start-to-end... のように反射して ターゲット矩形 を埋めます。
repeat
グラデーションパターンを start-to-end, start-to-end... のように繰り返してターゲット領域を埋めます。
spreadMethodの3つの値のイメージ

spreadMethod の3つの値の例(左から pad, reflect, repeat)。 グラデーションベクトルはバウンディングボックス幅の40%から60%までをカバーしています。

href

テンプレートグラデーション要素への URL参照。 有効な参照は、 別の linearGradient または radialGradient 要素である必要があります。

ペイントサーバーをテンプレートとして使用する手順URL参照属性の共通処理非推奨XLink属性の扱いも参照してください。

テンプレートから複製される属性は以下の通りです:

URL [URL]
初期値
アニメーション可能
はい

14.2.2.2. 線形グラデーションに関する注意事項

x1 = x2 かつ y1 = y2 の場合、塗られる領域は 最後の グラデーションストップ の色と不透明度で 単色で塗りつぶされます。

例 lingrad01 は、線形グラデーションペイントサーバーを参照して矩形を塗りつぶす方法を示します。

<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg"
     version="1.1"
     viewBox="0 0 300 200" >

  <title>例 lingrag01</title>
  <desc>線形グラデーションペイントサーバーを使って矩形を塗りつぶします。</desc>

  <defs>
    <linearGradient id="MyGradient">
      <stop offset="5%" stop-color="#A8F" />
      <stop offset="95%" stop-color="#FDC" />
    </linearGradient>
  </defs>

  <!-- 矩形は線形グラデーションペイントサーバーで塗りつぶされます -->
  <rect fill="url(#MyGradient)"
	stroke="black"
	stroke-width="2"
	x="25" y="25" width="250" height="150"/>
</svg>
例 lingrad01 — 線形グラデーションペイントサーバーで矩形を塗りつぶす

例 lingrad01

この例をSVGとして表示 (SVG対応ブラウザのみ)

14.2.3. 放射グラデーション

放射グラデーションは radialGradient 要素によって定義されます。

radialGradient
カテゴリ:
グラデーション要素, 非描画要素, ペイントサーバー要素
内容モデル:
以下の要素を任意の順序・任意個数含むことができます:animate, animateTransform, script, set, stop, style
属性:
DOMインターフェース:

14.2.3.1. 属性

radialGradientcxcyr 属性は プレゼンテーション属性ではありません。 使用される値はCSSスタイルの影響を受けません。 gradientTransform 属性は transform プロパティのプレゼンテーション属性です。

gradientUnits = "userSpaceOnUse | objectBoundingBox"

cxcyrfxfyfr 属性の座標系を定義します。

初期値
objectBoundingBox
アニメーション可能
はい
userSpaceOnUse

gradientUnits="userSpaceOnUse" の場合、 cxcyrfxfyfr は グラデーション要素が参照された時点での現在のユーザー座標系(つまり、 fillstroke プロパティでグラデーション要素を参照する要素のユーザー座標系)に gradientTransform で指定された変換を適用した座標系での値を表します。 パーセンテージは現在のSVGビューポートに対する値です。

objectBoundingBox

gradientUnits="objectBoundingBox" の場合、 cxcyrfxfyfr のユーザー座標系は グラデーションが適用される要素のバウンディングボックスを使用して確立され (オブジェクトバウンディングボックス単位を参照)、 その後 gradientTransform で指定された変換を適用します。 パーセンテージは対象オブジェクトのバウンディングボックスに対する値です。

gradientUnits="objectBoundingBox" かつ gradientTransform が単位行列の場合、 放射グラデーションのリングはオブジェクトバウンディングボックス空間で円形になります (抽象座標系で (0,0) がバウンディングボックスの左上、(1,1) が右下)。 バウンディングボックスが正方形でない場合、バウンディングボックス空間で円形のリングは ユーザー座標系への非均一スケール変換によって楕円形に描画されることがあります。

gradientTransform = "<transform-list>"

グラデーション座標系からターゲット座標系 ('userSpaceOnUse' または 'objectBoundingBox')への オプションの追加変換を定義します。 これによりグラデーションの傾斜などが可能となります。 この追加の変換行列は、既に定義されている変換(オブジェクトバウンディングボックス単位から ユーザー座標系への変換を含む)に右側(後)から掛け合わせて適用されます。

初期値
単位変換
アニメーション可能
はい
cx = "<length>"

cxcyr は 放射グラデーションの終点円を定義します。 グラデーションは 100%のグラデーションストップがこの終点円の周囲にマッピングされるように描画されます。

初期値
50%
アニメーション可能
はい
cy = "<length>"

cx を参照してください。

初期値
50%
アニメーション可能
はい
r = "<length>"

cx を参照してください。

負の値はエラーです (エラー処理 を参照)。

初期値
50%
アニメーション可能
はい
fx = "<length>"

fxfyfr は 放射グラデーションの始点円を定義します。 グラデーションは 0%のグラデーションストップがこの始点円の周囲にマッピングされるように描画されます。

初期値
下記参照
アニメーション可能
はい

fx 属性が指定されていない場合、fxは 要素の cx の提示値と一致します。 'cx' の値が継承されたかどうかに関わらず同様です。 要素が fx の値を指定した要素を参照している場合は、その参照先要素から fx の値が継承されます。

放射グラデーション属性の各種図解

この図は frr の50%の場合の 幾何属性の定義方法を示しています。小さな円は外側円の中心 (cx,cy) を示し、十字は内側円の中心 (fx,fy) を示します。破線は2つのグラデーションベクトルです。 ベクトルは内側と外側の円の対応する点を結びます。 外側円の外側領域は最後の stop-color で塗られ、 内側円の内側領域は最初の stop-color で塗られます。

fy = "<length>"

fx を参照してください。

初期値
下記参照
アニメーション可能
はい

fy 属性が指定されていない場合、fy は要素の cy の提示値と一致します。 'cy' の値が継承されたかどうかに関わらず同様です。 要素が fy の値を指定した要素を参照している場合は、その参照先要素から fy の値が継承されます。

fr = "<length>"

SVG 2で追加。Canvasとの整合のため。

fr は 焦点円の半径です。fx を参照してください。

負の値はエラーです (エラー処理 を参照)。

初期値
0%、下記参照
アニメーション可能
はい

属性が指定されていない場合、'0%' が指定されたかのように扱われます。 要素が fr の値を指定した要素を参照している場合は、その参照先要素から fr の値が継承されます。

SVG 2 要件: 放射グラデーションで焦点円の半径を指定可能にする。
決定: ‘fr’ 属性をSVG 2の ‘radialGradient’ に追加。
目的: Canvasとの整合を図るため。0オフセットのストップは ‘fx’‘fy’‘fr’ 属性で定義される円上に配置される。
担当者: Erik (ACTION-3098)
spreadMethod = "pad | reflect | repeat"

グラデーションがペイント対象オブジェクトの内部で始まったり終わったりした場合の挙動を示します。 linearGradient 要素の spreadMethod 属性と同じ値と意味を持ちます。

初期値
pad
アニメーション可能
はい
href = [URL]

テンプレートグラデーション要素への URL参照。 有効な参照は linearGradient 要素または 別の radialGradient 要素である必要があります。

ペイントサーバーをテンプレートとして使用する手順URL参照属性の共通処理非推奨XLink属性の扱いも参照してください。

テンプレートから複製される属性は以下の通りです:

URL参照属性の共通処理非推奨XLink属性の扱いも参照してください。

初期値
アニメーション可能
はい
SVG 2 要件: 焦点が円周上にある放射グラデーションの明確化。
決定: 焦点が円周上にあり、repeatの場合、繰り返し色の最初と最後のストップ間距離は0となり、塗りは全グラデーションストップの平均色になる。
目的: 放射グラデーションの相互運用性向上。
担当者: Erik (ACTION-3097)
備考: SVG 1.1では焦点が円周上にあり、repeatの場合の挙動が定義されていません。繰り返し色の最初と最後のストップ間距離は0です。塗りは全グラデーションストップのオフセット加重平均色にすべきと決定されました。

14.2.3.2. 放射グラデーションに関する注意事項

SVG 2で変更。SVG 1.1では、焦点が終点円の外側にある場合、終点円上に移動する必要���ありました。Canvasとの整合のため変更されました。

焦点が終点円外に配置可能となったのは Rigi Kaltbad ワーキンググループ会議で決定されました。

始点円(fxfyfrで定義)が 終点円(cxcyrで定義)の外側にある場合、 事実上2つの円が接する円錐形の領域ができ、その外側はグラデーションの影響を受けず(透明な黒)となります。

始点円が終点円と完全に重なる場合、グラデーションは描画されません。その領域は影響を受けません(透明な黒)。

焦点(始点円)が終点円外にある放射グラデーションの画像

焦点(始点円)が終点円外にある放射グラデーション。焦点円は右側の小さい円です。グラデーションは spreadMethod="reflect" です。

2つの放射グラデーション。1つは焦点が円周直前、もう1つは円周上。

2つの放射グラデーション( spreadMethod="repeat")。左は焦点が右側円周のすぐ内側、 cxcyr で定義。 右は焦点が円周上。この場合、円周右側に塗られる領域はグラデーションベクトル全体の加重平均色で塗りつぶされます。

上記右図のグラデーション右側領域の扱いはCanvasと異なり、Canvasでは透明な黒となります。SVG 1.1との互換性維持のためです。

加重平均色の色空間はグラデーション補間と同じです。 Rigi Kaltbad ワーキンググループ会議を参照。

例 radgrad01 は、放射グラデーションペイントサーバーを参照して矩形を塗りつぶす方法を示します。

<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg"
     viewBox="0 0 300 200" >
  <title>例 radgrad01</title>
  <desc>放射グラデーションペイントサーバーを使って矩形を塗りつぶします。</desc>

  <defs>
    <radialGradient id="MyGradient"
		    gradientUnits="userSpaceOnUse"
		    cx="150" cy="100"
		    r="100">
      <stop offset="0%"   stop-color="#A8F" />
      <stop offset="50%"  stop-color="#FDC" />
      <stop offset="100%" stop-color="#A8F" />
    </radialGradient>
  </defs>

  <!-- 矩形は放射グラデーションペイントサーバーで塗りつぶされます -->
  <rect fill="url(#MyGradient)"
	stroke="black"
	stroke-width="2"
	x="25" y="25" width="250" height="150"/>
</svg>
例 radgrad01 — 放射グラデーションペイントサーバーで矩形を塗りつぶす

例 radgrad01

この例をSVGとして表示(SVG対応ブラウザのみ)

14.2.4. グラデーションストップ

グラデーションで使用する色のベクトルは、 stop 要素によって定義されます。 これらは linearGradient または radialGradient 要素の子要素です。

SVG 1.1では、上記は「色のランプ...」と記載されていましたが、「ランプ」はこのセクションの他の場所では使用されていません。

stop
カテゴリ:
なし
内容モデル:
以下の要素を任意の順序・任意の個数で含むことができます:
    animate, script, set, style
    属性:
    DOMインターフェース:

    14.2.4.1. 属性

    offset

    グラデーションストップが配置される位置を示します。線形グラデーションの場合、 offset 属性は グラデーションベクトル上の位置を表します。放射グラデーションの場合は、 最も内側/小さい円の端から最も外側/大きい円の端までの割合距離を表します。

    <number> | <percentage>
    初期値
    0
    アニメーション可能
    はい
    <number>
    通常は0から1までの数値。
    <percentage>
    通常は0%から100%までのパーセンテージ。

    14.2.4.2. プロパティ

    stop-color

    stop-color プロパティは、 そのグラデーションストップで使用する色を示します。 キーワード currentColor や ICCカラーは、 <paint> の仕様で fillstroke プロパティで指定する場合と同様に指定できます。

    グラデーションに関して、SVGは'transparent'キーワードの扱いをCSSとは異なります。 SVGはプリマルチプライド空間でグラデーションを計算しないので、'transparent'は実際には透明な黒を意味します。 stop-color に 'transparent' を指定するのは、 stop-color を 'black' に、 stop-opacity を '0' に 指定したのと同じです。

    currentColor | <color> <icccolor>
    初期値
    black
    適用対象
    stop 要素
    継承
    なし
    パーセンテージ
    該当なし
    媒体
    ビジュアル
    アニメーション可能
    はい
    stop-opacity

    stop-opacity プロパティは、 グラデーションストップの不透明度を定義します。 グラデーションの計算に使用される不透明度値は、 stop-opacity の値と stop-color の値の不透明度の積です。 stop-color の値タイプに 明示的な不透明度情報が含まれない場合、その成分の不透明度は1として扱います。

    <alpha-value>
    初期値
    1
    適用対象
    stop 要素
    継承
    なし
    パーセンテージ
    該当なし
    媒体
    ビジュアル
    アニメーション可能
    はい
    <number>
    stop-color の不透明度。 0.0(完全に透明)から1.0(完全に不透明)の範囲外の値はこの範囲に丸められます。
    <percentage>
    stop-color の不透明度を 0から1の範囲のパーセンテージとして表現します。

    14.2.4.3. グラデーションストップに関する注意事項

    14.3. パターン

    パターンは、あらかじめ定義されたグラフィックオブジェクトを使って、オブジェクトの 塗り を行うために使用されます。 パターンとなるオブジェクトは、x方向とy方向に一定間隔で複製(「タイル状」)され、塗りや線を描画する領域を覆います。 パターンは pattern 要素で定義され、 fillstroke プロパティで グラフィックス要素に参照することで、その要素をパターンで塗りつぶし/線を描くことができます。

    属性 xywidthheightpatternUnits は、 無限キャンバス上の参照矩形を定義します。 この参照矩形の左上は (x, y)、右下は (x + width, y + height) です。 タイルは理論上、X・Y方向(正負とも)無限に並び、各矩形の左上は (x + m*width, y + n*height) となります(m, nは整数)。

    pattern
    カテゴリ:
    コンテナ要素, 非描画要素, ペイントサーバー要素
    内容モデル:
    以下の要素を任意の順序・個数で含めることができます:a, audio, canvas, clipPath, filter, foreignObject, iframe, image, marker, mask, script, style, switch, text, video, view
    属性:
    DOMインターフェース:

    14.3.1. 属性

    patternxywidthheight 属性は プレゼンテーション属性ではありません。 使用値はCSSスタイルの影響を受けません。 patternTransform 属性は transform プロパティのプレゼンテーション属性です。

    patternUnits

    属性 xywidthheight の座標系を定義します。

    userSpaceOnUse | objectBoundingBox
    初期値
    objectBoundingBox
    アニメーション可能
    はい
    userSpaceOnUse

    patternUnits="userSpaceOnUse" の場合、 xywidthheight は パターン要素が参照された時点での現在のユーザー座標系(つまり、 fillstroke プロパティで パターン要素を参照する要素のユーザー座標系)に patternTransform で指定された変換を適用した座標系での値を表します。 パーセンテージは現在のSVGビューポートに対する値です。

    objectBoundingBox

    patternUnits="objectBoundingBox" の場合、 属性 xywidthheight のユーザー座標系は パターンが適用される要素のバウンディングボックスを使って確立され (オブジェクトバウンディングボックス単位参照)、 その後 patternTransform で指定された変換を適用します。 パーセンテージは対象オブジェクトのバウンディングボックスに対する値です。

    patternContentUnits

    pattern の内容の座標系を定義します。 この属性は、属性 viewBox が指定されている場合は効果がありません。

    userSpaceOnUse | objectBoundingBox
    初期値
    userSpaceOnUse
    アニメーション可能
    はい
    userSpaceOnUse

    patternContentUnits="userSpaceOnUse" の場合、 pattern の内容のユーザー座標系は、 パターン要素が参照された時点での現在のユーザー座標系(つまり、 fillstroke プロパティで パターン要素を参照する要素のユーザー座標系)に patternTransform で指定された変換を適用した座標系での値となります。

    objectBoundingBox

    patternContentUnits="objectBoundingBox" の場合、 pattern の内容のユーザー座標系は パターンが適用される要素のバウンディングボックスを使って確立され (オブジェクトバウンディングボックス単位参照)、 その後 patternTransform で指定された変換を適用します。

    patternTransform

    パターン座標系からターゲット座標系('userSpaceOnUse' または 'objectBoundingBox')への オプションの追加変換を定義します。 これによりパターンタイルの傾斜などが可能となります。 この追加の変換行列は、既に定義された変換(オブジェクトバウンディングボックス単位から ユーザー座標系への変換を含む)に右側(後)から掛け合わせて適用されます。

    <transform-list>
    初期値
    単位変換
    アニメーション可能
    はい
    x

    xywidthheight は パターンタイルの配置や間隔を定義します。 これらの属性は、 patternUnits 属性と patternTransform 属性の組み合わせで指定される座標空間での座標値です。

    <length>
    初期値
    0
    アニメーション可能
    はい
    y

    x を参照してください。

    <length>
    初期値
    0
    アニメーション可能
    はい
    width

    x を参照してください。

    <length>
    初期値
    0
    アニメーション可能
    はい

    負の値はエラーです (エラー処理参照)。 0の場合は要素の描画が無効化されます(塗りは適用されません)。

    height

    x を参照してください。

    <length>
    初期値
    0
    アニメーション可能
    はい

    負の値はエラーです(エラー処理参照)。 0の場合は要素の描画が無効化されます(塗りは適用されません)。

    href

    テンプレート要素への URL参照。 有効な参照は、別の pattern 要素である必要があります。

    ペイントサーバーをテンプレートとして使用する手順URL参照属性の共通処理非推奨XLink属性の扱いも参照してください。

    テンプレートから複製される属性は以下の通りです:

    URL [URL]
    初期値
    アニメーション可能
    はい

    14.3.2. パターンに関する注意事項

    SVGのユーザーエージェントスタイルシートは、 pattern要素の overflowプロパティを hiddenに設定します。これによりパターンタイルの境界で矩形クリッピングパスが生成されます。 overflowプロパティが上書きされない限り、 パターン内のグラフィックスがパターン矩形の外側に出た場合はクリップされます。 下記の例 pattern01はパターンタイルへのクリッピング効果を示しています。

    overflowプロパティが visibleに設定されている場合、パターンの境界外の描画動作は現時点で未定義です。 将来の現行標準ではoverflowを表示することが要求されるかもしれません。 SVG実装者はoverflowを表示することを推奨します。これは作者が期待する動作です。 overflowを描画する場合、パターンタイルは左から右へ行、行は上から下へ描画されるべきです。

    GitHub Issue 129 を参照

    pattern の内容は新しい座標系に対して相対的です。 viewBox属性がある場合、 新しい座標系は、pattern要素の xywidthheightpatternUnits属性で 定義される領域に標準のviewBoxpreserveAspectRatioのルールで収められます。 viewBox属性がない場合、 新しい座標系の原点は(x, y)で、 xpattern要素の x属性で、 ypattern要素の y属性で決まります。よって、次の例の場合:

    <pattern x="10" y="10" width="20" height="20">
      <rect x="5" y="5" width="10" height="10"/>
    </pattern>
    

    矩形はパターンタイルの原点から右に5単位、下に5単位の位置に配置されます。

    viewBox属性は、 xywidthheightpatternUnits属性による 新しいパターン座標系の変換に加えて補足的な変換を導入します。

    pattern要素の内容に付与された イベント属性やイベントリスナーは処理されません。 pattern要素ではレンダリング関連の側面のみ処理されます。

    例 pattern01 はパターンペイントサーバーを参照して矩形を塗りつぶす方法を示します。 各三角形の青い線が上端と左端で少しクリップされていることに注意してください。 これはSVGのユーザーエージェントスタイルシートpattern要素の overflowプロパティを hiddenに設定し、パターンがパターンタイルの境界でクリップされるためです。

    <?xml version="1.0" standalone="no"?>
    <svg xmlns="http://www.w3.org/2000/svg"
         version="1.1"
         viewBox="0 0 300 200" >
    
      <title>例 pattern01</title>
      <desc>パターンペイントサーバーで楕円を塗りつぶします。</desc>
    
      <defs>
        <pattern id="TrianglePattern"
    	     patternUnits="userSpaceOnUse"
                 x="0" y="0" width="50" height="50"
                 viewBox="0 0 10 10" >
          <path d="M 0 0 L 7 0 L 3.5 7 z"
    	    fill="plum"
    	    stroke="blue" />
        </pattern> 
      </defs>
    
      <!-- 楕円は三角形パターンペイントサーバーで塗りつぶされます -->
      <ellipse fill="url(#TrianglePattern)"
    	   stroke="black"
    	   stroke-width="2"
               cx="150" cy="100" rx="125" ry="75" />
    </svg>
    例 pattern01 — パターンペイントサーバーで矩形を塗りつぶす

    例 pattern01

    この例をSVGとして表示(SVG対応ブラウザのみ)

    14.4. DOMインターフェース

    14.4.1. SVGGradientElementインターフェース

    SVGGradientElement インターフェースは、グラデーションペイントサーバー要素インターフェースの基底インターフェースとして使用されます。

    [Exposed=Window]
    interface SVGGradientElement : SVGElement {
    
      // Spread Method Types
      const unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
      const unsigned short SVG_SPREADMETHOD_PAD = 1;
      const unsigned short SVG_SPREADMETHOD_REFLECT = 2;
      const unsigned short SVG_SPREADMETHOD_REPEAT = 3;
    
      [SameObject] readonly attribute SVGAnimatedEnumeration gradientUnits;
      [SameObject] readonly attribute SVGAnimatedTransformList gradientTransform;
      [SameObject] readonly attribute SVGAnimatedEnumeration spreadMethod;
    };
    
    SVGGradientElement includes SVGURIReference;
    

    SVGGradientElementで定義されている数値型spread method定数は、 ‘spreadMethod’属性が取り得るキーワード値を表現します。それぞれの意味は以下の通りです:

    定数 意味
    SVG_SPREADMETHOD_PAD padキーワード。
    SVG_SPREADMETHOD_REFLECT reflectキーワード。
    SVG_SPREADMETHOD_REPEAT repeatキーワード。
    SVG_SPREADMETHOD_UNKNOWN その他の値。

    gradientUnits IDL属性は reflects‘gradientUnits’内容属性を反映します。 グラデーション要素上の‘gradientUnits’属性の数値型値は以下の通りです:

    数値型値
    userSpaceOnUse SVG_UNIT_TYPE_USERSPACEONUSE
    objectBoundingBox SVG_UNIT_TYPE_OBJECTBOUNDINGBOX

    gradientTransform IDL属性は、 reflectsで計算値および 'gradientTransform'プレゼンテーション属性を反映します。 対象要素はlinearGradientおよび radialGradientです。

    spreadMethod IDL属性は reflects‘spreadMethod’内容属性を反映します。 グラデーション要素上の‘spreadMethod’属性の数値型値は上記の定数表の通りです。

    14.4.2. SVGLinearGradientElementインターフェース

    SVGLinearGradientElement オブジェクトはDOM内のlinearGradientを表します。

    [Exposed=Window]
    interface SVGLinearGradientElement : SVGGradientElement {
      [SameObject] readonly attribute SVGAnimatedLength x1;
      [SameObject] readonly attribute SVGAnimatedLength y1;
      [SameObject] readonly attribute SVGAnimatedLength x2;
      [SameObject] readonly attribute SVGAnimatedLength y2;
    };

    x1y1x2y2 IDL属性は、 それぞれx1y1x2y2 内容属性を反映します。

    14.4.3. SVGRadialGradientElementインターフェース

    SVGRadialGradientElement オブジェクトはDOM内のradialGradientを表します。

    [Exposed=Window]
    interface SVGRadialGradientElement : SVGGradientElement {
      [SameObject] readonly attribute SVGAnimatedLength cx;
      [SameObject] readonly attribute SVGAnimatedLength cy;
      [SameObject] readonly attribute SVGAnimatedLength r;
      [SameObject] readonly attribute SVGAnimatedLength fx;
      [SameObject] readonly attribute SVGAnimatedLength fy;
      [SameObject] readonly attribute SVGAnimatedLength fr;
    };

    cxcyrfxfyfr IDL属性は、 それぞれcxcyrfxfyfr 内容属性を反映します。

    14.4.4. SVGStopElementインターフェース

    SVGStopElement オブジェクトは DOM内のstop要素を表します。

    [Exposed=Window]
    interface SVGStopElement : SVGElement {
      [SameObject] readonly attribute SVGAnimatedNumber offset;
    };

    offset IDL属性は reflectsoffset内容属性を反映します。

    SVGStopElementには path属性用の reflectingIDL属性はありません。

    14.4.5. SVGPatternElementインターフェース

    SVGPatternElement オブジェクトは DOM内のpattern要素を表します。

    [Exposed=Window]
    interface SVGPatternElement : SVGElement {
      [SameObject] readonly attribute SVGAnimatedEnumeration patternUnits;
      [SameObject] readonly attribute SVGAnimatedEnumeration patternContentUnits;
      [SameObject] readonly attribute SVGAnimatedTransformList patternTransform;
      [SameObject] readonly attribute SVGAnimatedLength x;
      [SameObject] readonly attribute SVGAnimatedLength y;
      [SameObject] readonly attribute SVGAnimatedLength width;
      [SameObject] readonly attribute SVGAnimatedLength height;
    };
    
    SVGPatternElement includes SVGFitToViewBox;
    SVGPatternElement includes SVGURIReference;
    

    patternUnitspatternContentUnits のIDL属性は、それぞれpatternUnitspatternContentUnits 内容属性を反映します。 patternUnitsおよび patternContentUnitsの 数値型値は以下の通りです:

    数値型値
    userSpaceOnUse SVG_UNIT_TYPE_USERSPACEONUSE
    objectBoundingBox SVG_UNIT_TYPE_OBJECTBOUNDINGBOX

    patternTransform IDL属性は reflectstransformプロパティの計算値および ‘patternTransform’プレゼンテーション属性を反映します。

    xywidthheight のIDL属性は、それぞれxywidthheight 内容属性を反映します。