高解像度ディスプレイに対応させる画像は srcset 1x 2x 3x に置く
<srcset> が納まるタグに注意
画像形式を切り替える場合 <picture><source srcset="" />
<picture>
<source srcset="images/800x600.avif" type="image/avif" />
<source srcset="images/800x600.webp" type="image/webp" />
<img src="images/800x600.jpg" alt="Jaco Pastorius" class="image-width"/>
</picture>
解像度を切り替える場合 <img srcset>
<img
srcset="image/1x.webp 1x, images/2x.webp 2x, image/3x.webp 3x"
src="images/xxx.png"
alt=""
/>
<srcset> と x 記述子がとても便利
srcset(ソースセット)は、img 要素や picture 要素内で、複数のイメージソースを指定するために使用し、1 つ以上の画像候補文字列を表し、それぞれはカンマ (,) で区切り、指定された状況下で使用する画像リソースを指定する。srcset に置いた画像は、Retina ディスプレイ用に画像を切り替えることができる。srcset の指定方法のひとつに、w 記述子がある。
x 記述子は、デバイスピクセル比を指定する記述子だ。以下のように表さられる。
- デバイスピクセルとCSSピクセルが同じ場合(旧世代デバイス)は x1
- デバイスピクセルがCSSピクセルの2倍(縦2倍 x 横2倍)の場合は x2
- 3倍は x3
- 4倍は x4
今閲覧しているデバイスのデバイスピクセル比を、このデバイスピクセル比を調べる確認ツールを使って確認することができる。
iPhone 15 や iPhone 16 Pro Max など解像度は 3倍Retina(1x の3倍のピクセル数) である。x記述子では「3x」になる。通常のディスプレイで 320x320px の画像を表示する場合、Retina(2x) ディスプレイでは 640x640px、3倍Retina では、960x960px の画像を用意することになる。個人的な感触では 2x と3x は殆ど同じなのだが。
アンドロイドの 4K のデバイスピクセル比はどうなのだろう。スマホ・タブレットの解像度一覧表をご覧いただくと良い。
1x、2x、3x、4x を画像リソースに指定しておけば、常にデバイスピクセル比に一致した画像が表示できる。
話しはそれるが、配置場所とサイズの特例を除き、本サイトのレイアウトの場合では、殆どの画像は PC とスマートフォンで使う画像は同様のサイズ画像になるように画策した。だから一枚の画像で賄っていける。
srcsetのx記述子だけで指定する
閲覧者のデバイスのデバイスピクセル比が 2x であれば 2x、3倍 Retina であれば 3x の指定したリソースの画像を表示する。
<img style="width:100%; aspect-ratio: 2 / 1;"
srcset="images/1x.webp 1x, images/2x.webp 2x, images/3x.webp 3x, images/4x.webp 4x"
src="images/1x.png"
alt="Movie Troy"
/>
w 記述子
srcset の指定方法のもうひとつに、画面の幅を対象にした w 記述子がある。
<img srcset="small.png 400w, medium.png 800w, large.png 1200w" />
現在のところ本サイトでは考慮してない。必要があれば、希望的観測により、CSS にてこの部分はマネージメント出来ればと思う。だから、手付かずに、ほとんど省略。