• HOME > 
  • HTML > 
  • HTMLのpicture要素とsourceタグの使い方【レス...

HTMLのpicture要素とsourceタグの使い方【レスポンシブ・WebP】

投稿日:

このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。

カテゴリー記事のアイキャッチ画像
広告
広告

picture要素を使った画像の表示について備忘録としてまとめます。

picture要素とは?

HTMLのpicture要素は、様々な画面サイズやブラウザに合わせて、適切な画像を表示させる要素です。

画像の表示と言えばimg要素が真っ先に思い浮かびますが、picture要素はレスポンシブ化や読み込むファイルの切り替えをCSSやJavaScriptを使わずに処理してくれるので、img要素の進化版とも言えます。

source要素とは?

HTMLのsource要素は、picture要素の子要素として複数のメディアソースを指定したいときに使う要素です。

picture要素が「画像を表示する」という枠組みを用意するのに対し、source要素は、その枠の中で「どの画像ファイルを読み込むか」を指定する役割を担っています。

従来のimg要素ではなく、pictureとsourceを用いることで、以下のようなケースに対応することができます。

  • レスポンシブデザインへの対応
  • 様々な画像フォーマットへの対応

レスポンシブデザインへの対応

pictureとsourceを使えば、特定の画面サイズに一致した場合にのみ、そのファイルが使用されるように指定できます。

PC用の大きな画像ファイルをスマートフォンでも表示させようとするとページの読み込みの遅延につながります。

画面サイズごとに適切なサイズのファイルを読み込むようにすれば、あらゆるデバイスでスムーズな閲覧が可能になります。

CSSのメディアクエリを用いてPC用画像とスマートフォン用画像の表示非表示を切り替える方法では、両方のファイルを読み込んでしまうのでページ速度の低下を招きます。

様々な画像フォーマットへの対応

各ブラウザがサポートしている画像のファイル形式は異なります。

一つのフォーマットのファイルしか用意していなければ、そのフォーマットをサポートしていないブラウザを使ったユーザーには画像が表示されないということになります。

近年ではファイルサイズが軽量で表示速度の改善が期待できる「次世代画像フォーマット(WebPなど)」の使用が推奨されていますが、すべてのブラウザがサポートできていないというのが現状です。

pictureとsource要素を使えば、複数の形式の画像ファイル(jpg、png、WebPなど)を候補として用意することができるので、次世代画像フォーマットに対応しているブラウザと対応していないブラウザで表示する画像ファイルを切り替えることが可能です。

source要素とその属性

picture要素はあくまでも画像を表示するという定義を行うだけなので、ファイルパスは子要素に設置するsourceタグのsrcset属性に記述します。

sourceタグにはそれ以外にもmedia属性・type属性を設定でき、それらを使うことで条件ごとに読み込むファイルを切り替えることができます。

source要素のsrcset属性

表示させたいメディアファイルのパスを指定する属性です。

img要素における「src属性」と同じようにファイルパスを設定します。

source要素のmedia属性

どのデバイスや画面サイズでsource要素が適用されるかを指定する属性です。

media属性で指定されたウィンドウサイズの状態でのみ、そのファイルの表示を試みます。

主に、レスポンシブデザインで異なる画面サイズに合わせて画像を切り替えたい時に使用されます。

source要素のtype属性

画像ファイルのMIMEタイプ(ファイルの種類を特定するための識別子)を指定する属性です。

ブラウザがどの画像フォーマットをサポートしているのかを判断する際に利用され、type属性で指定されたMIMEタイプに対応している場合にのみ、そのファイルの表示を試みます。

picture要素の使い方

picture要素を使う時は必ずセットでsourceタグを子要素に設置します。

条件によって分岐させて読み込ませたいファイルの数分sourceタグを設置していきます(タグごとに条件とファイルを指定)。

なおsourceタグには閉じタグは不要です。

pictureタグの使い方

source要素が読み込まれる順番

source要素を記述するとブラウザは上に記述したsource要素から順に読み込みを試みます。

この時、media属性・type属性に指定した条件を満たしていれば、そのsrc属性に指定したファイルを読み込み、条件が当てはまらなければ次のsource要素の読み込みを試すという処理を繰り返します。

条件を満たしてファイルの読み込んだ場合、それより下のsource要素は無視されます。

末尾には該当しなかった場合やpicture要素に非対応のブラウザの場合の為にimg要素を設置し、ファイルパスを指定しておきます。

下記が実際の記述例です。

HTML

<picture>
    <source media="(min-width:900px)" srcset="sample1.jpg">
    <source media="(min-width:600px)" srcset="sample1-tab.jpg">
    <source srcset="sample1-sp.jpg">
    <img src="sample1.jpg">
</picture> 

2行目画面の横幅が900px以上の場合は、PCを想定した「sample1.jpg」を読み込みます。

3行目画面の横幅が900px以下で600px以上の場合は、タブレットを想定した「sample1-tab.jpg」を読み込みます。

4行目画面の横幅がそれ以外(600px以下)の場合は、スマートフォンを想定した「sample1-sp.jpg」を読み込みます。

5行目末尾には該当しなかった場合やpicture要素に非対応のブラウザの場合に表示する画像をimgタグを使って記述しておきます。

読み込み後の画面サイズの可変にも対応

CSSのメディアクエリと同じように、ページ読み込み完了後に画面サイズが動的に変更(PCでブラウザのウィンドウのサイズを狭める等)された時にも、ソースが切り替わります。

ブラウザの対応フォーマットによって表示を切り替える

続いてはpicture要素のtype属性を使って、ブラウザが画像の次世代フォーマットWebPに対応しているかどうかで読み込むファイルを切り替えるようにします。

img要素のみでWebPを扱うと、非対応ブラウザでは画像が表示されないという事態になりかねませんが、picture要素を利用すればそのような状況を回避することができます。

HTML

<picture>
    <source type="image/webp" srcset="sample1.webp">
    <img src="sample1.jpg">
</picture> 

2行目ブラウザがWebPに対応している場合はsample1.webpを読み込みます。

3行目ブラウザがWebPに対応していない場合はsample1.jpgを読み込みます。

まとめ

以上が、HTMLのpicture要素の使い方です。

video要素の子要素にsourceを使う方法については、こちらのページにまとめています。

広告
広告

関連する記事

サムネイル

video要素とsource要素で画面サイズに応じて読み込む……

2024年09月19日
最終更新日:2024年11月07日
HTMLのsource要素とは? HTMLのsource要素は、video要素やpicture要素の子要素として複数のメディアソースを指定したいときに使う要素で […]
サムネイル

HTMLのテキストボックスにクリアボタンを実装【inputの……

2024年09月04日
inputのtype属性を「search」にすれば自動的にクリアボタンが表示されます。簡単ですがデザインはブラウザに依存しておりカスタマイズはできません。JSを使って処理を自作する方法は、HTML・CSS・JSに関するある程度の知識が必要ですが、自由にカスタマイズできます。
サムネイル

HTMLのinputのdateで日付の入力欄を作る【初期値や……

2023年10月01日
最終更新日:2023年09月28日
HTMLのinputタグのtype属性にdateを指定すると、フォームなどに日付の入力欄を設置することができます。
サムネイル

ブラウザキャッシュを回避するCache Bustingの方法……

2023年09月01日
Cache Busting(キャッシュバスティング)とはキャッシュを利用せずに読み込みするように指定することです。
サムネイル

HTMLのdatalistタグの使い方【文字入力とプルダウン……

2023年08月08日
HTMLのdatalistは、テキストボックスとセレクトボックスを組み合わせたような入力欄を作ることができるタグです。一見普通のテキストボックスですが、クリックすると用意した入力候補が表示されます。
サムネイル

HTMLでラジオボタンを作成する方法【初期値の設定・チェック……

2023年08月08日
HTMLのinputタグのtype属性にradioを指定すると、フォームなどにラジオボタンを設置することができます。複数の選択肢の中からどれかひとつをユーザーに選んでもらいたい時に使用します。