SVGについて – 塗りについて
図形を着色する
stroke属性が図形を囲む線の着色、fill属性が図形内部の着色です。
[js]
<!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>
[/js]
実行結果
stroke属性の値は
[js]
色名
RGB値
16進数
RGBA値
[/js]
の表記方法になります。
透明度を決定する
図形を囲む線の透明度はstroke-opacity属性、
図形の透明度はfill-opacity属性でそれぞれ決定します。
[js]
<!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>
[/js]
実行結果
ストローク(線の種類)を決定する
ストロークの属性(stroke-linecap)を指定すると、ストロークの端の描画方法を制御できます。
属性の値と効果は以下になります。
[js]
stroke-width 幅
stroke-linecap 形状
butt ストローク方向に垂直な直線
square ストロークの終端をstroke-widthの半分の値で描画(垂直)
round ストロークの終端を丸める(非垂直に描画)
[/js]
サンプル
[js]
<!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>
[/js]
実行結果
ストローク(線の種類)を決定する (破線)
ストロークの線種(stroke-dasharray)を制御できます。
値は「カンマ区切りで複数の数値」で指定できます。
下記の例では、「stroke-dasharray = “15, 5″」としており、
動作例を見てみると、実線で15ピクセル描画した後、5ピクセルの空白、その次にまた実線で15ピクセル、空白で5ピクセルという順で線が描画されています。
[js]
<!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>
[/js]
実行結果
stroke-dasharrayの値をカンマ区切りで複数の数値を記載したパターンを試します。
下記のサンプルを用意しました。
[js]
<!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>
[/js]
画面にアクセスすると下記のような表示になります。
実行結果
この破線の描画ルールは、「15, 5, 30」の各ピクセルごとに、実線 → 空白 → 実線 という幅で破線が描画されています。
また、始点から終点まで上記のルールを繰り返して描画します。
各、実線と空白、そして幅のルールがわかりやすいように数値と色をつけたものが下記の図です。
最初、赤文字で「15, 5, 30」の間隔で破線(実線 → 空白 → 実線)を描画し、
次に、青文字で「15, 5, 30」の間隔で破線(空白 → 実線 → 空白)を描画しています。
その次に、また赤文字の「15, 5, 30」の間隔で描画がされ、その後、青文字での描画 → 赤文字での描画 ・・・と線分が終わるまで繰り返されます。
(注:図形のサイズは、数値をわかりやすくする為に拡大しています)