SVGマスターへの道

SVGの骨組み - <svg> タグと viewBox を使いこなそう

前のページではSVGがどんなものかを知りましたね。このページでは、実際にSVG画像をウェブページに置くための「骨組み」について学びます。主役は <svg> タグと、そのとっても便利な属性 viewBox(ビューボックスと読みます)です。

<svg> タグ - SVGの入れ物

SVGの図形や線は、すべてこの <svg> というタグの中に書きます。このタグで囲まれた部分が、SVG画像が表示される領域(キャンバスのようなもの)になります。

<svg>
  <!-- この中に、円や四角などの図形を書いていきます -->
</svg>

これだけだと、まだ何も表示されません。なぜなら、SVGの「入れ物」の大きさを決めていないからです。

widthheight 属性 - 見た目のサイズを決める

<svg> タグに width(幅)と height(高さ)属性を指定することで、SVGがウェブページ上でどれくらいの大きさで表示されるかを決めます。

<svg width="200" height="100" style="border: 1px solid black;">
  <!-- 幅200ピクセル、高さ100ピクセルの領域が確保されます -->
</svg>

上の例では、幅200ピクセル、高さ100ピクセルの黒い枠線がついた領域が作られます(まだ中身は空っぽですが)。このサイズは、px(ピクセル)だけでなく、%(パーセント)やem(文字サイズ基準)など、CSSで使える単位で指定できます。

もし widthheight を指定しないと、SVGの種類やブラウザの解釈によってデフォルトのサイズ(例えば幅300px、高さ150pxなど)になったり、中身に合わせて自動調整されたりしますが、基本的には明示的に指定するのがおすすめです。

viewBox 属性 - SVG内部の「魔法の窓」

ここからがSVGの面白いところ! viewBox 属性は、SVG内部の座標系と、その中で「見える範囲」を定義する、とても強力な仕組みです。「ビューボックス」とは、SVGコンテンツを覗き込む「窓」のようなものだと考えてください。

viewBox は4つの数字で指定します: "min-x min-y width height"

<svg width="200" height="100" viewBox="0 0 200 100">
  <!-- ... -->
</svg>

ちょっと言葉だけだと分かりにくいですよね。例を使って見てみましょう。

例えば、<svg width="200" height="100"> という表示領域があるとします。ここに viewBox="0 0 50 25" と指定したとしましょう。これは、

  1. SVG内部では、(0,0)の点から始まる、幅50単位、高さ25単位の世界を考えます。
  2. この「幅50単位、高さ25単位」の世界が、実際の表示領域である「幅200px、高さ100px」にピッタリ収まるように拡大されます(この例では縦横ともに4倍)。

つまり、SVG内部で1単位の長さで描いたものは、画面上では4ピクセルの長さで表示されることになります。viewBox を使うと、SVG内部の座標をピクセルから切り離して考えることができるので、拡大・縮小に非常に強くなります。

インタラクティブデモ: viewBox を動かしてみよう!

下のSVGには、水色の四角と緑色の丸が描かれています。スライダーを動かして viewBox の値を変えると、SVGの表示がどのように変わるか観察してみましょう。SVGの表示領域(黒い枠)は幅400px、高さ200pxで固定されています。

デモコントロール

現在の viewBox: 0 0 400 200

四角 (50,30) 幅100 高さ60 円 (250,100) 半径40 SVG (0,0)

試してみよう:

重要なのは、viewBoxwidthheightアスペクト比(縦横比)と、<svg> タグの widthheight 属性のアスペクト比が異なるときです。デフォルトでは、SVGは全体が表示され、かつアスペクト比が保たれるように拡大縮小され、余ったスペースは空白になります。この挙動は preserveAspectRatio 属性で細かく制御できますが、それはまた後のページで詳しく学びましょう。

viewBox のメリット

SVGとCanvasの「キャンバス」サイズ設定の違い

ここでも、SVGとCanvasのちょっとした違いに触れておきましょう。

SVGの viewBox は、このような解像度の問題をうまく吸収してくれる強力な仕組みと言えますね。

まとめ

このページでは、SVGの基本的な骨組みである <svg> タグと、その表示サイズを決める width, height 属性、そしてSVG内部の座標系と表示範囲を自在に操る viewBox 属性について学びました。

viewBox は最初は少しとっつきにくいかもしれませんが、使いこなせるとSVGの表現力が格段に上がります。デモを色々いじって、感覚を掴んでみてください。

次のページ「基本図形を描こう - 四角、丸、線」では、いよいよこのSVGの「入れ物」の中に、具体的な形を描いていきます!

このページの要約

日本語

SVG画像は <svg> タグで囲まれた領域に描画されます。このタグの widthheight 属性は、SVGがページ上で表示される際の物理的なサイズを指定します。一方、viewBox="min-x min-y width height" 属性はSVG内部の論理的な座標系と表示範囲を定義します。これにより、SVG内部の座標をピクセルから独立させ、解像度に依存しない柔軟なスケーリングが可能になります。例えば、viewBox で定義された範囲が width/height 属性で指定された表示領域に合うように自動的に拡大・縮小されます。

English

SVG images are rendered within an area defined by the <svg> tag. Its width and height attributes specify the physical dimensions of the SVG on the page. The viewBox="min-x min-y width height" attribute, however, defines the logical coordinate system and the visible area within the SVG. This allows the internal SVG coordinates to be independent of pixels, enabling flexible, resolution-independent scaling. The content within the viewBox is automatically scaled to fit the display area specified by the width/height attributes.