SVG形式とは?特徴と使い方を徹底解説 - ベクター画像の基本から実践サンプルまで
SVG形式とは何かをわかりやすく解説。XMLベースのベクター画像形式の特徴、HTML/CSS/JavaScriptでの使い方、PNGとの違い、実践的なサンプルコードを紹介します。レスポンシブ対応のコツも学べます。
SVG形式とは、Scalable Vector Graphicsの略称で、XMLベースの2次元ベクター画像形式を指します。ベクターグラフィックスの特性上、拡大縮小しても画質が劣化しないという大きな利点があり、現代のWebデザインにおいて不可欠な技術となっています。
SVG形式の基本概念と特徴
ベクター画像としてのSVG形式
SVG形式とはラスター画像(PNG、JPEGなど)とは根本的に異なるアプローチを採用しています。ピクセルの集合ではなく、数学的な座標とパスによって図形を定義するため、どんなに拡大しても滑らかな表示が保たれます。
主な特徴:
- 解像度に依存しない高品質な表示
- ファイルサイズが比較的小さい
- CSSとJavaScriptでの制御が可能
- テキストベースのため編集が容易
- アクセシビリティに優れる
SVG形式の実践的な使い方
HTMLでのSVG形式の埋め込み
SVG形式をWebページに組み込む方法は複数ありますが、最も一般的な3つの方法を紹介します。
方法1:インラインSVG
<!DOCTYPE html> <html> <body> <svg width="100" height="100"> <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" /> </svg> </body> </html>
方法2:imgタグでの参照
<img src="image.svg" alt="SVG画像の例" width="100" height="100">
方法3:objectタグでの埋め込み
<object data="image.svg" type="image/svg+xml" width="100" height="100"> 代替コンテンツ </object>
CSSでのSVG形式のスタイリング
SVG形式の要素はCSSで詳細にスタイリングできます。
/* SVG要素のスタイリング */ svg { border: 1px solid #ccc; background-color: #f9f9f9; } circle { fill: #ff6b6b; stroke: #4ecdc4; stroke-width: 2px; transition: fill 0.3s ease; } circle:hover { fill: #ff8e8e; }
JavaScriptでのSVG形式の操作
SVG形式は動的な操作にも適しています。
// SVG要素の動的作成 const svgNS = "http://www.w3.org/2000/svg"; const svg = document.createElementNS(svgNS, "svg"); svg.setAttribute("width", "200"); svg.setAttribute("height", "200"); const rect = document.createElementNS(svgNS, "rect"); rect.setAttribute("x", "50"); rect.setAttribute("y", "50"); rect.setAttribute("width", "100"); rect.setAttribute("height", "100"); rect.setAttribute("fill", "blue"); svg.appendChild(rect); document.body.appendChild(svg); // インタラクティブな操作 rect.addEventListener("click", function() { this.setAttribute("fill", "red"); });
実践的なSVG形式のサンプル
アイコン作成の例
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"> <path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/> </svg>
複雑な図形の作成
<svg width="200" height="200"> <defs> <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" /> <stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" /> </linearGradient> </defs> <rect x="50" y="50" width="100" height="100" fill="url(#grad1)" /> <polygon points="100,20 140,100 60,100" fill="blue" opacity="0.7"/> </svg>
SVG形式 vs 他の画像形式
PNGとの比較
| 特徴 | SVG形式 | PNG形式 |
|---|---|---|
| 拡大縮小 | 画質維持 | 画質劣化 |
| ファイルサイズ | 一般に小さい | 複雑な画像で大きい |
| アニメーション | 可能 | 不可能 |
| 写真表現 | 不向き | 適している |
共通的な間違いと解決策
間違い例:
<!-- サイズ指定がないSVG --> <svg> <circle cx="50" cy="50" r="40"/> </svg>
正しい実装:
<!-- 明確なサイズ指定 --> <svg width="100" height="100" viewBox="0 0 100 100"> <circle cx="50" cy="50" r="40"/> </svg>
よくある質問(FAQ)
SVG形式はどのような場面で使用すべきですか?
レスポンシブデザインが必要なWebサイト、アイコン、ロゴ、図表、データビジュアライゼーションなどに最適です。特に複数の画面サイズに対応する必要がある場合、SVG形式の採用を検討すべきです。
すべてのブラウザでSVG形式はサポートされていますか?
現代の主要ブラウザ(Chrome、Firefox、Safari、Edge)では完全にサポートされています。Internet Explorer 9以降でも基本的なサポートがありますが、より詳細な情報はMDN Web Docsで確認できます。
SVG形式のファイルを最適化する方法は?
SVGファイルはテキストエディタで編集可能ですが、専用の最適化ツールを使用することをお勧めします。SVGOのようなツールを使用すると、ファイルサイズを大幅に削減できます。
まとめ
SVG形式とは、現代のWeb開発において重要な役割を果たすベクター画像技術です。その拡張性の高さ、ファイルサイズの小ささ、プログラマブルな特性から、レスポンシブWebデザインの必須要素となっています。実際のプロジェクトでSVG形式を効果的に活用するためには、基本的な構文から高度なスタイリング技術まで、段階的に習得していくことが重要です。
より深く学びたい方はW3C SVG仕様書を参照することをお勧めします。