img要素の width, height 属性新仕様と srcset を同時に使ってみる (2020年)

1. このページの目的

img要素の width, height 属性がアスペクト比を取得するために利用されるようになった。この属性と srcset 属性を同時に使ってする。(2020年)

2. ブラウザの仕様が変わった

(img要素の width, height 属性が指定されている) 且つ、(CSS でも width, height が指定されている) 場合、前者からアスペクト比を取得し、このアスペクト比と後者から画像サイズを算出し、画像ファイルが取得される前であってもその分のスペースを画面上に確保するようになった。よって、レイアウトシフト (jank problem) が起きなくなった。

参考

3. Demo

Demo 1

img属性のwidth,height + CSSのwidth,height を指定する。

HTML

<img id="img1" width="400" height="371" src="c-400.png" alt="">

CSS

#img1 {
  width: 50%;
  height: auto;
}

Demo 2

img要素のwidth,height + sizez属性(場合分け) を指定する。

HTML

<img id="img2" width="400" height="371" src="c-400.png" alt=""
     srcset="c-400.png 400w"
     sizes="(max-width: 800px) 80vw, 400px">

Demo 3

sizez属性で場合分けする(img要素のwidth,heightなし)。

HTML

<img id="img2" src="c-400.png" alt=""
     srcset="c-400.png 400w"
     sizes="(max-width: 800px) 80vw, 400px">

4. 結論