解像度の切り替えにimgix.jsとsrcsetを使用
レスポンシブな画像と聞くと、たいてい「解像度の切り替え」のことを考えます。解像度の切り替えとは、デバイスごとに異なる解像度の画像を提供することです。画像の内容、切り抜き、構成は変わりませんが、解像度だけが変わります。
imgixはこういった処理に長けている他に類のないサービスで、レンダリングはすべてその都度エッジロケーションで実行されます。imgix.jsを使えば、解像度の切り替えはいたって簡単です。
<img ix-src= "https://assets.imgix.net/examples/moon.jpgw=400&h=300&fit=crop&crop=entropy"
sizes="(min-width: 768px) 540px, 100vw"
alt="A photo of the moon">
imgix.jsを利用すると、ix-src属性を持つ画像要素が自動的に処理され、包括的なsrcset 定義が生成されます。要素の詳細を見ると、次のような内容が表示されます。
<img ix-src= "https://assets.imgix.net/examples/moon.jpg?w=400&h=300&fit=crop&crop=entropy"
sizes="(min-width: 768px) 540px, 100vw"
srcset="
https://assets.imgix.net/examples/moon.jpg?w=100&h=75&fit=crop&crop=entropy 100w,
https://assets.imgix.net/examples/moon.jpg?w=210&h=158&fit=crop&crop=entropy 210w,
...
https://assets.imgix.net/examples/moon.jpg?w=2618&h=1964&fit=crop&crop=entropy 2618w.
"
src= "https://assets.imgix.net/examples/moon.jpgw=400&h=300&fit=crop&crop=entropy"
alt="A photo of the moon">
ix-initialized="ix-initialized">
この結果、画像はタブレットやデスクトップでは540ピクセルの幅で読み込まれます。これは (min-width: 768px) 540pxというルールのおかげです。モバイルスクリーンではビューポート幅の100%(100vw) で読み込まれます。モダンブラウザは、適切な画像がローカルキャッシュにある場合、それを選択します。適切な画像がない場合、必要な幅(w)の新しい画像をリクエストします。
高密度ディスプレイを持つデバイスで動作するブラウザは、その解像度に最も適した画像を選択します。この例では、iPhone 6Sはsrcset属性から750wのURLを選択します。iPhone 6S の幅が 375 論理ピクセルですが、画面の密度が2 倍であるためです。したがって、 375 × 2 = 750となります。
その結果、各デバイスとブラウザに最適な画像が読み込まれます。imgix.jsはsrcset属性を生成することで、簡単に解像度の切り替えを処理できます。