SVGの<svg>タグとは?初心者向けに役割・属性・使い方を徹底解説
SVGの<svg>タグとは、SVG画像全体の土台になるルート要素です。SVGで円、四角形、線、文字、パス、アイコン、ロゴ、グラフなどを描画するとき、基本的には最初に<svg>タグを用意し、その中に<circle>や<rect>などの図形要素を配置します。つまり、<svg>タグはSVGにおける「描画エリア」や「キャンバス」のような役割を持っています。
SVGは、Scalable Vector Graphicsの略で、拡大縮小しても劣化しにくいベクター画像形式です。PNGやJPEGのようにピクセルを並べて画像を表現するのではなく、図形、座標、線、塗り、パスなどの情報を使って画像を描きます。そのため、ロゴ、アイコン、UI部品、図解、チャートなど、形状がはっきりした画像に向いています。
そのSVGの中で最も基本になるのが<svg>タグです。<svg>タグがなければ、ブラウザはどこをSVGの描画領域として扱えばよいのか判断できません。たとえば、<circle>だけを書いても、通常は正しいSVGとして扱いにくくなります。<svg>タグで描画領域を作り、その内側に図形を置くことで、ブラウザは正しくSVGを表示できます。
本記事では、<svg>タグの意味、基本構文、役割、重要属性、座標システム、viewBoxによるレスポンシブ対応、複数要素の配置、HTMLへの直接埋め込み、SVGファイルとしての保存、CSS・JavaScript連携、よくあるミス、FAQまで初心者向けに分かりやすく解説します。
1. <svg>タグとは?
<svg>タグとは、SVG画像を作るための最上位要素です。すべてのSVG図形は、基本的にこの<svg>タグの内側に配置されます。たとえば、円を描く<circle>、四角形を描く<rect>、線を描く<line>、文字を描く<text>などは、<svg>タグの中に書くことで1つのSVG画像として表示されます。
分かりやすく言えば、<svg>タグは絵を描くための紙やキャンバスのようなものです。キャンバスがなければ、どこに図形を描くのか決められません。同じように、<svg>タグはSVGの表示領域、サイズ、座標の基準、内部要素の配置ルールを決めるために必要です。
1.1 <svg>タグの基本的な意味
| 項目 | 内容 |
|---|---|
| タグ名 | <svg> |
| 役割 | SVG画像全体のルート要素 |
| 主な用途 | 図形・アイコン・ロゴ・グラフの描画領域を作る |
| 内部に置ける要素 | <circle>、<rect>、<path>、<line>、<text>など |
| 重要属性 | width、height、viewBox、xmlns |
| Webでの使い方 | HTMLに直接埋め込む、または.svgファイルとして読み込む |
<svg>タグは、単に画像を囲むだけのタグではありません。描画領域のサイズを決めたり、内部の座標システムを定義したり、画像をレスポンシブに表示するための基準を設定したりします。そのため、SVGを理解するうえで最初に学ぶべき重要なタグです。
HTMLやCSSを学ぶときに<div>や<img>が基本になるように、SVGを学ぶときには<svg>タグが基本になります。SVGの図形要素を使いこなすには、まず<svg>タグが何をしているのかを理解することが大切です。
2. <svg>タグの基本構文
<svg>タグの最もシンプルな書き方は、widthとheightを指定して描画領域を作る方法です。次の例では、横幅200px、高さ200pxのSVG領域を作っています。
<svg width="200" height="200">
</svg>
このコードだけでは、まだ何も表示されません。理由は、<svg>タグで描画領域だけを作っており、その中に円や四角形などの図形が入っていないからです。<svg>タグはあくまで「描く場所」を用意するタグであり、実際の図形はその内側に追加します。
2.1 widthとheightの基本
| 属性 | 意味 | 例 |
|---|---|---|
width | SVGの表示幅を指定する | width="200" |
height | SVGの表示高さを指定する | height="200" |
| 単位なしの数値 | 通常はCSSピクセルとして扱われる | 200 |
%指定 | 親要素に対して相対的に表示する | width="100%" |
widthとheightは、ブラウザ上でSVGをどのくらいの大きさで表示するかを決めます。たとえば、width="200"、height="200"と書けば、200×200の正方形領域としてSVGが表示されます。
ただし、レスポンシブ対応を考える場合は、widthとheightだけでは不十分なことがあります。その場合は、後述するviewBoxを使って、内部座標と表示サイズを分けて管理することが重要になります。
3. <svg>タグの役割
<svg>タグの役割は、SVG画像の表示領域を作り、その中に図形要素を配置できるようにすることです。さらに、描画領域のサイズ、座標の基準、拡大縮小の挙動、名前空間なども管理します。つまり、SVG全体の基本設定を担当するタグです。
たとえば、次のコードでは、<svg>タグが300×200の描画領域を作り、その中に青い円を描いています。
<svg width="300" height="200">
<circle cx="100" cy="100" r="50" fill="blue" />
</svg>
この例では、<svg>が描画エリアを作り、<circle>が円を描いています。<circle>だけでは、どの領域に描くのか、どの座標を基準にするのかが明確ではありません。<svg>タグがあることで、内部の図形要素が正しく配置されます。
3.1 <svg>タグが担当する主な機能
| 機能 | 内容 |
|---|---|
| 描画領域の作成 | SVG画像を表示する範囲を決める |
| 図形要素の格納 | 円・四角形・線・文字などを内包する |
| 座標システムの定義 | 図形の位置を決める基準を作る |
| サイズ指定 | 表示幅と表示高さを管理する |
| レスポンシブ対応 | viewBoxを使って柔軟に拡大縮小できる |
| 名前空間の指定 | 独立したSVGファイルでXML名前空間を宣言する |
<svg>タグを理解すると、SVG全体の考え方が分かりやすくなります。SVGでは、すべての図形が座標によって配置されます。その座標の基準になるのが<svg>タグの描画領域です。
Web制作でSVGを使う場合、<svg>タグの設計が画像の扱いやすさに大きく影響します。特に、ロゴやアイコンをレスポンシブに表示したい場合は、width、height、viewBoxの関係を理解しておくことが重要です。
4. <svg>タグの重要属性
<svg>タグでよく使う重要属性には、width、height、viewBox、xmlnsがあります。これらの属性を理解すると、SVGの表示サイズ、内部座標、レスポンシブ対応、独立ファイルとしての正しい書き方が分かるようになります。
特に重要なのはviewBoxです。widthとheightは表示サイズを決めますが、viewBoxはSVG内部の座標システムを決めます。この2つを分けて考えられるようになると、SVGを柔軟に拡大縮小できるようになります。
4.1 重要属性の一覧
| 属性 | 役割 | よく使う場面 |
|---|---|---|
width | 表示上の横幅を指定する | 固定サイズのSVG |
height | 表示上の高さを指定する | 固定サイズのSVG |
viewBox | 内部座標システムを指定する | レスポンシブSVG |
xmlns | SVGのXML名前空間を指定する | 独立したSVGファイル |
fill | 全体または要素の塗り色を指定する | 色指定 |
stroke | 線の色を指定する | 線画やアイコン |
class | CSSで操作するためのクラス名 | スタイル制御 |
id | JavaScriptやCSSで参照する識別子 | 動的操作 |
これらの属性は、すべてを常に書く必要はありません。HTML内に直接SVGを書く場合は、width、height、viewBoxを中心に考えれば十分なことが多いです。一方、.svgファイルとして保存して使う場合は、xmlnsも書いておくのが一般的です。
5. width属性とは?
width属性は、SVGの表示幅を指定する属性です。たとえば、width="500"と書くと、SVGは横幅500pxとして表示されます。単位を省略した場合、通常はCSSピクセルとして扱われます。
<svg width="500" height="300">
</svg>
widthは、SVGの外側の表示サイズに関係します。つまり、ブラウザ上でどれくらいの横幅で見えるかを指定します。ただし、SVG内部の座標システムを決めるわけではありません。内部座標を決めるのはviewBoxです。
固定サイズのアイコンや図形を作る場合は、widthとheightだけでも簡単に表示できます。しかし、レスポンシブデザインでは画面幅に応じてサイズを変えたいことが多いため、width="100%"のような指定や、CSSでのサイズ調整を使うこともあります。
6. height属性とは?
height属性は、SVGの表示高さを指定する属性です。widthと組み合わせて使うことで、SVGの表示領域の大きさを決めます。たとえば、横幅500px、高さ300pxのSVGを作る場合は次のように書きます。
<svg width="500" height="300">
</svg>
heightもwidthと同じく、表示上のサイズを決める属性です。内部座標そのものを直接決めるわけではありません。たとえば、height="300"と書いても、内部の座標が0〜300になるとは限りません。内部座標を明確に管理したい場合は、viewBoxを使います。
SVGをレスポンシブに使う場合、heightを固定しすぎると表示が崩れることがあります。たとえば、横幅だけが画面に合わせて変わり、高さが固定されていると、意図しない余白や比率の崩れが起きる場合があります。そのため、レスポンシブ対応ではviewBoxとCSSを組み合わせて、比率を保つ設計が重要です。
7. viewBox属性とは?
viewBox属性は、SVGをレスポンシブに扱ううえで最も重要な属性です。viewBoxは、SVG内部の座標システムを定義します。表示サイズを決めるwidthやheightとは異なり、図形をどの座標範囲の中で描くかを指定します。
基本構文は次の通りです。
<svg viewBox="0 0 100 100">
</svg>
viewBoxは、4つの値で構成されます。
viewBox="min-x min-y width height"
7.1 viewBoxの値の意味
| 値 | 意味 | 例 |
|---|---|---|
min-x | 表示領域の開始X座標 | 0 |
min-y | 表示領域の開始Y座標 | 0 |
width | 内部座標の幅 | 100 |
height | 内部座標の高さ | 100 |
たとえば、viewBox="0 0 100 100"は、内部座標として横100、縦100の空間を使うという意味です。この中でcx="50"、cy="50"の円を描くと、ちょうど中央に配置されます。
viewBoxの便利な点は、内部座標と表示サイズを分離できることです。内部では100×100の座標で設計しながら、実際の表示では200×200、500×500、100%幅などに拡大縮小できます。これにより、SVGを画面サイズに合わせて柔軟に表示できます。
8. xmlns属性とは?
xmlns属性は、SVGのXML名前空間を指定する属性です。特に、SVGを独立した.svgファイルとして保存する場合によく使われます。名前空間を指定することで、そのXML文書がSVGとして解釈されるべきものであることを明確にします。
<svg xmlns="http://www.w3.org/2000/svg">
</svg>
HTML内にインラインSVGとして直接書く場合、ブラウザが文脈からSVGとして解釈してくれるため、xmlnsを省略しても表示されることがあります。しかし、独立したSVGファイルとして保存する場合は、xmlnsを書いておくのが一般的です。
xmlnsは初心者には少し分かりにくい属性ですが、基本的には「これはSVGですよ」と宣言するための情報だと考えれば十分です。SVGファイルを書き出したときに自動的に含まれていることも多いため、手作業で毎回意識する場面は多くありません。
9. 初めてのSVG例
ここでは、<svg>タグの中に円を描く簡単な例を見てみます。次のコードでは、200×200のSVG領域を作り、その中央にオレンジ色の円を描画しています。
<svg width="200" height="200">
<circle
cx="100"
cy="100"
r="80"
fill="orange" />
</svg>
このコードでは、<svg>が描画領域を作り、<circle>が円を描いています。cx="100"とcy="100"は円の中心位置を表し、r="80"は半径を表します。fill="orange"は円の塗り色を指定しています。
9.1 このコードの意味
| コード | 意味 |
|---|---|
<svg width="200" height="200"> | 200×200のSVG領域を作る |
<circle> | 円を描く |
cx="100" | 円の中心X座標を100にする |
cy="100" | 円の中心Y座標を100にする |
r="80" | 半径を80にする |
fill="orange" | 塗り色をオレンジにする |
この例では、SVG領域が200×200で、円の中心が100×100なので、円はちょうど中央に配置されます。SVGでは、このように座標を使って図形の位置を指定します。
初心者がSVGを学ぶときは、まず<svg>で領域を作り、その中に<circle>や<rect>を置く練習から始めると理解しやすくなります。
10. SVGの座標システム
SVGでは、内部の図形は座標を使って配置されます。通常、SVGの座標は左上を(0, 0)として、右方向にX座標が増え、下方向にY座標が増えます。これはHTMLやCanvasなどの画面座標と似た考え方です。
たとえば、次のコードでは、赤い円を左上寄りに表示しています。
<svg width="300" height="300">
<circle
cx="50"
cy="50"
r="20"
fill="red" />
</svg>
この例では、円の中心が(50, 50)にあります。つまり、SVG領域の左上から右に50、下に50の位置に円の中心が置かれます。
10.1 SVG座標の基本
| 座標 | 意味 |
|---|---|
(0, 0) | SVG領域の左上 |
| X座標 | 右に進むほど大きくなる |
| Y座標 | 下に進むほど大きくなる |
cx | 円の中心X座標 |
cy | 円の中心Y座標 |
x | 四角形や文字のX座標 |
y | 四角形や文字のY座標 |
SVGで図形を正確に配置するには、この座標システムを理解することが重要です。特に、アイコンやロゴを作る場合、図形の中心や余白を正しく調整する必要があります。
また、viewBoxを使うと、見た目の表示サイズとは別に内部座標を設定できます。たとえば、viewBox="0 0 100 100"とすれば、内部では100×100の座標空間として設計し、実際には好きなサイズで表示できます。
11. viewBoxを使ったレスポンシブSVG
SVGをレスポンシブに表示したい場合は、viewBoxを使うのが基本です。viewBoxを指定すると、SVG内部の座標システムを保ったまま、表示サイズだけを柔軟に変更できます。
<svg width="100%" viewBox="0 0 100 100">
<circle
cx="50"
cy="50"
r="40"
fill="blue" />
</svg>
この例では、SVGの表示幅を100%にし、内部座標を0 0 100 100に設定しています。円は内部座標の中心である(50, 50)に配置され、半径は40です。表示幅が変わっても、SVG全体が比率を保って拡大縮小されます。
11.1 viewBoxを使うメリット
| メリット | 内容 |
|---|---|
| レスポンシブ対応しやすい | 画面サイズに合わせて拡大縮小できる |
| 画像が劣化しにくい | ベクターなので拡大しても鮮明 |
| 内部座標を固定できる | 設計しやすい座標で管理できる |
| アイコン化しやすい | 24×24や100×100などの基準で作りやすい |
| CSSと相性が良い | 表示サイズをCSSで調整しやすい |
viewBoxを使わずにwidthとheightだけでSVGを作ると、固定サイズでは問題なくても、画面サイズに応じた柔軟な表示が難しくなることがあります。そのため、実務ではviewBoxを指定する書き方がよく使われます。
特に、アイコンやロゴではviewBoxが重要です。たとえば、アイコンライブラリではviewBox="0 0 24 24"のような形式がよく使われます。これは、内部を24×24の座標空間として設計し、表示サイズはCSSで自由に変えられるようにするためです。
12. 1つの<svg>に複数の要素を入れる
1つの<svg>タグの中には、複数の図形要素を入れることができます。円、四角形、線、文字、パスなどを組み合わせることで、複雑なアイコンや図解を作ることができます。
<svg width="300" height="300">
<rect
x="20"
y="20"
width="80"
height="80"
fill="green" />
<circle
cx="180"
cy="60"
r="40"
fill="blue" />
</svg>
この例では、1つのSVG領域の中に、緑の四角形と青い円を配置しています。<rect>は四角形を描く要素で、xとyで位置を指定し、widthとheightで大きさを指定します。<circle>は円を描く要素で、cx、cy、rで位置と半径を指定します。
12.1 <svg>の中でよく使う要素
| 要素 | 役割 |
|---|---|
<circle> | 円を描く |
<rect> | 四角形を描く |
<ellipse> | 楕円を描く |
<line> | 直線を描く |
<polyline> | 複数点をつないだ線を描く |
<polygon> | 多角形を描く |
<path> | 複雑な図形や曲線を描く |
<text> | 文字を描く |
<g> | 複数要素をグループ化する |
SVGでは、これらの要素を組み合わせて1つの画像を作ります。単純なアイコンなら数個の要素で作れますが、複雑なイラストやロゴでは多くの<path>が使われることもあります。
また、<g>要素を使うと、複数の図形をグループ化できます。グループ全体に同じスタイルを適用したり、まとめて移動・回転させたりできるため、複雑なSVGを整理するのに役立ちます。
13. SVGをHTMLに直接埋め込む方法
SVGは、HTMLの中に直接書くことができます。この方法をインラインSVGと呼ぶことがあります。インラインSVGは、CSSやJavaScriptで内部要素を操作しやすいというメリットがあります。
<!DOCTYPE html>
<html>
<body>
<svg width="200" height="200">
<circle
cx="100"
cy="100"
r="80"
fill="red" />
</svg>
</body>
</html>
このコードをブラウザで表示すると、赤い円が描画されます。特別なプラグインは不要です。現代の主要ブラウザは、SVGを標準でサポートしています。
13.1 インラインSVGのメリット
| メリット | 内容 |
|---|---|
| CSSで操作しやすい | 内部要素に直接スタイルを当てられる |
| JavaScriptで操作しやすい | querySelectorで要素を取得できる |
| HTTPリクエストを減らせる | 小さなSVGならHTML内に含められる |
| 状態変化を作りやすい | hoverやactiveに対応しやすい |
一方で、インラインSVGを多用するとHTMLが長くなり、コードの見通しが悪くなる場合があります。小さなアイコンや動的に操作したいSVGには向いていますが、大きなSVGを大量に埋め込む場合は、外部ファイルとして管理する方法も検討するとよいです。
14. SVGファイルとして保存する方法
SVGは、.svgという拡張子の独立ファイルとして保存できます。たとえば、logo.svgというファイルを作り、その中にSVGコードを書けば、画像ファイルとしてWebページから読み込めます。
<svg
xmlns="http://www.w3.org/2000/svg"
width="200"
height="200">
<circle
cx="100"
cy="100"
r="50"
fill="blue" />
</svg>
このようなファイルをlogo.svgとして保存すれば、HTMLの<img>タグで読み込めます。
<img src="logo.svg" alt="Logo">
14.1 SVGファイルとして使うメリット
| メリット | 内容 |
|---|---|
| 再利用しやすい | 複数ページで同じSVGを使える |
| HTMLが短くなる | SVGコードを外部ファイルに分離できる |
| キャッシュされやすい | ブラウザキャッシュを活用できる |
| 管理しやすい | ロゴやアイコンをファイル単位で整理できる |
外部SVGファイルとして使う方法は、ロゴや装飾画像など、内部要素を細かく操作する必要がない場合に便利です。一方、SVG内部の色や形をCSSやJavaScriptで細かく変更したい場合は、インラインSVGの方が扱いやすいことがあります。
15. SVGとCSSの連携
SVGはCSSと連携できます。たとえば、SVG内の図形にclassを付けて、CSSで色や線の太さを変更できます。これにより、HTMLやCSSの設計と同じ感覚でSVGの見た目を管理できます。
<svg width="100" height="100">
<circle
class="icon"
cx="50"
cy="50"
r="40" />
</svg>
.icon {
fill: green;
}
この例では、class="icon"を付けた円に対して、CSSでfill: green;を指定しています。つまり、SVGの色をHTML内の属性ではなくCSSで管理しています。
15.1 CSSでよく操作するSVGプロパティ
| プロパティ | 役割 |
|---|---|
fill | 図形の塗り色を指定する |
stroke | 線の色を指定する |
stroke-width | 線の太さを指定する |
opacity | 透明度を指定する |
transform | 回転・拡大・移動などを指定する |
filter | 影やぼかしなどの効果を指定する |
CSSと連携できることで、SVGはUIコンポーネントとして扱いやすくなります。たとえば、hover時にアイコンの色を変える、ダークモードでSVGの色を変える、ボタンの状態に応じて線の色を変えるといった使い方ができます。
ただし、外部ファイルとして<img>で読み込んだSVGの内部要素は、通常のCSSから直接操作しにくい場合があります。内部の図形を細かくCSSで変更したい場合は、インラインSVGとして書く方法が向いています。
16. SVGとJavaScriptの連携
SVGはJavaScriptでも操作できます。インラインSVGとしてHTML内に書かれている場合、SVG内部の要素はDOMとして扱えるため、querySelectorなどを使って取得し、属性を変更できます。
<svg width="100" height="100">
<circle
cx="50"
cy="50"
r="40"
fill="blue" />
</svg>
<script>
document
.querySelector("circle")
.setAttribute("fill", "red");
</script>
この例では、JavaScriptで<circle>要素を取得し、fill属性をredに変更しています。これにより、青い円が赤い円に変わります。
16.1 JavaScriptでできること
| 操作 | 内容 |
|---|---|
| 色変更 | fillやstrokeを変更する |
| サイズ変更 | r、width、heightなどを変更する |
| 位置変更 | x、y、cx、cyを変更する |
| アニメーション | 時間に応じて属性を変える |
| イベント処理 | クリックやhoverに反応させる |
| データ可視化 | 数値に応じて図形を更新する |
JavaScriptとSVGを組み合わせると、インタラクティブなグラフ、地図、ボタン、アニメーションアイコンなどを作れます。特に、ユーザー操作に応じて図形を変化させたい場合に便利です。
ただし、SVG要素が非常に多い場合、JavaScriptで頻繁にDOM操作を行うとパフォーマンスが低下する可能性があります。大量の要素を高速に描画する必要がある場合は、CanvasやWebGLとの使い分けも検討する必要があります。
17. <svg>タグでよくあるミス
初心者がSVGを使うときによくあるミスには、<svg>タグを書き忘れる、widthやheightを指定しない、viewBoxを使わない、座標の考え方を誤解する、CSSで操作できると思ったのに外部SVGで操作できない、などがあります。これらのミスは、SVGの基本構造を理解すれば避けやすくなります。
特に多いのは、図形要素だけを書いてしまうミスです。たとえば、<circle>だけを書くと、SVGの描画領域が定義されていないため、期待どおりに表示されないことがあります。基本的には、図形要素は<svg>タグの中に入れる必要があります。
17.1 <svg>タグを書き忘れる
間違った例は次の通りです。
<circle cx="50" cy="50" r="40" />
正しい例は次の通りです。
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" />
</svg>
<circle>はSVGの図形要素ですが、単体で書くのではなく、<svg>タグの中に入れるのが基本です。<svg>タグが描画領域を作り、その中に円を配置するという構造を意識すると理解しやすくなります。
17.2 widthまたはheightを指定しない
widthやheightを指定しない場合、表示サイズが意図どおりにならないことがあります。
<svg>
<circle cx="50" cy="50" r="40" />
</svg>
このような書き方でも表示される場合はありますが、ブラウザやCSSの影響で意図しないサイズになることがあります。初心者のうちは、width、height、またはviewBoxを明示することをおすすめします。
17.3 viewBoxを使わない
viewBoxを使わないSVGは、固定サイズでは表示できても、レスポンシブ対応が難しくなることがあります。特に、ロゴやアイコンをさまざまなサイズで使いたい場合は、viewBoxを指定した方が扱いやすくなります。
<svg viewBox="0 0 100 100">
<circle cx="50" cy="50" r="40" />
</svg>
viewBoxを使うことで、内部座標を固定しながら、表示サイズだけをCSSや属性で柔軟に変更できます。実務でSVGを使うなら、viewBoxは必ず理解しておきたい属性です。
18. <svg>タグと他のSVG要素の関係
<svg>タグは、SVG全体の親要素です。その中に、円、四角形、線、パス、文字などの子要素を配置します。HTMLで<body>の中に見出しや段落を置くのと同じように、SVGでは<svg>の中に描画要素を置きます。
構造を簡単に表すと、次のようになります。
<svg>
│
├── <circle>
├── <rect>
├── <line>
├── <ellipse>
├── <polygon>
├── <path>
└── <text>
<svg>タグがなければ、これらの図形要素はどの描画領域に属するのか分かりにくくなります。つまり、<svg>タグはSVG要素全体をまとめる親コンテナであり、内部のすべての図形要素の基準になります。
18.1 親要素としての<svg>
<svg>タグは、内部の図形をまとめる親要素です。円や四角形などの図形は、<svg>タグの座標システムの中に配置されます。<svg>が300×300の領域を持っていれば、その中でxやy、cxやcyを使って位置を決めます。
この関係を理解すると、SVGの配置ミスを減らせます。たとえば、円を中央に置きたい場合は、SVGのサイズやviewBoxを確認し、その中央にあたる座標を指定する必要があります。内部要素だけを見るのではなく、必ず親である<svg>の設定も確認することが大切です。
18.2 子要素としての図形要素
<circle>、<rect>、<path>、<line>などは、<svg>の中に置かれる子要素です。これらは、それぞれ異なる図形を描くための要素です。円を描くなら<circle>、四角形を描くなら<rect>、複雑な形を描くなら<path>を使います。
子要素は、親である<svg>の座標システムに従って表示されます。そのため、同じ<circle cx="50" cy="50">でも、親SVGのviewBoxやサイズが違えば、見え方が変わることがあります。SVGでは、親要素と子要素の関係をセットで考えることが重要です。
19. 実務での<svg>タグの使い方
実務では、<svg>タグはロゴ、アイコン、UIパーツ、図解、グラフなどで使われます。小さなアイコンであればインラインSVGとしてHTMLやコンポーネント内に直接書くことがあり、ロゴや装飾画像であれば.svgファイルとして外部管理することもあります。
フロントエンド開発では、SVGをコンポーネント化して使うことも多いです。ReactやVueなどでは、SVGアイコンをコンポーネントとして扱い、propsによってサイズや色を変える設計がよく使われます。これにより、同じSVGを複数の場面で再利用しやすくなります。
また、デザインシステムでは、SVGアイコンのサイズ、線幅、色、余白、viewBoxなどを統一することが重要です。アイコンごとにviewBoxや余白がバラバラだと、UI上で位置が揃わなかったり、サイズ感が不自然になったりします。<svg>タグの設計は、見た目の一貫性にも関係します。
20. FAQ
20.1 <svg>タグは何に使いますか?
<svg>タグは、SVG画像の描画領域を作るために使います。円、四角形、線、文字、パスなどのSVG要素は、基本的に<svg>タグの中に配置されます。つまり、<svg>タグはSVG全体の親コンテナです。
Web制作では、ロゴ、アイコン、図表、UI部品などを表示するために<svg>タグを使います。単なる画像表示だけでなく、CSSやJavaScriptと組み合わせて動的な表現を作ることもできます。
20.2 <svg>タグの中に複数の図形を入れられますか?
はい、1つの<svg>タグの中に複数の図形を入れられます。<circle>、<rect>、<line>、<path>、<text>などを組み合わせて、複雑なアイコンや図解を作ることができます。
複数の要素をまとめたい場合は、<g>タグを使ってグループ化することもできます。グループ化すると、複数の図形にまとめてスタイルや変形を適用できるため、複雑なSVGを管理しやすくなります。
20.3 viewBoxは何のために使いますか?
viewBoxは、SVG内部の座標システムを設定するために使います。viewBox="0 0 100 100"のように指定すると、内部座標として横100、縦100の空間を使うことになります。
viewBoxを使うと、SVGをレスポンシブに表示しやすくなります。内部座標を固定しながら、表示サイズだけをCSSや属性で変更できるため、ロゴやアイコンをさまざまなサイズで使う場合に便利です。
20.4 widthとviewBoxの違いは何ですか?
widthはSVGの表示上の横幅を指定する属性です。一方、viewBoxはSVG内部の座標システムを指定する属性です。つまり、widthは外側の表示サイズ、viewBoxは内側の設計空間を決めます。
たとえば、viewBox="0 0 100 100"で内部を100×100として設計し、width="200"で表示幅を200pxにすることができます。この場合、内部座標は100×100のまま、表示だけが200pxに拡大されます。
20.5 SVGはCSSで操作できますか?
はい、SVGはCSSで操作できます。fill、stroke、stroke-width、opacity、transformなどを使って、色、線、透明度、変形などを制御できます。インラインSVGであれば、内部要素にクラスを付けてCSSを適用しやすいです。
ただし、<img src="icon.svg">のように外部ファイルとして読み込んだSVGは、内部要素を通常のCSSから直接操作しにくい場合があります。内部要素を細かく制御したい場合は、インラインSVGを使うと便利です。
20.6 SVGはJavaScriptで操作できますか?
はい、インラインSVGであればJavaScriptで操作できます。SVG内部の<circle>や<rect>などをquerySelectorで取得し、setAttributeを使って色や位置、サイズを変更できます。
この仕組みを使うと、クリックに応じて色を変える、数値に応じてグラフを更新する、アニメーションを作るといったことができます。ただし、SVG要素が非常に多い場合はDOM操作が重くなる可能性があるため、パフォーマンスには注意が必要です。
20.7 SVGを表示するためにプラグインは必要ですか?
いいえ、現代の主要ブラウザではSVGを標準でサポートしているため、特別なプラグインは必要ありません。HTML内に直接SVGを書いたり、.svgファイルを<img>タグで読み込んだりできます。
ただし、非常に古いブラウザや特殊な環境では対応に注意が必要な場合があります。一般的な現代Web制作では、SVGは標準的な画像形式として安心して利用できます。
おわりに
<svg>タグは、SVGを扱ううえで最も基本となる要素です。SVG全体の描画領域を作り、その中に円、四角形、線、文字、パスなどの図形要素を配置します。もしSVGを1枚の絵だと考えるなら、<svg>タグはその絵を描くためのキャンバスです。
<svg>タグでは、widthやheightで表示サイズを指定し、viewBoxで内部座標システムを定義します。特にviewBoxは、SVGをレスポンシブに表示するために重要です。内部座標と表示サイズを分けて考えられるようになると、ロゴやアイコンを柔軟に扱えるようになります。
また、SVGはHTMLに直接埋め込むことも、.svgファイルとして保存して読み込むこともできます。インラインSVGならCSSやJavaScriptで内部要素を操作しやすく、外部ファイルなら再利用やキャッシュ管理がしやすくなります。用途に応じて使い分けることが重要です。
初心者がSVGを学ぶときは、まず<svg width="..." height="...">で描画領域を作り、その中に<circle>や<rect>を入れるところから始めると理解しやすいです。その後、viewBox、CSS連携、JavaScript操作を学ぶことで、アイコン、ロゴ、グラフ、インタラクティブなUI表現まで応用できるようになります。
<svg>タグを理解することは、SVGを使いこなす第一歩です。Web上で美しく、軽量で、拡大縮小に強いベクター画像を扱うために、まずは<svg>タグの役割と基本属性をしっかり押さえておきましょう。
EN
JP
KR