こんにちは。エキサイトでデザイナーをしている齋藤です。
エキサイトホールディングス Advent Calendar 2024 シリーズ1の2日目を担当します。
今回は、HTMLのsource
タグとpicture
タグを使用してレスポンシブに表示する画像を切替える方法をご紹介します。
はじめに
冒頭、source
タグとpicture
タグについてざっくり整理します。
sourceタグとは
source
タグは画像や動画などのメディアファイルを格納する要素です。
srcset
属性にファイルを指定します。
media
属性を使用するとCSSのようにメディアクエリーを指定できます。
<source srcset="..." media="(max-width: 480px)" />
※終了タグは記述しません
pictureタグとは
picture
タグは画像要素の一つで、子要素にはimg
タグ(必須)とsource
タグ(任意)を持ちます。
ページが読み込まれた際に、子要素のsource
タグを検証してメディアクエリーなどの条件に合致する画像を表示します。
どのsource
タグの条件に合致しない場合は、img
タグの内容が使用されます。
どうやって実装するか
例えば、スクリーンサイズが480px以下
の場合はmobile.png
を、それ以外の場合はdesktop.png
を表示したいとします。
その場合は以下のようになります。
<picture> <source srcset="mobile.png" media="(max-width: 480px)" /> <img src="desktop.png" alt="hello world" /> </picture>
source
タグには、「スクリーンサイズが480px以下の場合」という条件となるメディアクエリーをmedia
属性に、条件に合致した場合に表示させたいmobile.png
をsrcset
属性に指定します。
「スクリーンサイズが480px以下の場合」以外はdesktop.png
を表示させたいため、img
タグにはdesktop.png
を指定します。
これで完成です。
注意点
source
タグとpicture
タグを用いる場合はいくつか注意すべきことがあります。
sourceタグはimgタグより前に置く
WHATWGが発行しているsource
タグの仕様書を見ると以下のような記述があります。
As a child of a picture element, before the img element.
これは、ブラウザがHTMLを上から順に解読するため、条件を持つsource
タグを先に検証して、どれにも合致しない場合はimg
タグの内容を用いる仕組みのためです。
sourceタグに指定した画像のaltはimgタグの内容になる
source
タグに指定したmobile.png
の代替テキスト(alt)は、desktop.png
のalt
属性の内容が用いられます。
<picture> <!-- mobile.pngのaltは「hello world」になる --> <source srcset="mobile.png" media="(max-width: 480px)" /> <img src="desktop.png" alt="hello world" /> </picture>
さいごに
今回は、HTMLのsource
タグとpicture
タグを使用してレスポンシブに表示する画像を切替える方法をご紹介しました。
画像周りのレスポンシブ対応をされる方の一助となれば幸いです。
ご精読ありがとうございました。