HTML: HTMLレスポンシブ画像

同じ画像でも、スマートフォン、タブレット、デスクトップで異なるサイズや解像度で表示されるべきです ― これが「レスポンシブ画像」です。すべての画面サイズで画像をクリアに、帯域効率よく、高速に読み込む方法を学びましょう。

1. ビューポート設定

レスポンシブデザインの第一歩は、ビューポートを設定することです。これがないと、モバイルブラウザはページを980px幅に縮小して表示するため、テキストや画像が非常に小さくなります。この <meta> タグを追加すると、ページ幅がデバイス画面に一致します。

▶ サンプル

HTML
<!-- ✅ ビューポート設定あり(推奨) -->
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body { margin: 0; font-family: sans-serif; }
.box { padding: 20px; background: #e3f2fd; }
</style>
</head>
<body>
<div class="box">
<h1>こんにちは、モバイル!</h1>
<p>スマートフォンで表示すると、テキストサイズが適切で、1画面にすべての内容が収まります。</p>
</div>
</body>

<!-- ❌ ビューポート設定なし -->
<head>
<style>
body { margin: 0; font-family: sans-serif; }
.box { padding: 20px; background: #ffebee; }
</style>
</head>
<body>
<div class="box">
<h1>こんにちは、モバイル!</h1>
<p>スマートフォンで表示すると、ページが980pxに縮小され、テキストが非常に小さくなります。</p>
</div>
</body>
▶ 試してみよう

2. 画像のレスポンシブ対応

画像をコンテナ幅に自動適応させるために最もよく使われる2つのCSSプロパティ:

▶ サンプル

HTML
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: sans-serif; padding: 20px; }
.container {
width: 80%;
max-width: 600px;
border: 2px dashed #999;
padding: 10px;
margin-bottom: 20px;
}
.img-max {
max-width: 100%;
height: auto;
}
.img-full {
width: 100%;
height: auto;
}
</style>
</head>
<body>
<h2>max-width: 100%(アスペクト比を維持、歪まない)</h2>
<div class="container">
<img src="https://via.placeholder.com/800x400" alt="サンプル画像" class="img-max">
<p>元の画像幅800px、コンテナ600px。画像は歪まずに600pxに縮小されます。</p>
</div>

<h2>width: 100%(コンテナいっぱいに表示)</h2>
<div class="container">
<img src="https://via.placeholder.com/800x400" alt="サンプル画像" class="img-full">
<p>画像は常にコンテナ幅いっぱいに表示されます。height: auto を追加して歪みを防ぎます。</p>
</div>
</body>
</html>
▶ 試してみよう
📌 画像の読み込み速度は重要です。CSSで大きな画像を縮小しても、「見た目が小さくなる」だけで ― ブラウザはフルサイズのオリジナルファイルをダウンロードしています。アップロード前に画像を適切なサイズにトリミングするのが最善です:モバイル用に小さい画像、デスクトップ用に大きい画像。これにより読み込み速度が大幅に向上します。


3. srcset属性

srcset を使うと、ブラウザが画面密度(1x、2x、3x)やビューポート幅に基づいて最適な画像を自動選択できます。複数の画像バージョンを提供するだけで、ブラウザが「賢く選び」ます。

▶ サンプル

HTML
<!-- 画面密度に基づいて選択 -->
<img src="photo-1x.jpg"
srcset="photo-1x.jpg 1x, photo-2x.jpg 2x, photo-3x.jpg 3x"
alt="サンプル写真">

<!-- ビューポート幅に基づいて選択 + sizesで画像表示幅を指定 -->
<img src="small.jpg"
srcset="small.jpg 480w,
medium.jpg 768w,
large.jpg 1200w"
sizes="(max-width: 480px) 100vw,
(max-width: 768px) 80vw,
60vw"
alt="レスポンシブ画像の例">
▶ 試してみよう

srcset には2つの一般的な使い方があります。


4. picture要素

<picture>srcset よりも柔軟です。異なる画面幅でまったく異なる画像を読み込むことができます ― 例えば、ワイド画面ではパノラマ画像、狭い画面ではクローズアップ画像(デザイン用語で「アートディレクション」と呼ばれます)。

▶ サンプル

HTML
<picture>
<!-- ワイド画面 >= 1200px:全景を表示 -->
<source media="(min-width: 1200px)" srcset="landscape-full.jpg">
<!-- 中画面 >= 768px:中程度のビュー -->
<source media="(min-width: 768px)" srcset="landscape-medium.jpg">
<!-- 小画面 < 768px:クローズアップ -->
<source media="(max-width: 767px)" srcset="landscape-cropped.jpg">
<!-- フォールバック:ブラウザがpictureをサポートしない場合 -->
<img src="landscape-medium.jpg" alt="風景写真">
</picture>
▶ 試してみよう

<picture> は複数の画像フォーマット(WebPなど)を提供するためにもよく使われ、ブラウザが最初にサポートするフォーマットを選択します。

▶ サンプル

HTML
<picture>
<source srcset="photo.avif" type="image/avif">
<source srcset="photo.webp" type="image/webp">
<img src="photo.jpg" alt="写真">
</picture>
▶ 試してみよう

ブラウザは各 <source> を上から順にチェックします。フォーマットをサポートしていればそれを読み込み、どれもサポートしていなければ <img> にフォールバックします。これにより、新しいフォーマットの圧縮メリットを享受しながら互換性を維持できます。

❓ よくある質問

Q srcsetsizesの違いは何ですか?
A srcsetは複数の画像ソースとその解像度(480w768wなど)を提供し、sizesは異なるビューポート幅での画像の実際の表示サイズ((max-width: 480px) 100vwなど)をブラウザに伝えます。ブラウザはこの2つの情報に基づいて、読み込むべき画像を計算します。簡単に言うと、srcsetは「利用可能な画像」、sizesは「さまざまな状況での画像の大きさ」です。
Q なぜ画面サイズを判断して画像を切り替えるJavaScriptを使わないのですか?
A srcset+sizesを使用する利点は3つあります:1)ブラウザはHTMLを解析しながら画像の読み込みを決定でき、JavaScriptの実行を待つ必要がない;2)JavaScriptが無効な場合でも機能する;3)ブラウザはより intelligentな選択ができます(ネットワーク状況、デバイスのピクセル比などを考慮)。JavaScriptは複雑なアートディレクションシナリオ(異なる構成など)にのみ適しており、単純な解像度の切り替えはsrcsetで処理されます。
Q <picture>srcsetはいつ使うのですか?
A srcsetは「同じ画像の異なる解像度バージョン」用で、ブラウザが自動的に適切な鮮明度を選択します。<picture>は「さまざまなシナリオで異なる画像を表示」するためで、異なる構成(アートディレクション)や異なるフォーマット(WebP/AVIF/JPG)を指定できます。シンプルなルール:鮮明度だけが異なる場合はsrcsetを使い、構成やフォーマットが異なる場合は<picture>を使います。
Q レスポンシブ画像はSEOに影響しますか?
A 正しく使用されたレスポンシブ画像はSEOに肯定的な影響を与えます:1)ページの読み込み速度を向上させ(Core Web Vitals指標);2)モバイルユーザーエクスペリエンスを向上させ;3)検索エンジンがaltテキストをインデックスできます。注意:srcset内の画像は同じコンテンツの異なるバージョンでなければなりません。完全に異なる画像を使用すると、検索エンジンが欺瞞と見なす可能性があります。

📖 まとめ

📝 練習問題

  1. レスポンシブ画像ギャラリー: 3枚の画像を持つギャラリーページを作成し、各画像に max-width: 100% を適用してモバイルで完全に表示されるようにしてください。各画像に1xと2xのバージョンを提供するために srcset を使用してください。
  2. アートディレクション練習: <picture> を使って以下を実装してください:デスクトップでは1200px幅の風景写真、タブレットでは768pxのトリミング版、スマートフォンでは480pxのクローズアップ。min-width のメディアクエリでブレークポイントを制御してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%