SVG（Scalable Vector Graphics）は、XMLベースのベクター画像フォーマットであり、Webページやアプリケーションなどで利用されます。SVGは、HTMLと同様にブラウザで表示され、CSSやJavaScriptなどと連携して操作することができます。本チュートリアルでは、SVGの基礎的な使い方を紹介します。
本チュートリアルに進む前に、以下の前提条件を満たしている必要があります。
SVGは、座標系を利用してベクター画像を表現します。座標系において、原点（0, 0）からx軸正方向に正の値を持つ座標が増加する右手系が一般的です。
SVGでは、以下のような要素を使用して図形を描画します。
これらの要素には、座標やサイズ、色などの属性を設定することができます。
SVGはXMLベースの言語であるため、HTMLと同様にタグと属性を使用して要素を定義します。以下は、簡単なSVGファイルの例です。
要素は、SVGコンテンツのルート要素であり、SVG画像の横幅や縦幅などを指定します。
要素は、SVG画像上に描画される円を表します。cx属性とcy属性は円の中心座標を指定し、r属性は半径を指定します。stroke属性は、円周の線の色を指定し、stroke-width属性は線の太さを指定します。fill属性は、円の内部の色を指定します。
id属性: 要素に一意の識別子を割り当てます。
class属性: 要素にスタイルシートから参照されるクラス名を割り当てます。
style属性: 要素にスタイルを直接指定します。
fill属性: 要素の内部の塗りつぶし色を指定します。
stroke属性: 要素の縁取りの色を指定します。
stroke-width属性: 要素の縁取りの太さを指定します。
opacity属性: 要素の不透明度を指定します。
transform属性: 要素を移動、回転、拡大縮小するための変換を指定します。
これらの属性を組み合わせることで、SVG画像を複雑な図形にすることができます。
以下は、SVGを使用した簡単な例です。
この例では、円、矩形、直線、パスを使用して図形を描画しています。それぞれの要素には、cx、cy、r、x、y、width、height、x1、y1、x2、y2、dなどの属性が設定されています。
SVGは規格と実装との間に差があり、
外部ファイルとしてSVGファイルを読み込ませる場合のプログラミングがやや面倒です。（JavaScriptのよう簡単にはいきません。）
ウェブブラウザに外部ファイルとしてSVGファイルを読み込ませたい場合、Firefoxの場合なら、その外部SVGファイルに冒頭に、下記コードのように
こういった必要があります。（Windows版のFirefoxの場合、キャンバスサイズをGoogle Chrome と同様に省略できるが（標準設定のサイズになる）、Linuxなど他OSの場合ではキャンバスサイズが必要になる場合もある。ブラウザが同じ「Firefox」でもOSごとに実装が微妙に違う。）
Google Chrome および Microsoft Edge の場合も同様に、名前空間  xmlns="http://www.w3.org/2000/svg"  の指定が必要です。（なお Google Chrome および Microsoft Edge の場合、キャンバスサイズの指定がなくても自動でキャンバスサイズの設定が行われる。）
この様に、名前空間などを記述が欠落するとSVGファイルであることがブラウザに伝わらず。希望通り表示できなかったりエラーメッセージを伴う結果と成る。
外部ファイル側のコード例
たとえばファイル名を "test.svg" とする。
なお、キャンバスサイズを図形より小さい場合にはハミだしている部分は非表示になります（上記コードでは意図的にハミ出しています）。上記コードは縦長の長方形を表示するコードですがキャンバスサイズをハミ出た下半分は非表示になります。
HTMLファイル側
上記の外部SVGファイルを呼び出すHTMLファイル側は使う要素によって下記のようにマークアップが異なる。
外部SVG読み込みテスト
SVGファイルは画像ファイルなので、IMAGE要素で読み込めます。IMAGE要素ではsrc属性で外部ファイルを指定します。
もしWindowsで、上記コードを実行した場合にブラウザの要素などのタイトルが文字化けする場合、を除去してください（Windowsではバージョンによっては文字コードがUTF-8ではなくShift_JISなので）。以下のOBJECT要素などでも同様です。
外部SVG読み込みテスト
OBJECT要素は、オブジェクトデータを記述するためのHTML要素です。
OBJECT要素ではsrc属性に代わってdata属性で外部ファイル指定します。https://html.spec.whatwg.org/multipage/iframe-embed-object.html#htmlobjectelement HTML Living Standard — HTMLObjectElement。
このほか、EMBED要素を使う方法もある。
外部SVG読み込みテスト
EMBED要素は、埋め込み外部コンテンツ要素を記述するためのHTML要素である。
EMBED要素ではsrc属性で外部ファイル指定します。
rect要素で表します。https://developer.mozilla.org/ja/docs/Web/SVG/Element/rect
改行をする必要はありませんが、上記コードでは見やすさを重視してfill属性の手前で改行してあります。
rect要素で最低限必要なのは、位置と幅を指定するための次の4要素です。
x
y
width
height
rectの不等号のペア()の最後に、下記のように/が必要です。（下記コードの場合、 stroke-width="5" の次の部分。 ）
もし、この/が終わりに無いと、ファイルの終端までを探すことになります。（長方形以外の、円や線分など他の静止図形のタグでも同様、最後に「/」が必要です。）
なお、下記のように、付随的な要素をstyleでまとめても良い。なお、下記のようにstyleでまとめる記法はCSSに由来するものであり、インラインCSSという記法です。（fillの次の点々はセミコロン、#FFFFFFの次の点々はコロンです。混同しないよう、注意しましょう。）
なお、fillは閉じた領域の塗りつぶしの色です。strokeは、境界線など線分の色です。
fill="#FFFFFF;のFFは16進数です（十進数の255に相当）。
fillを指定しない場合、noneと書いても良いです。
なお、noneの代わりにblueやredと書くと、それぞれの色になります(つまり、HTMLカラーが使えます)。たとえば青色に内側を塗りつぶすなら
とも書けます。
色については rgb(11,11,11)のように0～255の十進数の数値指定で書いてもよいでしょう。つまり、
とも書ける。この場合、水色（うすめの青）で塗りつぶしています。
rectに限らず、円や線分など他の図形でも同様に、styleやrgbを使うことができます。
百分率も可能
色の指定は%単位でも可能ですが、rgbの3色すべてに%をつける必要があります。
不透明度アルファ
を使える。ただし、不透明度の値の指定は 0.0 ～ 1.0 の間の数値で行わなければならない。SVGの不透明度は 0 で完全に不透明であり、1 で完全に透明である。
の第4引数は不透明度である。0から1の間で指定する。不透明にしたい場合には値を1にする。この不透明の数値の指定方法は、CSSに由来する方法である。（Inkscapeなどのドローソフトでは不透明度を0～255の数値で指定するものもあるが、ブラウザ版SVGの仕様とは異なるので注意。）
rgba()関数は、0～255までの定義域と、0～1までの定義域とが混在しているので、あまりメンテナンスがしやすくないかもしれません。
透明の属性
rgb()関数でも透明の処理もできるように、属性で fill-opacity という塗りつぶし領域の不透明度を 0.0 ～ 1.0 で指定できる属性がありますので、メンテナンスのしやすさから、不透明度の指定には fill-opacity を使うほうがいいかもしれません。
fill-opacity は 0 で完全に不透明であり、1 で完全に透明である。
なお、ストロークの不透明度を指定できる stroke-opacity という属性もあるのですが、あまり実装の性能がよくありません。ハードウェアの事情により、太いストロークを描画する場合に、微妙に表示が崩れてしまう場合があります。
フィレット
図形のカドを丸まらせたい場合（製図の用語で言う「フィレット」）、rxおよびryで丸めの半径を指定できる。
この他、transfrom属性とrotate()関数を使って、斜めに傾いた長方形などの図形を書けます。長方形以外の図形や文字列もrotate()関数に対応しています。
詳しくは、回転の単元で説明します。
circle要素で表します。https://developer.mozilla.org/ja/docs/Web/SVG/Element/circlecircleでは、円の形を中心点の座標位置と半径のペアで表します。
cx
cy
r
polygon要素で表します。https://developer.mozilla.org/ja/docs/Web/SVG/Element/polygon英語の polygon ポリゴンとは、日本語で「多角形」を意味します。
下記のコード例では座標 (0,100)、(50,0)、(100,100) を結んだ三角形を表示します。
正三角形
points
隣りあう点が結ばれる事と、および、始点と終点が結ばれます。
  
の書式です。
なお、閉じていない単なる折れ線を描画したい場合には、polygon 要素ではなく polyline (ポリライン)要素を使います。
polyline  (ポリライン)要素で折れ線を書けますが、fill属性およびstroke属性が必要です。
どのブラウザでも、fillの指定が無いと、塗りつぶしをしてしまいます。
また、fillをnoneにしたあとは、strokeが設定の無い限りストローク色も無しになってしまい描画されない状態なので、strokeも再設定する必要があります。
曲がり具合の指定
折れ線の内部の、それぞれの曲がりのある角の箇所での描画方法を指定できます。
線の太さ(stroke-width)の範囲内で、角を丸めるか(round)、尖らすか(miter)、面取り(bevel)をするかを指定できます。
何も指定ない場合には、miterで描画するように設定されています。
SVGのこれらの機能は、あくまで線の太さの範囲内でしか、処理を行えません。（つまり、たとえば製図ソフト AutoCAD のような面取り・フィレットは、SVGのこれらの指定では出来ないです。） また、その折れ線の内部のすべての曲がり箇所で、同様の曲がり具合（あるいは尖り具合）で描画します。
stroke-linejoin属性によって、"round"または"miter"または"bevel"を指定します。
破線など
stroke-dasharray(ストローク・ダッシュ アレイ)属性を使って、破線などを描くことができます。
書式は
      stroke-dasharray="描く部分の長さ1 描かない部分の長さ1
      描く部分の長さ2 描かない部分の長さ2 "
といったふうに、描く部分と描かない部分との繰り返しです。
SVGのTEXT要素は、テキストを描画するために使用されます。具体的には、SVGにテキストを配置するために使用され、さまざまなスタイル、フォント、配置オプションを指定することができます。
以下は、TEXT要素の使い所の例です。
グラフやチャートでラベルを表示する：SVGを使用して、棒グラフや円グラフなどのチャートを作成する場合、テキスト要素を使用して各要素にラベルを付けることができます。これにより、グラフの視覚的な表現がより明確になります。
インフォグラフィックや地図でテキストを使用する：SVGはインフォグラフィックや地図を作成するためにも使用されます。この場合、テキスト要素を使用して、情報を示すテキストを配置することができます。例えば、地図上に都市名を表示することができます。
ロゴやタイトルを表示する：SVGは、Webサイトのロゴやタイトルなどのグラフィックスを作成するためにも使用されます。この場合、テキスト要素を使用して、ブランド名やタイトルを表示することができます。また、さまざまなスタイルやフォントを使用して、テキストの見栄えを改善することもできます。
オンラインアニメーションでテキストを使用する：SVGは、アニメーションを作成するためにも使用されます。この場合、テキスト要素を使用して、アニメーションの一部としてテキストを表示することができます。たとえば、文字列を点滅させたり、スライドイン/アウトさせたりすることができます。
 テスト 
x
y
文字列の開始位置は、左下です。左上ではないので、注意してください。
追加の属性として、
など、設定できます。
例
 テスト 
まず、基準の図形として、回転していない図形の描画をしましょう。
この図形をたとえば斜めに傾かせたい場合、回転させる図形のタグの属性において
 transform="rotate(回転角, 回転中心のx座標, y座標)"
の書式で属性を追記することで、回転を指定できます。
角度の単位は、直角を90度とする「度」単位です。（日本なら、小学校で習う角度の単位と同じです。）
なお、座標を指定しない場合、原点を中心として回転します。
たとえば上記コードなら、長方形の右上が10度持ちあがった図形になります。
長方形だけでなく、楕円や折れ線や多角形など他の図形でも、この方法で回転が可能です。
また、textタグの文字列も同様に、この方法で回転が可能です。
g タグを用いて、gタグ内のオブジェクトに共通する属性を一括で記述できます。このような仕組みをSVG用語では一般に「グループ化」といいます。
たとえば上のコードの場合、長方形と円との両方に、ストロ－ク色を青に指定し、内側の塗りつぶし色を白に指定と、一括で指定しています。
各オブジェクトとグループ内要素に矛盾のある場合
なお、各オブジェクトにgタグの指定内容と矛盾する属性がある場合、普通は各オブジェクト側の指定が優先されます。たとえばcircleタグで  stroke="red" という指定と、gタグの開始タグで  stroke="blue" があれば、円のストローク色は赤色で表示されます。（Firefox, google Chrome, Microsoft Edge どれも結果は同じく、円ストロークだけ赤色の結果です。WindowsだけでなくLinuxでも同様の結果です。 ）
SVGとCSSは、Webページで視覚的なデザインを行うために広く使用されています。CSSは、HTML要素のスタイルを設定することができますが、SVG要素にも同様のスタイルを設定することができます。SVG要素にCSSを適用するには、SVG要素にIDやクラスを割り当て、それらをCSSセレクタで参照する必要があります。
例えば、以下のSVGファイルは、要素にIDを割り当て、CSSセレクタで参照して、円の色や大きさを変更しています。
この例では、CSSのセレクタ #myCircle が、IDが myCircle である要素に適用されています。fill プロパティは円の内部の色を設定し、r プロパティは円の半径を変更しています。
SVG要素に適用できるCSSプロパティは、HTML要素に適用できるCSSプロパティと同様です。しかし、SVG要素にはHTML要素にはない独自のプロパティもあります。例えば、stroke-dasharray プロパティは、SVGの線要素に適用することができ、線の点線や破線を設定することができます。
また、SVG要素にCSSを適用することで、SVG要素をアニメーションさせることもできます。例えば、以下のSVGファイルは、RECT要素にクラスを割り当て、CSSでアニメーションを設定しています。
このコードは、CSSアニメーションを使用してSVGの矩形要素をアニメーション化しています。
まず、SVG要素はwidthとheight属性を指定して200x200のキャンバスを作成しています。
そして、rect要素を使用して、赤い色で塗りつぶされた60x60の四角形を作成しています。rect要素にはclass属性があり、その値がmyRectです。
次に、CSSで定義されたmyRectクラスは、animationプロパティを持っています。
このアニメーションは、moveという名前のキーフレームアニメーションを使用しています。
最初のキーフレーム（0％）では、四角形は元の位置にあります。最後のキーフレーム（100％）では、四角形は右下に80px移動します。
ease-in-outタイミング関数が使用されているため、アニメーションはゆっくり始まり、ゆっくり終わります。
infinite alternate値がanimationプロパティに追加されているため、アニメーションは無限に繰り返されます。
SVGでは、要素に対してタイトルや解説などの情報を付加することができます。例えば、以下のように記述します。
 
矩形の描画
SVGでは左上の座標と幅と高さで矩形のジオメトリーを表します
タイトルは、title要素で記述します。一方、解説はdesc要素で表します。これらの要素は、SVG内のどこにでも記述することができますが、一般的にはsvg開始タグの直後に記載するのが慣例です。
ただし、ブラウザによっては、title要素の内容が表示されない場合があります。また、ファイル名に対する情報として表示される場合もあります。
SVG (Scalable Vector Graphics): XMLベースの2次元ベクターグラフィックス形式。
ベクターグラフィックス (Vector graphics): 座標や数学的方程式によって画像を生成する方法。拡大や縮小が自在で、拡大しても画質が劣化しない。
ラスターグラフィックス (Raster graphics): ピクセル単位で画像を生成する方法。拡大すると画質が劣化する。
XML (eXtensible Markup Language): 構造化されたデータを扱うためのマークアップ言語。
パス (Path): SVGでの形状の描画に使われる基本要素。座標を指定して直線や曲線を描くことができる。
属性 (Attribute): 要素に対して、その性質や特徴を指定するために用いられるもの。例えば、色や座標、大きさなど。
fill: オブジェクトの塗りつぶし色を指定する属性。
stroke: オブジェクトの枠線の色を指定する属性。
stroke-width: オブジェクトの枠線の太さを指定する属性。
viewBox: SVGの描画領域を指定する属性。座標系や拡大率、表示範囲を指定することができる。
transform: オブジェクトの座標変換を指定する属性。例えば、平行移動や回転、拡大縮小などが可能。
gradient: グラデーションを指定する属性。色や透明度を徐々に変化させることができる。
filter: オブジェクトに対してフィルターを適用する属性。ぼかしや色変換などのエフェクトをかけることができる。
clipPath: オブジェクトをクリップするための属性。表示範囲を指定して、オブジェクトを切り抜くことができる。
mask: オブジェクトに対してマスクを適用するための属性。表示範囲を指定して、オブジェクトを隠すことができる。
animate: アニメーションを指定する属性。属性値を時間経過に応じて変化させることができる。
SVGは、XMLベースのベクター画像フォーマットであり、Webページやアプリケーションなどで利用されます。SVGを使用することで、高品質でスケーラブルな図形を簡単に作成することができます。SVGはHTMLと同様にタグと属性を使用して要素を定義し、CSSやJavaScriptと組み合わせて操作することができます。