実験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>
画像を表示する
結果・分かったこと
- ビューポート幅によって、利用する画像を切り替えることができた。
srcset
属性ではなく、src
属性で画像ファイルを指定すると切り替えはできない。media
属性で条件を指定する場合は、src
属性ではなくsrcset
属性で画像を指定しなければいけない。
実験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>
画像を表示する
結果・分かったこと
srcset
属性は、media
属性やtype
属性がないと使用されない。sizes
属性は、元の画像サイズとは無関係に自由にサイズを指定できる。
実験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>
画像を表示する
実際に適用された画像ファイル (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>
- PNG画像の設定は
<img>
要素に記述する。srcset
属性やsizes
属性を使う。 <img>
要素のsizes
属性に記述した条件毎に<source>
要素を追加する。条件の部分はmedia
属性に記述し、サイズはsizes
属性に記述する。- 各
<source>
要素のsrcset
属性には WebP画像を羅列する。内容が重複するが仕方ない。 - 各
<source>
要素のtype
属性値とmedia
属性値が、その要素を適用する条件となる。
画像を表示する
実際に適用された画像ファイル (JavaScriptで動的に取得しています)
結果・分かったこと
- 記述がかなり面倒になるが可能であることが分かった。