SVGベクターグラフィックガイド


SVGの基本的なグラフィック

線と塗りつぶしの共通属性

グラフィックの要素には、線と塗りつぶしについて共通して次の属性を指定できます。
stroke属性 グラフィックの輪郭の線の太さと色を指定する。
stroke="色"
stroke-width="2"
stroke属性を省略した場合は、輪郭を描画しない。
fill 属性 塗りつぶしを指定する。
fill="色"
fill="none" ※ 内部を塗りつぶさない
fill属性を省略した場合は通常は黒の塗りつぶしになる。
塗りつぶさない場合は明示的にnoneを指定する必要がある。
opacity属性
stroke-opacity属性
fill-opacity属性
グラフィック内部の不透明度を指定する。
opacity="不透明度"
0.0 = 完全に透明
1.0 = 完全に不透明
最大値が完全な不透明を示すので透明度ではない。
線の不透明度はstroke-opacity、
塗りつぶしの不透明度はfill-opacity属性、
グラフィック全体の不透明度はopacity属性で指定する。
fill属性を指定しない場合は、黒の塗りつぶしになり、stroke属性の指定がない場合は輪郭線は描画しないことに注意してください。

矩形描画  rect 要素

属性
x y 左上の座標
width height 横・縦の長さ
rx ry 角を丸くするときの楕円の横・縦の半径
ry省略時はrxと同値。
矩形(四角形)を描画します。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <rect x="10" y="10" width="30" height="40"/>
    <rect x="30" y="30" width="30" height="40"
        stroke-width="2" stroke="blue" fill="none"/>
    <rect x="50" y="50" width="30" height="40" rx="5" ry="5"
        fill="lime" fill-opacity="0.7"/>
</svg>
Picture
矩形の座標は、線の太さの中心が基準になります。幅の広い線の半分の幅が、長方形の座標の外側に出ています。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <rect x="30" y="30" width="30" height="40"
        stroke-width="5" stroke="red" fill="none"
        opacity="0.5"/>
    <rect x="30" y="30" width="30" height="40"
        stroke-width="1" stroke="black" fill="none"
        opacity="1.0"/>
</svg>
Picture

円描画  circle 要素

属性
cx cy 円の中心座標
r 半径
円を描画します。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <circle cx="30" cy="35" r="20"
        stroke-width="4" stroke="brown" fill="none"/>
    <circle cx="60" cy="45" r="30"
        stroke-width="2" stroke="navy" fill="skyblue"
        opacity="0.5"/>
</svg>
Picture

楕円描画  ellipse 要素

属性
cx cy 円の中心座標
rx ry x軸方向・y軸方向の半径
楕円を描画します。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <ellipse cx="30" cy="40" rx="20" ry="30"
        stroke-width="4" stroke="purple" fill="none"/>
    <ellipse cx="60" cy="50" rx="35" ry="15"
        stroke-width="2" stroke="gray" fill="pink"
        opacity="0.5"/>
</svg>
Picture

直線描画  line 要素

属性
x1 y1 始点座標
x2 y2 終点座標
直線を描画します。stroke属性を指定しないと描画されません。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <line x1="10" y1="50" x2="60" y2="10" stroke="red"
        stroke-width="1"/>
    <line x1="20" y1="30" x2="80" y2="70" stroke="blue"
        stroke-width="2"/>
    <line x1="40" y1="10" x2="40" y2="90" stroke="green"
        stroke-width="4" opacity="0.6"/>
</svg>
Picture

連続した折れ線描画  polyline 要素

属性
points 折れ線の各頂点の座標のリストXnとYnのペアをカンマか空白で区切って並べる。
points="X1 Y1 X2 Y2 X3 Y3 ..."
points="X1,Y1 X2,Y2 X3,Y3 ..."
連続した直線を描画します。
stroke属性を指定しないと描画されません。fill属性にnoneを指定しないと直線で閉じた部分を塗りつぶそうとします。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <polyline
        points="10,40 50,10 70,30 30,80 50,70 40,90 90,40"
        stroke-width="1" stroke="teal" fill="none"/>
</svg>
Picture

多角形描画  polygon 要素

属性
points 多角形の各頂点の座標のリストXnとYnのペアをカンマか空白で区切って並べる。
points="X1 Y1 X2 Y2 X3 Y3 ..."
points="X1,Y1 X2,Y2 X3,Y3 ..."
終点を始点と同じ座標にしなくても、最後から先頭の座標へ自動で閉じる。
3点以上の頂点を持つ直線で構成する閉じた図形を描画します。
六角形や星形のような幾何学的な多角形だけではなく、頂点を自由に設定して不規則な多角形を描画できます。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <polygon
        points="10,40 20,10 80,30 30,80 20,60 30,30"
        stroke-width="2" stroke="red" fill="gold"/>
</svg>
Picture
線は交差できます。fillの指定は線で閉じた部分をなるべく塗りつぶそうとします。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <polygon
        points="10,40 20,10 80,30 30,80 20,60 70,10"
        stroke-width="2" stroke="red" fill="gold"/>
</svg>
Picture

線の端点の形状  stroke-linecap 線の属性

属性値
butt 端点で断ち切る
round 端点を中心にした半円
square 端点を中心にした四角
線を描画するときの端点の形状を指定します。
suqareroundは、端点座標を中心とした丸と四角で終端します。この場合line要素で指定する長さよりも線の太さの分だけ長くなります。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <line x1="20" y1="20" x2="70" y2="20" stroke="seagreen"
        stroke-width="8" stroke-linecap="butt"/>
    <line x1="20" y1="40" x2="70" y2="40" stroke="orange"
        stroke-width="8" stroke-linecap="round"/>
    <line x1="20" y1="60" x2="70" y2="60" stroke="magenta"
        stroke-width="8" stroke-linecap="square"/>
</svg>
Picture

角の接続点の形状  stroke-linejoin 線の属性

属性値
miter とがった形
round
bevel 角を削る(面取り)
線を描画するときの角の接続点の形状を指定します。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <polyline
        points="10,40 40,10 70,40" stroke-width="8"
        stroke="olive" fill="none" stroke-linejoin="miter"/>
    <polyline
        points="10,60 40,30 70,60" stroke-width="8"
        stroke="red" fill="none" stroke-linejoin="round"/>
    <polyline
        points="10,80 40,50 70,80" stroke-width="8"
        stroke="sienna" fill="none" stroke-linejoin="bevel"/>
</svg>
Picture

破線のパターン  stroke-dasharray 線の属性

属性
stroke-dasharray 破線の線と空白の長さのパターンをカンマで区切って並べる。
stroke-dasharray="線, 空白, 線 ..."
破線の白黒の長さのパターンを定義します。
線と空白の繰り返しパターンなので通常は偶数個を指定することになります。
奇数の場合はパターンが繰り返されるときに、線と空白の長さが逆転します。たとえば「8,3,5」とすると、1パターン目は「線8、空白3、線5」となりますが、2パターン目は「空白8、線3、空白5」となり線と空白の長さが入れ替わります。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <line x1="0" y1="0" x2="100" y2="100" stroke="red"
        stroke-width="1" stroke-dasharray="2,3,4,5"/>
    <circle cx="50" cy="30" r="20" stroke="blue"
        stroke-width="1" stroke-dasharray="2,4" fill="none"/>
</svg>
Picture

輪郭線(パス)描画  path 要素

属性
d 描画方法と座標を組み合わせたコマンドを指定する。
コマンドは1文字のアルファベットに続けて座標やパラメータを指定する。コマンドやパラメータはカンマか空白で区切って並べる(コマンド・パラメータ間はつなげてもよい)。座標はX、Yの順とする。
コマンドの大文字と小文字は座標指定方法で区別する。
大文字:絶対座標
小文字:相対座標
描画方法のコマンド列に従いグラフィックの輪郭を描画します。
描画する以外に、マスキング領域やクリッピング領域の指定にも利用されます。
d属性に指定するコマンドは以下があります。
d属性コマンド
M(m) 現在位置の移動
描画位置の座標を移動する。移動の軌跡は描画されない。
d="M 30,15 m 50,40"
最初の描画位置を決めるために、d属性の先頭は必ずMコマンドから開始する。
L(l) 直線の描画
現在位置から 指定する座標へ直線を描画する。
d="M 30,15 l 40,0 l 0,40 l -40,0 l 0,-40"
H(h) 水平線の描画
現在位置のY座標を維持し、X座標まで直線を描画する。
d="M 30,15 H 80"
V(v) 垂直線の描画
現在位置のX座標を維持し、Y座標まで直線を描画する。
d="M 20,50 v -20"
Z(z) 直線で図形を閉じる
現在位置から開始点へ直線を描画して図形を閉じる。
Z(z)はパラメータを指定しない。また大文字と小文字に区別はない。
d="M 10,10 l 40,0 l 0,40 l -40,0 Z"
Q(q) 二次ベジェ曲線の描画
現在位置を起点とし、続く制御点によりカーブする曲線を描画し最後の制御点に到達する曲線を描画する。
制御点は2つ指定する。d="M 10,20 Q 40,0 60,20"
C(c) 三次ベジェ曲線の描画
現在位置を起点とし、続く2つの制御点によりカーブする曲線を描画し最後の制御点に到達する曲線を描画する。
制御点は3つ指定する。d="M 20,20 C 10,35 40,50 20,70"
A(a) 楕円弧の描画
現在位置を起点とし、指定する座標までを楕円弧で描画する。次の7つのパラメータを指定する。
① X軸方向の楕円弧の半径
② Y軸方向の楕円弧の半径
③ 楕円の x軸の回転角度
④ 1なら長弧(large arc:180 度以上)、0なら短弧(small arc:180 度未満)
⑤ 1なら時計回り(clockwise)、0なら反時計回り(counterclockwise)
⑥ 楕円弧が終了するx座標
⑦ 楕円弧が終了するy座標
d="M 30,50 a 35,30 0 0,0 60,20"
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <path d="M 30,15 l 40,0 l 0,40 l -40,0"
        stroke="black" fill="none"/>
</svg>
Picture
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <path d="M 30,15 l 40,0 l 0,40 l -40,0 Z"
        stroke="black" fill="none"/>
</svg>
Picture
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <path d="M 10,20 Q 40,0 60,20"
            stroke="red" fill="none"/>
    <path d="M 20,20 C 10,35 40,50 20,70"
            stroke="blue" fill="none"/>
    <path d="M 30,50 a 35,30 0 0,0 60,20"
            stroke="green" fill="none"/>
</svg>
Picture

テキストを描画  text 要素

属性
x テキストのx座標(デフォルトで先頭)
y テキストベースラインのy座標
font-size フォントサイズ
font-family フォントファミリ名
以下のジェネリックフォントファミリは環境に応じたフォントが選択される。
serif/sans-serif/cursive/fantasy/monospace
font-weight フォントの太さ
normal/bold
font-style フォントスタイル
normal/italic/oblique
text-decoration テキスト装飾
none(なし=デフォルト)
underline(下線)
overline(上線)
line-through(取り消し線)
word-spacing 単語の間隔(normalを指定すると標準間隔になる)
letter-spacing 文字の間隔(normalを指定すると標準間隔になる)
text-anchor テキストの基準
start(先頭にあわせる)
middle(中央にあわせる)
end(終了にあわせる)
baseline-shift 垂直方向の移動
super(上付き)
sub(下付き)
パーセンテージ(負数の場合はベースライン下方向)
emなど長さ(負数の場合はベースライン下方向)
テキストを描画します。
テキストの属性は一般的なCSSで使われるものと共通です。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <text x="10" y="20" font-family="serif">
        serif
    </text>
    <text x="10" y="40" font-family="monospace">
        monospace
    </text>
    <text x="10" y="60" font-family="MS ゴシック">
        MSゴシック
    </text>
</svg>
Picture
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <text x="10" y="20" font-size="12pt" fill="forestgreen">
        Size 12pt
    </text>
    <text x="10" y="60" font-size="20pt" stroke-width="0.5"
            stroke="lightgreen" fill="aquamarine">
        Stroke
    </text>
</svg>
Picture
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <text x="10" y="20" font-weight="bold">
        bold
    </text>
    <text x="10" y="40" font-style="italic">
        italic
    </text>
    <text x="10" y="60" font-weight="bold" font-style="italic">
        bold italic
    </text>
    <text x="10" y="80" text-decoration="underline">
        underline
    </text>
</svg>
Picture
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <text x="10" y="20" word-spacing="6">I am dog</text>
    <text x="10" y="40" word-spacing="-2">I am dog</text>
    <text x="10" y="60" letter-spacing="2">I am dog</text>
    <text x="10" y="80" letter-spacing="-1">I am dog</text>
</svg>
Picture
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <g fill="mediumblue" font-size="12pt">
        <text x="50" y="20" text-anchor="start">start</text>
        <text x="50" y="40" text-anchor="middle">middle</text>
        <text x="50" y="60" text-anchor="end">end</text>
    </g>
</svg>
Picture

テキストの属性を部分変更  tspan  要素

text要素の途中のテキストに異なる属性を適用します。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <g fill="navy" font-size="8pt">
        <text x="10" y="20">
            I am <tspan font-size="12pt">not</tspan> a cat.
        </text>
        <text x="10" y="30">
            I am <tspan font-family="fantasy">not</tspan> a cat.
        </text>
        <text x="10" y="40">
            I am <tspan font-weight="bold">not</tspan> a cat.
        </text>
        <text x="10" y="60">
            I am <tspan text-decoration="underline">not</tspan> a cat.
        </text>
    </g>
</svg>
Picture
baseline-shift属性では途中の文字からベースラインを移動して上付き文字や下付き文字を表現できます。
この機能は環境により正しく表示されないことがあります。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <text x="10" y="40">X
        <tspan font-size="8pt" baseline-shift="super">1</tspan>
        <tspan font-size="8pt" baseline-shift="1em">2</tspan>
        <tspan font-size="8pt" baseline-shift="50%">3</tspan>
        <tspan font-size="8pt" baseline-shift="-50%">4</tspan>
        <tspan font-size="8pt" baseline-shift="-1em">5</tspan>
        <tspan font-size="8pt" baseline-shift="sub">6</tspan>
    </text>
</svg>
Picture

テキストをパスに沿って配置  textPath  要素

属性
xlink:href テキストを配置するガイドとなるパスのid名を指定する。
名前空間「xmlns:xlink="http://www.w3.org/1999/xlink"」の宣言が必要。
パスの線上に沿ってテキストを表示します。
ガイドとなるパスは、path要素にid属性で名前を設定します。
表示するテキストは、text要素の中でtextPath要素にパスのid名を参照します。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <path id="path1" d="M30,55 a35,23 0 1,1 40,0" fill="none"/>
    <text font-size="9" font-family="serif" fill="cadetblue">
        <textPath xlink:href="#path1">
            I am a cat. I am not a cat.
        </textPath>
    </text>
</svg>
Picture
path要素をdefs要素の中に入れると、パスが描画目的ではないガイドラインの定義であることをより明確にできます。
<defs>
<path id="path1" d="M30,55 a35,23 0 1,1 40,0" fill="none"/>
</defs>

グラフィックをグループ化  g 要素

属性
id グループの名称
g要素の中に記述されるグラフィックは、複数のグラフィックの集まりを、グループ化したオブジェクトとして扱うことができます。
g要素に設定する属性は、グループ内のグラフィックに共通して適用されます。
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http:/awww.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <g id="square"
        stroke-width="2" stroke="blueviolet" fill="lime">
        <rect x="10" y="10" width="60" height="60"/>
        <rect x="20" y="20" width="40" height="40"/>
        <rect x="30" y="30" width="20" height="20" fill="yellow"/>
    </g>
</svg>
Picture

グループの再利用  use 要素

属性
xlink:href 参照するグループのid名
グループ名の前に「#」を付ける。
名前空間「xmlns:xlink="http://www.w3.org/1999/xlink"」の宣言が必要。
グループ化したグラフィックのid属性に設定された名称をhref属性で参照することで、グラフィックを再描画できます。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <g id="square" stroke-width="2" stroke="blueviolet" fill="lime">
        <rect x="5" y="5" width="40" height="40"/>
        <rect x="15" y="15" width="20" height="20" fill="yellow"/>
    </g>
    <use xlink:href="#square" x="30" y="30"/>
</svg>
Picture

グラフィックをグループ定義  symbol 要素

属性
id グループの名称
g要素と同様にグラフィックをグループ化します。
g要素がグループ内のグラフィックを描画するのに対し、symbol要素の中は描画されません。use要素で利用することを前提として定義のみを行います。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <symbol id="square" stroke-width="2" stroke="blueviolet">
        <rect x="10" y="10" width="60" height="60"/>
        <rect x="20" y="20" width="40" height="40"/>
        <rect x="30" y="30" width="20" height="20"/>
    </symbol>
    <use xlink:href="#square" x="30" y="30"/>
</svg>
Picture

グラフィックを定義  defs 要素

属性
id グループの名称
defs要素の中のグラフィックを定義します。
defs要素で囲んだグラフィックは描画はされません。
id名を設定するグラフィックを、それ自体は描画せずにid名で他のグラフィックで利用できます。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
    <g id="square" stroke-width="2" stroke="blueviolet" fill="lime">
        <rect x="5" y="5" width="40" height="40"/>
        <rect x="15" y="15" width="20" height="20" fill="yellow"/>
    </g>
    </defs>
    <use xlink:href="#square" x="30" y="30"/>
</svg>
Picture

リンクの設定  link 要素

属性
xlink:href 参照するグループのid名。
名前空間「xmlns:xlink="http://www.w3.org/1999/xlink"」の宣言が必要。
SVGグラフィックをアンカーとする別のデータへのリンクを作成します。
リンク先はhref属性でURIを指定します。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <a xlink:href="http://www.yahoo.co.jp/">
        <rect x="20" y="40" width="60" height="20" fill="hotpink"/>
    </a>
</svg>
Picture

描画範囲(クリッピングパス)の定義  clipPath 要素

属性
id クリッピングパスの名称
clipPath要素が定義するグラフィックを「クリッピングパス」として、その内側の領域だけを切り抜いて表示します。
任意のグラフィックの clip-path属性にクリッピングパスの名前を指定すると、そのグラフィックはクリッピングパスの内側だけが表示されます。また、クリッピングパス自体は表示されません。
クリッピングパス適用属性
clip-path クリッピングパスを指定する。
clip-path="url(#クリッピングパスの名称)"
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg">
    <clipPath id="ellipseclip">
        <ellipse cx="50" cy="35" rx="45" ry="30"/>
    </clipPath>
    <g clip-path="url(#ellipseclip)">
        <circle cx="0" cy="100" r="80" fill="lavender"/>
        <circle cx="120" cy="0" r="70" fill="yellow"/>
        <circle cx="80" cy="60" r="20" fill="crimson"/>
    </g>
</svg>
Picture

画像を表示 image 要素

属性
xlink:href 画像ファイルのURIを指定する。
名前空間「xmlns:xlink="http://www.w3.org/1999/xlink"」の宣言が必要。
x y 領域の左上の点の座標
width height 領域の幅と高さ
長方形の領域内にラスター画像ファイル、または別のSVGを貼りつけて描画します。
width/height属性の指定範囲に元画像を拡大・縮小して表示します。ラスター画像はJPEGとPNGをサポートします。
<svg width="10cm" height="10cm" viewBox="0 0 100 100"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <image xlink:href="imagekyoto.jpg"
        x="10" y="10" width="50" height="40"/>
    <image xlink:href="headphone.svg"
        x="30" y="40" width="60" height="40"/>
</svg>
Picture