SVGについて – 塗りについて

javascript

SVGについて – 塗りについて

図形を着色する

stroke属性が図形を囲む線の着色、fill属性が図形内部の着色です。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d            = "M 20 20
                        A 20 20 0 0 1 100 100"
        stroke       = "#4f4f4f"
        stroke-width = "1"
        fill         = "#cccccc"
    />
</svg>

</body>
</html>

サーバ上のHTMLはこちら(test1.html)

実行結果

stroke属性の値は

色名
RGB値
16進数
RGBA値

の表記方法になります。

透明度を決定する

図形を囲む線の透明度はstroke-opacity属性、
図形の透明度はfill-opacity属性でそれぞれ決定します。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d              = "M 20 20
                          A 20 20 0 0 1 100 100"
        stroke         = "#4f4f4f"
        stroke-width   = "1"
        stroke-opacity = "0.3"
        fill           = "#cccccc"
        fill-opacity   = "0.3"
    />
</svg>

</body>
</html>

サーバ上のHTMLはこちら(test2.html)

実行結果

ストローク(線の種類)を決定する

ストロークの属性(stroke-linecap)を指定すると、ストロークの端の描画方法を制御できます。
属性の値と効果は以下になります。

stroke-width      幅
stroke-linecap    形状
    butt    ストローク方向に垂直な直線
    square  ストロークの終端をstroke-widthの半分の値で描画(垂直)
    round   ストロークの終端を丸める(非垂直に描画)

サンプル

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div>例1 (butt)</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d              = "M 30 30
                          A 30 30 0 0 1 110 110"
        stroke         = "#4f4f4f"
        stroke-width   = "15"
        stroke-linecap = "butt"
        stroke-opacity = "0.3"
        fill           = "#cccccc"
        fill-opacity   = "0.3"
    />
</svg>

<div>例2 (square)</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d              = "M 30 30
                          A 30 30 0 0 1 110 110"
        stroke         = "#4f4f4f"
        stroke-width   = "15"
        stroke-linecap = "square"
        stroke-opacity = "0.3"
        fill           = "#cccccc"
        fill-opacity   = "0.3"
    />
</svg>

<div>例3 (round)</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d              = "M 30 30
                          A 30 30 0 0 1 110 110"
        stroke         = "#4f4f4f"
        stroke-width   = "15"
        stroke-linecap = "round"
        stroke-opacity = "0.3"
        fill           = "#cccccc"
        fill-opacity   = "0.3"
    />
</svg>

</body>
</html>

サーバ上のHTMLはこちら(test3.html)

実行結果

例1 (butt)

例2 (square)

例3 (round)

ストローク(線の種類)を決定する (破線)

ストロークの線種(stroke-dasharray)を制御できます。

値は「カンマ区切りで複数の数値」で指定できます。
下記の例では、「stroke-dasharray = “15, 5″」としており、
動作例を見てみると、実線で15ピクセル描画した後、5ピクセルの空白、その次にまた実線で15ピクセル、空白で5ピクセルという順で線が描画されています。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div>例1</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d                = "M 30 30
                            A 30 30 0 0 1 110 110"
        stroke           = "#4f4f4f"
        stroke-width     = "15"
        stroke-linecap   = "butt"
        stroke-dasharray = "15, 5"
        stroke-opacity   = "0.3"
        fill             = "#cccccc"
        fill-opacity     = "0.3"
    />
</svg>

</body>
</html>

実行結果

サーバ上のHTMLはこちら(test4.html)

stroke-dasharrayの値をカンマ区切りで複数の数値を記載したパターンを試します。
下記のサンプルを用意しました。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>テストHTML</title>
</head>
<body>

<div>例1</div>
<svg width="200" height="200" viewBox="0 0 200 200">
    <path 
        d                = "M 30 30
                            A 30 30 0 0 1 110 110"
        stroke           = "#4f4f4f"
        stroke-width     = "15"
        stroke-linecap   = "butt"
        stroke-dasharray = "15, 5, 30"
        stroke-opacity   = "0.3"
        fill             = "#cccccc"
        fill-opacity     = "0.3"
    />
</svg>

</body>
</html>

サーバ上のHTMLはこちら(test5.html)

画面にアクセスすると下記のような表示になります。

実行結果

この破線の描画ルールは、「15, 5, 30」の各ピクセルごとに、実線 → 空白 → 実線 という幅で破線が描画されています。
また、始点から終点まで上記のルールを繰り返して描画します。

各、実線と空白、そして幅のルールがわかりやすいように数値と色をつけたものが下記の図です。

最初、赤文字で「15, 5, 30」の間隔で破線(実線 → 空白 → 実線)を描画し、
次に、青文字で「15, 5, 30」の間隔で破線(空白 → 実線 → 空白)を描画しています。

その次に、また赤文字の「15, 5, 30」の間隔で描画がされ、その後、青文字での描画 → 赤文字での描画 ・・・と線分が終わるまで繰り返されます。


(注:図形のサイズは、数値をわかりやすくする為に拡大しています)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です