前の記事でsvgの「width」「height」属性とcssで指定した基本的な場合を見ました。本記事ではsvgの「width」「height」属性についてピックアップします。「width」と「height」の組み合わせを20パターン試してみて理解を深めたいと思います。
検証で使用するsvg(幅200px、高さ200px)
検証用に下記のような図形を使用します。
どの部分が抜き出されているか、拡大・縮小はどうなっているか、見た感じで分かりやすいように考えました。下記をご覧ください。一通り説明します。
- SVGの幅・高さはともに200px
- 4色の正方形。サイズは全て同じで幅100×高さ100
- 左上に赤色の正方形(座標は x=0, y=0)
- 右上に青色の正方形(座標は x=100, y=0)
- 左下に黄色の正方形(座標は x=0, y=100)
- 右下に黒色の正方形(座標は x=100, y=100)
- 白い縦線・横線を10間隔で格子状の白い縦線・横線(各19本)
svgソースを見る[クリックすると開きます]
<svg class="square" width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" version="1.1"> <!-- 正方形 --> <rect x="0" y="0" width="100" height="100" fill="red" /> <rect x="100" y="0" width="100" height="100" fill="blue" /> <rect x="0" y="100" width="100" height="100" fill="yellow" /> <rect x="100" y="100" width="100" height="100" fill="black" /> <!-- 線(グリッド) --> <line x1="0" y1="10" x2="200" y2="10" stroke="white" /> <line x1="0" y1="20" x2="200" y2="20" stroke="white" /> <line x1="0" y1="30" x2="200" y2="30" stroke="white" /> <line x1="0" y1="40" x2="200" y2="40" stroke="white" /> <line x1="0" y1="50" x2="200" y2="50" stroke="white" /> <line x1="0" y1="60" x2="200" y2="60" stroke="white" /> <line x1="0" y1="70" x2="200" y2="70" stroke="white" /> <line x1="0" y1="80" x2="200" y2="80" stroke="white" /> <line x1="0" y1="90" x2="200" y2="90" stroke="white" /> <line x1="0" y1="100" x2="200" y2="100" stroke="white" /> <line x1="0" y1="110" x2="200" y2="110" stroke="white" /> <line x1="0" y1="120" x2="200" y2="120" stroke="white" /> <line x1="0" y1="130" x2="200" y2="130" stroke="white" /> <line x1="0" y1="140" x2="200" y2="140" stroke="white" /> <line x1="0" y1="150" x2="200" y2="150" stroke="white" /> <line x1="0" y1="160" x2="200" y2="160" stroke="white" /> <line x1="0" y1="170" x2="200" y2="170" stroke="white" /> <line x1="0" y1="180" x2="200" y2="180" stroke="white" /> <line x1="0" y1="190" x2="200" y2="190" stroke="white" /> <line x1="10" y1="0" x2="10" y2="200" stroke="white" /> <line x1="20" y1="0" x2="20" y2="200" stroke="white" /> <line x1="30" y1="0" x2="30" y2="200" stroke="white" /> <line x1="40" y1="0" x2="40" y2="200" stroke="white" /> <line x1="50" y1="0" x2="50" y2="200" stroke="white" /> <line x1="60" y1="0" x2="60" y2="200" stroke="white" /> <line x1="70" y1="0" x2="70" y2="200" stroke="white" /> <line x1="80" y1="0" x2="80" y2="200" stroke="white" /> <line x1="90" y1="0" x2="90" y2="200" stroke="white" /> <line x1="100" y1="0" x2="100" y2="200" stroke="white" /> <line x1="110" y1="0" x2="110" y2="200" stroke="white" /> <line x1="120" y1="0" x2="120" y2="200" stroke="white" /> <line x1="130" y1="0" x2="130" y2="200" stroke="white" /> <line x1="140" y1="0" x2="140" y2="200" stroke="white" /> <line x1="150" y1="0" x2="150" y2="200" stroke="white" /> <line x1="160" y1="0" x2="160" y2="200" stroke="white" /> <line x1="170" y1="0" x2="170" y2="200" stroke="white" /> <line x1="180" y1="0" x2="180" y2="200" stroke="white" /> <line x1="190" y1="0" x2="190" y2="200" stroke="white" /> </svg>
1.svgの「width」「height」属性の検証
まず、次の記事も含めた計20件の検証結果から分かったことを書いておきます。
- 「width」「height」属性で指定したサイズがsvgの表示サイズとなる
- 中の図(rectやline)のサイズは「width」「height」属性のうち小さい方に合わせて拡大縮小される
※svgの属性「preserveAspectRatio」の初期値が「xMidYMid meet」となっていて、その中の「meet」が設定されていることが上記のようになる理由です - 中の図(rectやline)の表示位置は縦横ともに中央表示される
※svgの属性「preserveAspectRatio」の初期値が「xMidYMid meet」となっていて、その中の「xMidYMid」が設定されていることが上記のようになる理由です - 「width」「height」属性の一方を指定していない場合、指定されている方に合わせて自動で拡大縮小される
- 「width」「height」属性ともに指定されていない場合、表示可能な範囲いっぱいに拡大される
1-1.width=200、height=200(1倍)
svg | 中の図 | |
---|---|---|
幅 | 200px | 200px(設定は200) |
高さ | 200px | 200px(設定は200) |
「svg」と「中の図」が同じサイズです。値が同じなので当然の結果かと思います。
1-2.width=400、height=400(2倍)
svg | 中の図 | |
---|---|---|
幅 | 400px | 400px(設定は200) |
高さ | 400px | 400px(設定は200) |
「svg」と「中の図」が同じサイズです。中の図の指定は幅、高さともに「200px」ですがsvgに合わせて「400px」になりました。
1-3.width=100、height=100(0.5倍)
svg | 中の図 | |
---|---|---|
幅 | 100px | 100px(設定は200) |
高さ | 100px | 100px(設定は200) |
「svg」と「中の図」が同じサイズです。中の図の指定は幅、高さともに「200px」ですがsvgに合わせて「100px」になりました。
1-4.width=400、height=200(幅だけ2倍)
svg | 中の図 | |
---|---|---|
幅 | 400px | 200px(設定は200) |
高さ | 200px | 200px(設定は200) |
「svg」と「中の図」の高さは同じサイズで、幅はサイズが異なる結果になりました。中の図の指定は幅、高さともに「200px」ですがsvgの短い方(高さ)に合わせて「200px」のままでした。
1-5.width=200、height=400(高さだけ2倍)
svg | 中の図 | |
---|---|---|
幅 | 200px | 200px(設定は200) |
高さ | 400px | 200px(設定は200) |
「svg」と「中の図」の幅は同じサイズで、高さはサイズが異なる結果になりました。中の図の指定は幅、高さともに「200px」ですがsvgの短い方(幅)に合わせて「200px」のままでした。
1-6.width=100、height=200(幅だけ0.5倍)
svg | 中の図 | |
---|---|---|
幅 | 100px | 100px(設定は200) |
高さ | 200px | 100px(設定は200) |
「svg」と「中の図」の幅は同じサイズで、高さはサイズが異なる結果になりました。中の図の指定は幅、高さともに「200px」ですがsvgの短い方(幅)に合わせて「100px」になりました。
1-7.width=200、height=100(高さだけ0.5倍)
svg | 中の図 | |
---|---|---|
幅 | 200px | 100px(設定は200) |
高さ | 100px | 100px(設定は200) |
「svg」と「中の図」の高さは同じサイズで、幅はサイズが異なる結果になりました。中の図の指定は幅、高さともに「200px」ですがsvgの短い方(高さ)に合わせて「100px」になりました。
1-8.height=200(widthの指定なし)
svg | 中の図 | |
---|---|---|
幅 | 200px(未設定) | 200px(設定は200) |
高さ | 200px | 200px(設定は200) |
「svg」と「中の図」が同じサイズです。widthは指定していませんが、中の図が正方形ということでそれに合わせてsvgのwidthが自動設定されました。
1-8(追加検証1)viewBox、中の図の幅・高さを400pxにする
追加検証として、viewBox、中の図の幅・高さを400pxにしてみます(各正方形の大きさを幅200px、高さ200pxにします。格子状の線のサイズは変えていません)。よって、svgの幅が自動で200pxになれば、中の図に依存する可能性が高いというわけです。
svg | 中の図 | |
---|---|---|
幅 | 200px(未設定) | 200px(設定は400) |
高さ | 200px | 200px(設定は400) |
予想したとおり、中の図に合わせてsvgの幅は200に設定されました。
1-8(追加検証2)viewBox、中の図の幅だけ400pxにする
念のため、追加検証として、viewBox、中の図の幅だけを400pxにしてみます(各正方形の大きさを幅200px、高さ100pxにします。格子状の線のサイズは変えていません)。よって、svgの幅が自動で400pxになれば、こちらの検証も予想どおりの結果となります。
svg | 中の図 | |
---|---|---|
幅 | 400px(未設定) | 400px(設定は400) |
高さ | 200px | 200px(設定は200) |
予想したとおり、中の図に合わせてsvgの幅は400に設定されました。
1-9.width=200(heightの指定なし)
svg | 中の図 | |
---|---|---|
幅 | 200px | 200px(設定は200) |
高さ | 200px(未設定) | 200px(設定は200) |
「svg」と「中の図」が同じサイズです。heightは指定していませんが、中の図が正方形ということでそれに合わせてsvgのheightが自動設定されました。
1-9(追加検証1)viewBox、中の図の幅・高さを400pxにする
追加検証として、viewBox、中の図の幅・高さを400pxにしてみます(各正方形の大きさを幅200px、高さ200pxにします。格子状の線のサイズは変えていません)。よって、svgの幅が自動で200pxになれば、中の図に依存する可能性が高いというわけです。
※1-8の方でもやりましたが、一応高さの方も検証
svg | 中の図 | |
---|---|---|
幅 | 200px | 200px(設定は400) |
高さ | 200px(未設定) | 200px(設定は400) |
予想したとおり、中の図に合わせてsvgの高さは200に設定されました。
1-9(追加検証2)viewBox、中の図の高さだけ400pxにする
念のため、追加検証として、viewBox、中の図の高さだけを400pxにしてみます(各正方形の大きさを幅100px、高さ200pxにします。格子状の線のサイズは変えていません)。よって、svgの高さが自動で400pxになれば、こちらの検証も予想どおりの結果となります。
※1-8の方でもやりましたが、一応高さの方も検証
svg | 中の図 | |
---|---|---|
幅 | 200px | 200px(設定は200) |
高さ | 400px(未設定) | 400px(設定は400) |
予想したとおり、中の図に合わせてsvgの高さは400に設定されました。
svgの「width」「height」属性のいろいろな組み合わせを検証(後半)
少し長くなってきましたので、記事を分けます。引き続きsvgの「width」「height」属性について検証していきます。
前の記事でsvgの「width」「height」属性の組み合わせについて色々なパターン(前半)を見てきました。残りを後半の本記事で見ていきます。 ▼ 一つ前の記事はこちらから svgで図を描くとき viewBox・wid …
スポンサーリンク