SVGのviewBoxとレスポンシブな拡大縮小
どの画面サイズでもSVGが正しく拡大縮小されるようにします
「SVGのviewBoxとレスポンシブな拡大縮小」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。
widthとheightとviewBoxの違い
SVGのwidthとheightは、DOM内でのレンダリングサイズを設定します。viewBox属性は内部の座標空間を定義します。これらは独立しており、width="200" height="200"でviewBoxが"0 0 100 100"の場合、座標空間は2倍に拡大されます。
viewBoxの構文
viewBox="min-x min-y width height"。最も一般的なviewBox="0 0 100 100"は、原点から始まる100x100の座標空間を定義します。SVG内の座標値はピクセルではなく、この座標空間を参照します。
レスポンシブなSVG
レスポンシブなSVGでは、width属性とheight属性を省略するか(または100%に設定し)、viewBoxで縦横比を定義します。CSSにsvg { width: 100%; height: auto; }を追加します。SVGはアスペクト比を維持しながら、コンテナに合わせて拡大縮小されます。
preserveAspectRatio
preserveAspectRatioは、アスペクト比が異なる場合にviewBoxをSVGのビューポートにどのように収めるかを制御します。値には、"xMidYMid meet"(デフォルト。レターボックス表示)、"xMidYMid slice"(領域を埋めるように切り抜き)、"none"(アスペクト比を維持せず引き伸ばす)があります。
パン操作用のmin-xとmin-y
min-xとmin-yを変更すると、SVGの座標空間内で表示する範囲をパンできます。viewBox="50 50 100 100"では、(50,50)から(150,150)までの領域が表示されます。JavaScriptでviewBoxの値を更新することで、インタラクティブなパン操作を実現できます。
viewBoxによるズーム
viewBoxの幅と高さを小さくするとズームインできます。viewBox="25 25 50 50"では、より小さい領域がSVG要素いっぱいに拡大表示されます。値を大きくするとズームアウトできます。wheelイベントでviewBoxを更新すれば、SVG要素自体を拡大縮小せずにインタラクティブなズームを実現できます。
img内のSVGとインラインSVG
imgタグ内のSVGはobject-fitによってレスポンシブに拡大縮小できますが、CSSでスタイルを設定したり、スクリプトで操作したりできません。インラインSVGはCSSとJavaScriptから完全に操作できますが、HTMLのサイズが増加します。インタラクティブ性の要件に応じて選択してください。
アイコンSVGのパターン
アイコンSVGでは固定のviewBox(例:"0 0 24 24")を使用し、widthとheightは指定しません。これにより、CSSでサイズを設定できます。.icon { width: 1.5rem; height: 1.5rem; }。viewBoxによって、どのようなサイズでもアイコンを正しく拡大縮小し、鮮明なベクター表示を維持できます。
アイコンスプライト用のsymbol
非表示のSVG内に<symbol viewBox="0 0 24 24">要素としてアイコンを定義します。<use href="#icon-name">で参照します。各use要素には独自のwidth、height、fill、colorを設定できるため、すべてのアイコンを1つのスプライトファイルで管理できます。
テーマ設定用のcurrentColor
SVGのfill="currentColor"は、要素または親要素のCSSのcolorプロパティを継承します。SVGまたは親要素にcolor: redを設定すると、アイコンが自動的に赤で塗りつぶされます。これにより、SVG専用のスタイル設定を行わなくても、単色アイコンをテキストの色に合わせられます。
viewBoxのデバッグ
SVGの内容が切り取られたり、予期しない位置に表示されたりする場合は、viewBoxの値をログ出力または検査してください。よくある誤りは、元のアートのピクセル寸法をそのままviewBoxに設定し、表示サイズに合わせて調整しないことです。これにより、拡大縮小に問題が生じます。viewBoxがSVGアートの実際のコンテンツ範囲と一致していることを確認してください。
理解度チェック
SVGを任意のコンテナ幅に合わせてレスポンシブに拡大縮小するには、どうすればよいですか?
まとめ
SVGのviewBoxは、レンダリングされるピクセルサイズとは独立した内部座標空間を定義し、レスポンシブな拡大縮小を可能にします。viewBoxとwidth:100%; height:autoを設定すると、SVGは任意のコンテナに適応します。symbol+useスプライトパターン、currentColorによるテーマ設定、preserveAspectRatioを組み合わせることで、柔軟でテーマに対応したSVG利用に必要な機能がそろいます。
よくある質問
「SVGのviewBoxとレスポンシブな拡大縮小」レッスンは無料ですか?
はい。「SVGのviewBoxとレスポンシブな拡大縮小」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。
「SVGのviewBoxとレスポンシブな拡大縮小」で何を学びますか?
どの画面サイズでもSVGが正しく拡大縮小されるようにします ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
HTML Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「SVGのviewBoxとレスポンシブな拡大縮小」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このHTML Academyレッスンでコードを書いて実行できますか?
はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- インラインSVGとimg・objectの比較
- SVGの基本図形 rect circle path
- SVGのviewBoxとレスポンシブな拡大縮小
- CSSとSMILによるSVGアニメーション