LoginSignup
3
2

More than 5 years have passed since last update.

picture、source要素 srcset、sizes属性について

Last updated at Posted at 2018-12-20

srcsetはあくまで同じ見た目の画像に使う

srcsetは画像を○倍にという用途にしか適さない

<img src="img320.jpg" srcset="img640.jpg 640w, img320.jpg 320w" sizes="(max-width:640px) 100vw, 640px"
 alt="">

srcsetの中で画像パス、画像ファイルの横幅を記述。
単位はpxでなくwを用います。
320w=1x、640w=2xみたいな書き方もできる。
sizes属性で画像をウェブページ上で表示する際の横幅を指定

※「画像ファイルの横幅」は、「画像をウェブページ上で表示する際の横幅」では無いことに注意してください。
※srcsetはページを読み込んだ段階で画像を選定
ウィンドウ幅を縮小したときに切り替えたいなら
pictureを使う。

各ブラウザのsrcset仕様

  • Chrome : 大きなサイズの画像ファイルをキャッシュした場合、画面幅を狭めても小さい画像は読み込まれない
  • Firefox : 画面幅を変える度に、画面幅に適したサイズの画像を読み込む
  • Safari : 最初に開いた画面幅に応じた画像ファイルがキャッシュされ、画面幅を変えても画像は再読み込みされない

※追記
Firefox、Safariでは動作が不安定

pictureは違う画像にも対応

pictureはsrcsetとは違いsp時のみ見た目が違う画像にできたりする。
ただしie11を考慮するとポリフィルを導入しなくてはいけない

<picture>
    <source srcset="img640.jpg" media="(max-width:640px)">
    <img src="img320.jpg" alt="">
</picture>

メディアクエリを指定できるのでサイズの大きい順に記述し、最後にimg要素を記述します。

まとめ

srcsetは色々不安定なので
picture使うがいいかも
pictureを使う際はポリフィルを忘れずに!
めんどくさかったらclassで画像を出し分けてください

サンプルコード
https://codepen.io/belowt/pen/BGPvxp

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2