■ SVGとは

SVG(Scalable Vector Graphics)とは、Web上でベクターグラフィックス(線や円),画像,テキストオブジェクトを定義してブラウザに表示するための言語です。 オブジェクトはグループにまとめたり、合成させたり、フィルタ効果を適用したりして複合グラフィックスを表示させることができます。

DOM(Document Object Model)によりスクリプト言語を使用して各要素やプロパティにアクセスすることも可能です。 当ホームページで紹介しているVMLはMicrosoft社独自の仕様であり、SVGはW3Cで勧告されたオープンなフォーマットで、XMLをベースとしてAdobe,Sun Microsystems社など約20団体以上にサポートされています。2001年9月に1.0が勧告され、2003年1月に1.1が勧告されていました。

テキストのみでグラフィックスを表現できるので、ファイルサイズが少ない、ベクター画像であるため拡大・縮小が精細、画像の変更をテキストの変更で行えるなど利点もありますがやはり、直感的にイメージしにくいため、複雑な画像を作ることは困難であるかもしれません。

HTML5が注目されSVGもHTML5の一部と思われがちですが、勧告されてから早10年近く経っていますが
IEが独自のVMLを実装していたためSVGに対応しなかったのでSVGもそれほど普及しませんでした。

しかし、IE9以降HTML5準拠に従いようやくSVGがサポートされるようになりました。


■ SVGを表示するには…

数年前にはまだブラウザの標準機能として搭載されているものが少なく、プラグイン等により表示させることしかできませんでした。
当時、Adobe社から「Adobe SVG Viewer」が無償で提供されており、表示させるにはプラグインのインストールが必要でした。

Microsoft社独自のベクター用言語VMLはHTMLの中に埋め込んで利用していましたが、SVGもSVG用のタグを利用したXMLテキストファイルを拡張子「svg」で作成して、ブラウザでそのまま読み込むか、またはページの一部で表示させる場合には<object>タグや<iframe>タグ、<frame>タグ等で読み込むことで表示できます。

また、HTMLに直接記述する場合は<svg>タグで囲むことでインラインで利用することができます。

■ SVGファイルを別途用意する場合
■ HTML文書内に直接記述する場合


■ SVGの書き方の基本

上のsample.svgソースにおいてSVGはXML文書であるため必ず1行目は
<?xml version="1.0"?>
で始まらなければなりません。

次の<!DOCTYPE>要素は必須ではありませんがドキュメントタイプを宣言しているのでおまじない程度に記述しておいても構いません。

<svg>要素はSVG文書であることを表すため必ず存在しなければなりません。
そしてこの<svg></svg>の間に描画オブジェクトを記述していくことになります。

SVGタグには要素内容がない場合があります。
HTMLでは、<a>リンク先</a> などというように要素内容が必ず要素の開始タグと終了タグに囲まれていました。

しかし、SVGは要素によっては要素内容が存在しないため、<circle>~</circle>と記述しても良いのですが<circle />と省略して記述することができます。
(※XMLドキュメントであるため必ず閉じタグが存在しなければなりません。)

これはXML形式に沿った記述方法をとっているからです。

<circle style='width:100pt;height:75pt' fillcolor="red">

<circle style='width:100pt;height:75pt' fillcolor="red" />


■ CSSの利用

SVGでは、グラフィックサイズや位置の定義などに、CSSまたはXSLTによるスタイル付けをします。

例えば、絶対位置指定で、左から50px、上から50pxの位置に縦200px,横100pxの四角形コンテナ領域を定義するには

style="position:absolute; top:50px; left:50px; height:200px; width:100px"

をSVGタグ内に記述します。

従って、ある程度のCSSあるいはXSLTの知識が必要とされます。
スクリプトを使用してダイナミックに属性アクセス等をするにはJavaScriptの知識が必要とされます。

■ SVG属性で利用可能なCSS属性 ■
属 性 説 明
フォント
font フォント簡略表記
font-family Arial MS 明朝 他 フォント名
font-size フォントサイズ
font-size-adjust
font-stretch
font-style フォント形状
font-variant フォントバリエーション
font-weight フォント太さ
テキスト
direction テキストの方向
letter-spacing 文字間隔
text-decoration テキスト装飾
unicode-bidi 文字・単語の表示方向
word-spacing 文字・単語間隔
視覚
clip 表示サイズ
color 表示色
cursor マウスカーソル
display 表示形式
overflow オーバーフロー表示
visibility 表示/非表示

■ SVGで利用する特有CSS属性 ■
属 性 デフォルト値 説 明
クリッピング,マスク,合成
clip-path none none
URI
グラフィックオブジェクトへのURI参照
clip-rule nonzero nonzero
evenodd
clip-path要素のグラフィック要素に対してfill-path要素の適用
mask none none
URI
マスクオブジェクトへのURI参照
opacity 1 0~1 不透明度
フィルタ効果
enable-background accumulate accumulate
new
filter none none
URI
フィルタオブジェクトへのURI参照
flood-color black
flood-opacity 1
lighting-color white
グラデーション
stop-color black
stop-opacity 1
対話性
pointer-events visiblePainted
色・塗り
color-interpolation sRGB
color-interpolation-filters linearRGB
color-profile auto
color-rendering auto
fill black
fill-opacity 1
fill-rule nonzero nonzero
evenodd
パスで囲まれた内側領域の定義
image-rendering auto
marker
marker-end none
marker-mid none
marker-start none
shape-rendering auto
stroke none
stroke-dasharray none
stroke-dashoffset 0
stroke-linecap butt
stroke-linejoin miter
stroke-miterlimit 4
stroke-opacity 1
stroke-width 1
text-rendering auto
テキスト
alignment-baseline
baseline-shift baseline
dominant-baseline auto
glyph-orientation-horizontal 0(deg)
glyph-orientation-vertical auto
kerning auto
text-anchor start
writing-mode lr-tb