10日で覚えるHTMLDay 4: 画像とメディア
books.chapter 410日で覚えるHTML

Day 4: 画像とメディア

今日学ぶこと

  • 画像の埋め込みと最適化
  • レスポンシブ画像
  • 音声と動画の埋め込み
  • iframe による外部コンテンツの表示

画像の基本

<img> 要素

画像を表示するには<img>要素を使います。空要素なので終了タグはありません。

<img src="photo.jpg" alt="写真の説明">

必須属性

属性 説明 重要度
src 画像のパス(URL) 必須
alt 代替テキスト 必須

オプション属性

属性 説明
width 幅(ピクセル) width="300"
height 高さ(ピクセル) height="200"
loading 遅延読み込み loading="lazy"
decoding デコード方式 decoding="async"
<img
    src="images/hero.jpg"
    alt="夕焼けの海岸線"
    width="800"
    height="600"
    loading="lazy"
>

重要: widthheightを指定することで、画像読み込み前にブラウザがスペースを確保し、レイアウトのずれ(CLS)を防ぎます


alt属性の重要性

alt属性はアクセシビリティの要です。

flowchart TB
    subgraph Alt["alt属性の役割"]
        A1["🔇 スクリーンリーダー<br>視覚障害者に内容を伝える"]
        A2["🖼️ 画像エラー時<br>代替テキストを表示"]
        A3["🔍 SEO<br>検索エンジンの理解を助ける"]
    end
    style A1 fill:#3b82f6,color:#fff
    style A2 fill:#f59e0b,color:#fff
    style A3 fill:#22c55e,color:#fff

alt属性の書き方

シーン alt属性
意味のある画像 内容を説明 alt="赤い帽子をかぶった猫"
装飾的な画像 空のalt alt=""
グラフ・図 データを説明 alt="2025年の売上:前年比120%"
ロゴ 会社名など alt="株式会社サンプル"
リンク内画像 リンク先を説明 alt="ホームへ戻る"
<!-- ✅ 良い例 -->
<img src="cat.jpg" alt="窓辺で昼寝する茶色の猫">

<!-- ❌ 悪い例 -->
<img src="cat.jpg" alt="画像">
<img src="cat.jpg" alt="cat.jpg">
<img src="cat.jpg">  <!-- alt属性なし -->

画像フォーマット

フォーマット 拡張子 特徴 用途
JPEG .jpg 写真向き、非可逆圧縮 写真、複雑な画像
PNG .png 透過対応、可逆圧縮 ロゴ、スクリーンショット
GIF .gif アニメーション対応 簡単なアニメーション
SVG .svg ベクター形式、拡大劣化なし アイコン、ロゴ
WebP .webp 高圧縮、JPEGとPNGの代替 汎用(モダンブラウザ対応)
AVIF .avif 最新の高圧縮フォーマット 汎用(対応ブラウザ拡大中)

<figure><figcaption>

画像にキャプション(説明文)をつけるには<figure><figcaption>を使います。

<figure>
    <img src="chart.png" alt="2025年の月別売上グラフ">
    <figcaption>図1: 2025年の月別売上推移</figcaption>
</figure>

ポイント: <figure>は画像だけでなく、コードブロック、引用、表など自己完結したコンテンツに使えます。


レスポンシブ画像

<picture> 要素

異なるデバイスや画面サイズに合わせて、最適な画像を表示できます。

<picture>
    <source media="(min-width: 800px)" srcset="hero-large.webp" type="image/webp">
    <source media="(min-width: 800px)" srcset="hero-large.jpg">
    <source srcset="hero-small.webp" type="image/webp">
    <img src="hero-small.jpg" alt="ヒーロー画像">
</picture>
flowchart TB
    subgraph Picture["&lt;picture&gt; による画像の出し分け"]
        PC["🖥️ デスクトップ<br>hero-large.webp"]
        Tablet["📱 タブレット<br>hero-medium.webp"]
        Mobile["📱 スマホ<br>hero-small.webp"]
    end
    style PC fill:#3b82f6,color:#fff
    style Tablet fill:#8b5cf6,color:#fff
    style Mobile fill:#22c55e,color:#fff

srcsetsizes

<img
    src="photo-400.jpg"
    srcset="photo-400.jpg 400w,
            photo-800.jpg 800w,
            photo-1200.jpg 1200w"
    sizes="(max-width: 600px) 100vw,
           (max-width: 1200px) 50vw,
           33vw"
    alt="レスポンシブ画像の例"
>
属性 説明
srcset 複数の画像とその幅を指定
sizes 表示条件ごとの画像サイズを指定

音声(<audio>

<audio controls>
    <source src="music.mp3" type="audio/mpeg">
    <source src="music.ogg" type="audio/ogg">
    <p>お使いのブラウザは音声再生に対応していません。</p>
</audio>

audio の属性

属性 説明
controls 再生コントロールを表示
autoplay 自動再生(非推奨)
loop ループ再生
muted ミュート状態で開始
preload none / metadata / auto

動画(<video>

<video controls width="640" height="360">
    <source src="video.mp4" type="video/mp4">
    <source src="video.webm" type="video/webm">
    <p>お使いのブラウザは動画再生に対応していません。</p>
</video>

video の属性

属性 説明
controls 再生コントロール
poster 再生前のサムネイル画像
autoplay 自動再生(muted必須)
muted ミュート
loop ループ
playsinline インライン再生(iOS向け)
<video
    controls
    poster="thumbnail.jpg"
    width="640"
    height="360"
    preload="metadata"
>
    <source src="video.mp4" type="video/mp4">
</video>

iframe

外部コンテンツを埋め込むには<iframe>を使います。

<!-- YouTube動画 -->
<iframe
    width="560"
    height="315"
    src="https://www.youtube.com/embed/VIDEO_ID"
    title="動画のタイトル"
    allowfullscreen
></iframe>

<!-- Google Maps -->
<iframe
    src="https://www.google.com/maps/embed?pb=..."
    width="600"
    height="450"
    style="border:0;"
    allowfullscreen
    loading="lazy"
    title="地図"
></iframe>

セキュリティ: <iframe>sandbox属性を使うと、埋め込みコンテンツの権限を制限できます。


実践: 写真ギャラリーページ

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>写真ギャラリー</title>
</head>
<body>
    <h1>写真ギャラリー</h1>

    <figure>
        <img src="images/sunset.jpg" alt="海に沈む夕日" width="600" height="400" loading="lazy">
        <figcaption>海に沈む夕日 — 2025年夏撮影</figcaption>
    </figure>

    <figure>
        <img src="images/mountain.jpg" alt="雪を被った山頂" width="600" height="400" loading="lazy">
        <figcaption>冬の富士山</figcaption>
    </figure>

    <h2>おすすめ動画</h2>
    <video controls poster="images/video-thumb.jpg" width="600">
        <source src="videos/travel.mp4" type="video/mp4">
        <p>お使いのブラウザは動画に対応していません。</p>
    </video>
</body>
</html>

まとめ

概念 説明
<img> 画像の埋め込み
alt 代替テキスト(必須)
<figure> / <figcaption> 画像とキャプションのセット
<picture> レスポンシブ画像
<audio> 音声の埋め込み
<video> 動画の埋め込み
<iframe> 外部コンテンツの埋め込み

重要ポイント

  1. alt属性は必ず記述する(アクセシビリティとSEO)
  2. width/heightを指定してレイアウトシフトを防ぐ
  3. WebP/AVIFなどモダンなフォーマットを活用する
  4. loading="lazy"遅延読み込みを活用する

練習問題

問題1: 基本

3枚以上の画像を含むギャラリーページを作成してください。各画像に<figure><figcaption>をつけましょう。

問題2: 応用

<picture>要素を使い、画面サイズによって異なる画像を表示するページを作成してください。

チャレンジ問題

YouTube動画を<iframe>で埋め込み、その上下に説明テキストを配置したページを作成してください。


参考リンク


次回予告: Day 5では「リストとテーブル」について学びます。データを整理して表示する方法をマスターしましょう。