SVG(Scalable Vector Graphics)は、XMLベースのベクター画像フォーマットの一つです。主にWebサイトやアプリケーションで、解像度に依存しないグラフィックを表示するために使用されます。
<svg> タグを使って直接記述する(インラインSVG)
- HTML内に直接書くので、CSSやJavaScriptで簡単に制御可能
- DOM(Document Object Model)として扱える
- 読み込みが早いが、コードが長くなる場合がある
See the Pen svg-exp001 by Miki Iwamura (@robby_b9) on CodePen.
<img> タグで外部SVGファイルを読み込む
HTMLがシンプルになるキャッシュが効くため、パフォーマンスが向上するJavaScriptやCSSで直接操作できない
<img src="image.svg" width="100" height="100" alt="SVG画像">
CSSの background-image を使う
- 背景として設定できるので、デザインの一部として使いやすい
- インタラクティブな要素には向かない
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSSでSVGを背景に設定</title>
<style>
.svg-background {
width: 200px;
height: 200px;
background-image: url('image.svg');
background-size: cover;
}
</style>
</head>
<body>
<div class="svg-background"></div>
</body>
</html>
<object> タグを使う
<img>よりも拡張性があり、SVG内の要素にアクセスできる- ただし、外部ファイルとして扱われるため、スタイリングやスクリプトの適用に制約がある
<object type="image/svg+xml" data="image.svg" width="100" height="100"></object>
<iframe> タグを使う
- 独立したコンテンツとして読み込むので、スクリプトやスタイルを独自に適用できる
- ただし、DOMを直接操作するのは難しい
<iframe src="image.svg" width="100" height="100"></iframe>
<use> タグを使って再利用する
- インラインSVG内でIDを指定し、他の部分で再利用可能
- 同じアイコンを複数使う場合に便利
See the Pen svg-exp002 by Miki Iwamura (@robby_b9) on CodePen.
<symbol>を定義する<svg style="display: none;">内にidを持つ<symbol>を定義。viewBoxを適切に設定すると、スケーリングしやすくなる。- 画面には直接表示されないが、
<use>で再利用できる。
<use>で再利用するhref="#icon-circle"のように指定することで、シンボルを呼び出す。- 複数回再利用できるので、コードの重複を減らせる。
- サイズの変更
<svg width="150" height="150">のように親SVGのサイズを変えると、アイコンも拡大・縮小する。
まとめ
| 方法 | メリット | デメリット |
|---|---|---|
| インラインSVG | CSSやJavaScriptで簡単に操作可能 | HTMLが長くなる |
| <img> タグ | シンプルで軽量 | スクリプトやCSSで変更不可 |
| CSS background-image | 背景装飾に適している | 直接操作できない |
| <object> タグ | スクリプトで一部制御可能 | 読み込みに時間がかかる場合あり |
| <iframe> タグ | 独立したコンテンツとして読み込める | DOM操作が難しい |
| <use> タグ | 再利用が容易 | 事前に<symbol>を定義する必要あり |
