Picture 要素のテスト

現在使用中のデバイスのデバイスピクセル比:

現在のウィンドウ幅:

各画像の幅: c-100.png(100px), c-200.png(200px), c-300.png(300px), c-400.png(400px)

実験1: media属性を使った場合分け

HTMLソース

<picture>
  <source srcset="c-100.png" media="(max-width: 700px)">
  <source srcset="c-200.png" media="(max-width: 800px)">
  <source srcset="c-300.png" media="(max-width: 900px)">
  <source srcset="c-400.png" media="(min-width: 900px)">
  <img src="c-100.png" alt="" />
</picture>

画像を表示する

結果・分かったこと

実験2: 幅記述子を使う

HTMLソース

<picture>
  <source srcset="c-100.png 100w" sizes="110px" media="(max-width: 700px)">
  <source srcset="c-200.png 200w" sizes="210px" media="(max-width: 800px)">
  <source srcset="c-300.png 300w" sizes="310px" media="(max-width: 900px)">
  <source srcset="c-400.png 400w" sizes="410px" media="(min-width: 900px)">
  <img src="c-100.png" alt="" />
</picture>

画像を表示する

結果・分かったこと

実験3: ピクセル密度記述子を使う

HTMLソース

<picture>
  <source srcset="c-100.png 0.5x" type="image/png">
  <source srcset="c-200.png 1x"   type="image/png">
  <source srcset="c-300.png 1.5x" type="image/png">
  <source srcset="c-400.png 2x"   type="image/png">
  <img src="c-200.png" alt="" />
</picture>

画像を表示する

結果・分かったこと

実験4: png と webp を指定する

ブラウザが対応していれば webp が適用される。そうでなければ、png が適用される。

HTMLソース

<picture>
  <source srcset="ryuukishi-350.webp" type="image/webp">
  <img src="ryuukishi-350.png" alt="ryuukishi-350" />
</picture>

画像を表示する

ryuukishi-350

実際に適用された画像ファイル (JavaScriptで動的に取得しています)

結果・分かったこと

実験5: メディアクエリーで場合分けしつつ、png と webp を指定する

かなり面倒な記述になるがやってみる。

HTMLソース

<picture>
  <source type="image/webp"
          media="(max-width:800px)"
          sizes="200px"
          srcset="c-100.webp 100w,
                  c-200.webp 200w,
                  c-300.webp 300w,
                  c-400.webp 400w">
  <source type="image/webp"
          sizes="400px"
          srcset="c-100.webp 100w,
                  c-200.webp 200w,
                  c-300.webp 300w,
                  c-400.webp 400w">
  <img srcset="c-100.png 100w,
               c-200.png 200w,
               c-300.png 300w,
               c-400.png 400w"
    sizes="(max-width:800px) 200px, 400px"
    src="c-200.png"
    alt="c-200">
</picture>

画像を表示する

c-200

実際に適用された画像ファイル (JavaScriptで動的に取得しています)

結果・分かったこと

参考