はじめに
<picture> 要素を使うと、画面サイズに応じて異なる画像を出し分けることができます。
<picture> <source srcset="/sample_sp.jpg" media="(max-width:767.9px)"> <img src="/sample_pc.jpg" alt="サンプル画像"></picture>HTML仕組み
<img>は必須。alt属性も必ず設定すること<source>のmedia属性に条件を書き、条件が一致した場合にその画像が使われる- どの条件にも合わない場合は
<img>がフォールバックとして表示される
WebP対応(フォールバック付き)
WebPはファイルサイズを大幅に削減できますが、古いブラウザでは非対応のため、JPGのフォールバックをセットで用意するのがベストプラクティスです。
<picture> <source srcset="/sample_sp.webp" media="(max-width:767.9px)" type="image/webp"> <source srcset="/sample_sp.jpg" media="(max-width:767.9px)"> <source srcset="/sample_pc.webp" type="image/webp"> <img src="/sample_pc.jpg" alt="サンプル画像"></picture>HTMLポイント:<source> の順番が重要
ブラウザは 上から順に評価し、最初に条件が一致したものを使用 します。そのため、WebP → JPG の順に記述することで、WebP対応ブラウザはWebPを、非対応ブラウザはJPGを読み込みます。
応用:高解像度(Retina)対応
srcset に 2x を追加することで、Retinaディスプレイ向けの高解像度画像も指定できます。
<picture> <source srcset="/sample_sp.webp 1x, /sample_sp@2x.webp 2x" media="(max-width:767.9px)" type="image/webp" > <source srcset="/sample_sp.jpg 1x, /sample_sp@2x.jpg 2x" media="(max-width:767.9px)" > <source srcset="/sample_pc.webp 1x, /sample_pc@2x.webp 2x" type="image/webp" > <img src="/sample_pc.jpg" alt="サンプル画像"></picture>HTML応用:アートディレクション(トリミング違い)
単なるリサイズではなく、SP版は縦長・PC版は横長など、構図自体を変えたい場合にも <picture> が有効です。
<picture> <!-- SP:正方形トリミング --> <source srcset="/hero_sp.webp" media="(max-width:767.9px)" type="image/webp"> <source srcset="/hero_sp.jpg" media="(max-width:767.9px)"> <!-- PC:ワイドトリミング --> <source srcset="/hero_pc.webp" type="image/webp"> <img src="/hero_pc.jpg" alt="ヒーローイメージ"></picture>HTML補足:よくある注意点
| 項目 | 内容 |
|---|---|
<img> は必須 | フォールバックかつ alt テキストの担い手。省略不可 |
type 属性 | WebP等の新フォーマットを使う場合は明示する(ブラウザが対応確認に使う) |
media の単位 | px 指定はCSSピクセル(論理ピクセル)基準。デバイスピクセルとは異なる |
| CSSとの関係 | <picture> 自体にはレイアウト効果なし。サイズ調整は <img> に対してCSSで行う |
/* <img> に対してCSSでサイズを指定する */picture img { width: 100%; height: auto;}CSS