■ 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 |
|
|
|