• aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. picture要素でモバイル用の画像など様々な表示切り替えに対応する

picture要素でモバイル用の画像など様々な表示切り替えに対応する

  • 2020.03.24
  • プログラミング
  • HTML
Updated: 2021.11.12
PCとスマホでは縦長か横長といったアスペクト比、画面サイズなど、表示される環境が異なります。そのためディスプレイに合わせた最適な画像を表示させたい場合に、表示画像を切り替えるケースがしばしばあります。そんな時にHTMLだけで完結できるpicture要素を使った方法についてまとめていきたいと思います。   通常、画像はimg要素を使って表示させますが、HTML5で追加されたpicture要素を使った場合にはこのような形になります。
<picture>
 <source media=" MEDIA_QUERY " srcset=" IMAGE_FILE_PATH ">
 <img src="../img/default.jpg" alt="Image">
</picture>
  なにやら見慣れないタグや属性がありますが、主な要素や属性を下記にまとめています。
picture要素画像要素を示すタグで内部にはsource要素とimg要素を内包します
source要素画像や動画ファイルなどのリソースが複数存在する場合に個別で指定するための要素
media属性メディアクエリの指定を値で行う、CSSで扱うメディアクエリが使える
srcset属性画像や動画ファイルなどのソースを複数設定できる
  このように画像リソースをより詳細に指定する場合にpicture要素が用いられ、これによって画像リソースを切り替えることが可能になります。picture要素内では上から順に、条件に対応しているsource要素を判別し、どの条件にもマッチしない場合には最後のimg要素が選択される形になりますので、記述する順番も重要になってきます。  
モバイル用に表示画像を切り替える
いわゆる「レスポンシブイメージ」というもので、ディスプレイ幅によって表示画像を切り替える方法になります。画像をトリミングせずに全て表示させる前提で、表示画像を切り替え最適化するこの手法はアートディレクションとも呼ばれます。 【HTML】※一部抜粋
<picture>
 <source media="(min-width: 769px)" srcset="../img/desktop.jpg">
 <source media="(min-width: 481px)" srcset="../img/tablet.jpg">
 <img src="../img/mobile.jpg" alt="Image">
</picture>
  上記では、画面幅が769pxまではPC用の画像が表示され、768pxからはタブレット用の画像が表示され、480pxになるとスマホ用の画像が表示されるというものです。source要素では、リソースファイルの指定をsrcset属性で行うので注意します。img要素のsrc属性の時と同じような感じでファイルパスを指定します。   最後にフォールバック用として表示させるimg要素を忘れずに入れておきます。実際に上記のコードで切り替わるサンプルを下記に用意しています。    
WebP形式の画像表示対応をする
次世代の画像フォーマットとして注目されている「WebP形式」の画像ですが、ブラウザによってはまだ対応していないものもあります。そんな時の表示切り替えにもpictureタグは有効です。 【HTML】※一部抜粋
<picture>
 <source type="image/webp" srcset="../img/sample.webp">
 <img src="../img/sample.jpg" alt="Image">
</picture>
  今回は画面幅によって切り替える必要はないのでメディアクエリは不要ですが、代わりにtype属性を使ってMIMEタイプを指定しておきます。あとは先ほどと同じくフォールバック用の画像をimg要素で用意してあげることで、WebP形式に対応しているブラウザではWebP形式の画像が表示されるようになります。    
高解像度ディスプレイ用に表示画像を切り替える
最近では高解像用のディスプレイが増えてきていますが、まだ通常の解像度であるディスプレイも存在しています。そんな時に画像リソースを高解像用のディスプレイに合わせてしまうと不用意に画像サイズが大きくなり、読み込みが遅くなる可能性があるという問題が発生してきます。 【HTML】※一部抜粋
<img 
 srcset="
  ../img/sample@1.5x.jpg 1.5x,
  ../img/sample@2x.jpg 2x,
  ../img/sample@3x.jpg 3x
 " 
 src="../img/sample.jpg"
 alt="Image"
>
  実は単純に解像度別に画像を切り分けたい場合には、上記のようにimg要素単独で、srcset属性によってそれぞれの解像度別に表示させる画像のファイルパスを指定すれば実現できます。ただし、その際には「ピクセル密度記述子」と呼ばれる記法が必要となります。   ピクセル密度記述子は、画像ファイル名の後に半角スペースを挟んで、1x、2xなどといった形で解像度の倍率を指定します。合わせて画像ファイルには@2xといった表記にしておくとわかりやすいですね。これらをカンマ区切りで並べていきます。一応、今回はpicture要素を使った切り替えがテーマですので、高解像度用の切り替えと画面幅での切り替えの両方が必要となった場合には下記のように組み合わせて実装する形になります。 【HTML】※一部抜粋
<picture>
 <source 
  media="(max-width: 768px)" 
  srcset="
   ../img/mobile.jpg 1x,
   ../img/mobile.jpg@2x 2x
  "
 >
 <img 
  srcset="../img/desktop@2x.jpg 2x" 
  src="../img/desktop.jpg" 
  alt="Image"
 >
</picture>
  下記に解像度別で画像が表示切り返されるような形にしてありますので、表示中にディスプレイで試してみてください。    
IE11では対応していないので注意
今回まとめているpictureタグですが、IE11には対応していないので注意が必要です。IE11に対応させるには下記のように別途ライブラリを使うなどJavaScriptで対応するようにしましょう。 【Picturefill】 http://scottjehl.github.io/picturefill/ (過去記事) サイトの画像をjQueryでRetinaディスプレイ対応にする  
  今回はpicture要素を使って画像表示の切り替えをする方法についてまとめてみました。このようにHTML5以降はいろんな機能が拡張してきているので、これらを使いこなすことでかなり効率的なコーディングができるのではないでしょうか。これまでメディアクエリを使ってCSSの表示非表示で実装していた方は是非試してみてはいかがでしょうか。
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)

recent articles

  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー

    2024.12.25/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成

    2024.08.26/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成

    2024.07.31/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理

    2024.06.30/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築

    2024.05.29/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入

    2024.04.30/Next.js
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact