1986年に SGML (Standard Generalized Markup Language) が世界で最初に標準化された後,
HTML と XML が生まれました.
HTML は主に PC初心者がページのソースを簡単に記述できることを目的とし,
1991年にティム・バーナーズ=リーによって開発されています.
一方, XML は SGML を簡素化して汎用性を高める目的で, 1998年に W3C (World Wide Web Consortium) によって開発されました.
その後, 2000年に HTML 4.01 と XML の仕様をミックスしたマーク・アップ言語である
XHTML (Extensible HyperText Markup Language) がスタートしています.
XHTML は HTML の厳密なバージョンとして2000年代初頭に流行しましたが,
XML形式で書くことを強制していたことでブラウザ・エラーが多発したため,
2008年に HTML5 が登場し, XHTML は役割を終えました.
要素 | HTML | XML |
---|---|---|
誕生 | 1991年(最初のバージョン) | 1998年 |
目的 | ウェブ・ページの作成 | データの交換や保存 |
構文の厳密さ | ゆるい | 厳格 |
用途 | 主にウェブ | データ構造やカスタム・フォーマット |
SVG (Scalable Vector Graphics) は XML を基盤としたフォーマットとして設計され, グラフィカルな内容をデータ形式で利用できるように作られています.
* タグ<svg> ではなく SVG内部の要素について
図形: 線の色(外枠) / 線の太さ / 塗り
SVG の stroke / stroke-width / fill などの属性は, style の属性を使って書いても同じ効果が得られる.
stroke="blue"stroke-width="4"fill="#abcdef"
style="stroke:blue;stroke-width:4; fill:#abcdef;"
ただし, HTMLで使用する style は SVGには適用不可 style="border:solid 1px blue;background-color:#abcdef;"
準備 - その1: タグ<svg> 〜 </svg> で Viewport ビューポート (表示領域) を設定する
<svg width="400"height="400">
</svg>
領域は設定されているが, 通常は何も表示されない
準備 - その2: 作業中だけ Viewport に border(枠線) を付けておくことができる
<svg width="400"height="400"style="border:1px solid #456789;">
</svg>
今は範囲を確認するために style="border:1px solid #456789; を追加してある
準備 - その3: 場合によっては Viewport に border と background-color を追加することもできる
<svg width="400"height="400"style="border:1px solid #456789;background-color:#eeeeee;">
</svg>
style="border:1px solid #456789;background-color:#eeeeee;"
タグ<svg> の子要素として, タグ<path> と attribute "d"(データのこと / 小文字)を記述する
注意:<path> は Self-Closing Tag
■ 使用するコマンド
大文字 M は絶対パス → Move To:
大文字 L は絶対パス → Line To:
座標 (50,150)とは, 左の枠線から右方向に 50px 進んだ位置 ( x座標 ) で, 150 は 上の枠線から下方向に 150px 下りた位置 ( y座標 )のこと. M50,150: の座標を原点とし, そこから L350,150 の座標まで線を引く.
<svg width="400"height="400"style="border:1px solid #456789;">
<path d="M50,150 L350,150"stroke="blue"stroke-width="4"/>
</svg>
または 〜
<style> .パス_スタイル{border: 1px solid #456789;} .path-style{stroke:blue; stroke-width:4;} </style> <svg width="400"height="400"class="パス_スタイル"> <path d="M50,150 L350,150"class="パス_スタイル"/> </svg>
小文字 m は相対パス(Move To:)
小文字 l (エル)は相対パス(Line To:)
座標 (50,150)とは, 50 (x座標): 左から右に 50px 進んだ位置で, 150 (y座標): 上から下に 150px 下りた位置のこと. m50,150: という原点から 300,0 に移動する. L150,50: (50,50) から (150,50) に線を引く. L150,150: (150,50) から (150,150) に線を引く.
<svg width="400"height="400"style="border:1px solid #456789;">
<path d="m50,150 l300,0"stroke="blue"stroke-width="4"/>
</svg>
Z / z: コマンドは Close Path ( クローズ・パス / 閉じるコマンド )と言い,
最初の点に戻る役割を果たします.
<svg width="400"height="400"style="border:1px solid #456789;">
<!-- 絶対パスで三角形 -->
<path d="M50,50 L150,50 L150,150 Z"fill="none"stroke="green"/>
<!-- 相対パスで三角形 -->
<path d="m50,250 l100,0 l0,100 z"fill="none"stroke="red"/>
</svg>
ピエール・エティエンヌ・ベジエ ( Pierre Étienne Bézier)▷ https://en.wikipedia.org/wiki/Bézier_curve
数学者 / フランスの自動車メーカー シトロエン社のポール・ド・カステリョ▷ https://en.wikipedia.org/wiki/Paul_de_Casteljau
cx は 円の中心のX座標 ( 水平方向の位置 ) で,
cy は 円の中心のY座標 ( 垂直方向の位置 )を指定している.
r は 円の半径.
1次ベジェ曲線 → 始点から終点まで直線 / 制御点が0個 コマンド: L (Line To) または l で表現される 直線はカーブしていないが, これも「ベジェ曲線」の一種とみなされる 2次ベジェ曲線 → 始点から制御点を経由して終点に到達する曲線(制御点が1個) / 制御点が曲線の形状を決定する コマンド: Q (Quadratic Bezier Curve) または q で表現される 3次ベジェ曲線 → 制御点が2個 コマンド: C (Cubic Bezier Curve) または c で表現される 数学的には 4次, 5次, 6次…と「次数」を増やすことも可能だが, サポートされている SVGコマンドはない<!-- 絶対パスでベジェ曲線 -->
<svg width="400"height="400">
<path d="M50,150 C150,150 250,150 350,150"stroke="blue"stroke-width="4"fill="transparent"/>
</svg>
<svg width="400"height="400">
<path d="m50,150 c100,0 200,0 300,0"stroke="blue"stroke-width="4"fill="transparent"/>
</svg>
Control Point (制御点) / Start Point (開始点) / End Point (終点)
<svg width="400"height="400">
<path d="M50,150 C150,50 250,250 350,150"
stroke="blue"stroke-width="4"fill="transparent"/>
<circle cx="150"cy="50"r="4"fill="green"/>
<circle cx="50"cy="150"r="8"fill="red"/>
<circle cx="350"cy="150"r="8"fill="#ff0000"/>
</svg>
Control Point (制御点) / Start Point (開始点) / End Point (終点)
<svg width="400"height="400"style="border:1px solid #456789;">
<path d="m50,150 c100,-100 200,100 300,0"
stroke="blue"stroke-width="4"fill="transparent"/>
<circle cx="150"cy="50"r="4"fill="green"/>
<circle cx="50"cy="150"r="8"fill="red"/>
<circle cx="350"cy="150"r="8"fill="#ff0000"/>
</svg>
1次ベジエ曲線(直線のみ)
2次ベジエ曲線(曲線を含む)
3次ベジエ曲線(曲線を含む)
<svg width="400"height="400"style="background-color:lightgray;">
<circle cx="200"cy="200"r="50"fill="blue"/>
</svg>
<svg width="400"height="400"style="background-color:lightgray;border:1px solid black;">
<a href="https://html-suisui.com/"><rect x="50"y="50"
width="150"height="150"fill="blue"/></a>
<a href="https://html-suisui.com/"><
circle cx="250"cy="250"r="50"fill="red"/></a>
</svg>
1. 移動コマンド M (Move To) → 指定した座標に移動する 大文字: 絶対座標を指定 小文字: 現在の座標を基準とした相対座標を指定 2. 直線コマンド L (Line To) → 現在の点から指定した座標まで直線を描く 大文字: 絶対座標を指定 小文字: 相対座標を指定 H (Horizontal Line To) 現在の点から指定した x 座標まで水平な直線を描く 大文字: 絶対 x 座標を指定 小文字: 相対 x 座標を指定 V (Vertical Line To) 現在の点から指定した y 座標まで垂直な直線を描く 大文字: 絶対 y 座標を指定 小文字: 相対 y 座標を指定 3. ベジエ曲線コマンド C (Cubic Bezier Curve) → 3次ベジエ曲線(開始点 / 2つの制御点 / 終点)を描く 大文字: 絶対座標を指定 小文字: 相対座標を指定 S (Smooth Cubic Bezier Curve) Q (Quadratic Bezier Curve) → 3次ベジエ曲線の制御点を自動計算しながら滑らかな線を描く 大文字: 絶対座標を指定 小文字: 相対座標を指定 2次ベジエ曲線を描きます(開始点、1つの制御点、終点) 大文字: 絶対座標を指定 小文字: 相対座標を指定 T (Smooth Quadratic Bezier Curve) 2次ベジエ曲線の制御点を自動計算しながら滑らかな曲線を描く 大文字: 絶対座標を指定 小文字: 相対座標を指定 4. 円弧コマンド A (Arc To) → 指定した半径, 角度、方向で弧を描く 大文字: 絶対座標を指定 小文字: 相対座標を指定 5. 終了コマンド Z (Close Path) → 現在の点からパスの開始点に戻ってパスを閉じる 大文字・小文字の区別なし: 同じ動作
コマンド | 名称 | 大文字 (絶対) | 小文字 (相対) |
---|---|---|---|
M, m | Move To | 絶対座標移動 | 相対座標移動 |
L, l | Line To | 絶対直線描画 | 相対直線描画 |
H, h | Horizontal Line To | 絶対水平線描画 | 相対水平線描画 |
V, v | Vertical Line To | 絶対垂直線描画 | 相対垂直線描画 |
C, c | Cubic Bezier Curve | 絶対3次曲線描画 | 相対3次曲線描画 |
S, s | Smooth Cubic Bezier Curve | 絶対3次滑らか曲線 | 相対3次滑らか曲線 |
Q, q | Quadratic Bezier Curve | 絶対2次曲線描画 | 相対2次曲線描画 |
T, t | Smooth Quadratic Bezier Curve | 絶対2次滑らか曲線 | 相対2次滑らか曲線 |
A, a | Arc To | 絶対円弧描画 | 相対円弧描画 |
Z, z | Close Path | パスを閉じる | パスを閉じる |