【Scratch入門】SVG画像のviewportの意味とviewBox属性の使い方
※ 当ページには【広告/PR】を含む場合があります。
2021/02/14

Inkscapeでイラストを作る すぐに作れる ずっと使える Inkscapeのすべてが身に付く本
SVGを使って描画位置を操作する
viewBox
Viewport
Viewport
viewBox
Viewport
viewBox

Inkscapeでイラストを作る すぐに作れる ずっと使える Inkscapeのすべてが身に付く本
ViewportとviewBox
ビューポートはviewBoxで操作する
svg画像はviewBox属性で範囲を調整する
viewBoxの使い方
viewBox
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300">
<circle cx="150" cy="150" r="100" fill="#000000" />
</svg>

viewBox
viewBox="x1 y1 width height"
x1: canvas要素の左上を絶対原点(0,0)としたときの、
ビューポートの相対的な原点のx座標値
進行右方向が正と定める。
y1: canvas要素の左上を絶対原点(0,0)としたときの、
ビューポートの相対的な原点のy座標値
進行下方向が正と定める。
width:
ビューポートの描画幅。
幅はビューポートの左上相対原点のx1からの右端までの長さになる。
height:
ビューポートの描画高さ(座標値)
高さはビューポートの左上相対原点のy1からの下端までの長さになる。
viewBox="0 0 300 300"
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300" viewBox="0 0 300 300">
<circle cx="150" cy="150" r="100" fill="#000000" />
</svg>

canvasサイズ = ビューポート
viewBox="150 150 300 300"
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300" viewBox="150 150 300 300">
<circle cx="150" cy="150" r="100" fill="#000000" />
</svg>

viewBox="150 150 300 300"
(150,150)
viewBox="150 150 200 200"
canvasサイズ(の幅/高さ) > ビューポート(の幅/高さ)
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300" viewBox="150 150 200 200">
<circle cx="150" cy="150" r="100" fill="#000000" />
</svg>

canvas(の幅/高さ) > ビューポート(の幅/高さ)
canvas(の幅/高さ) > ビューポート(の幅/高さ)
ビューポート伸縮倍率 = canvas(の幅or高さ) / ビューポート(の幅or高さ)
300 / 200 = 1.5
canvas(の幅/高さ) < ビューポート(の幅/高さ)
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300" viewBox="150 150 600 600">
<circle cx="150" cy="150" r="100" fill="#000000" />
</svg>

300 / 600 = 0.5
canvas(の幅/高さ) = ビューポート(の幅/高さ)
preserveAspectRatio
ビューポートの幅 = ビューポートの高さ
preserveAspectRatio
"xMinYMin meet"
canvas(の幅/高さ) > ビューポート(の幅/高さ)
viewBox="0 0 200 300"
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300" viewBox="0 0 200 300">
<circle cx="150" cy="150" r="100" fill="#000000" />
</svg>

viewBox="0 0 200 300"
preserveAspectRatio="xMinYMin meet"
100 / 2 = 50

ビューポートの幅 ≠ ビューポートの高さ
canvas(の幅/高さ) < ビューポート(の幅/高さ)
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="300" viewBox="0 0 600 300">
<circle cx="150" cy="150" r="100" fill="#000000" />
</svg>

viewBox="0 0 600 300"
canvas幅 / ビューポート幅 = 300 / 600 = 0.5
preserveAspectRatio="xMinYMin meet"
150 / 2 = 75
canvas(の幅/高さ) < ビューポート(の幅/高さ)
canvas(の幅/高さ) >= ビューポート(の幅/高さ)

Inkscapeでイラストを作る すぐに作れる ずっと使える Inkscapeのすべてが身に付く本
まとめ
記事を書いた人
ナンデモ系エンジニア
これからの"地方格差"なきプログラミング教育とは何かを考えながら、 地方密着型プログラミング学習関連テーマの記事を不定期で独自にブログ発信しています。
カテゴリー