前置き
それぞれのタグの役割が
ごっちゃになって混同していたので
自分の備忘録としても書きました✍️
⬇️srcset
については
こちらでも少し触れました。
【Nuxt.js】画像データをwebPで軽量化よう
今回はより理解を深めるためにsource
コードも使用していきます💫
参考:
なんでもかんでもpicture要素を使えばいいわけじゃない!レスポンシブ・イメージ実装の際の注意点
メディアクエリとviewportの使い方について
HTMLのsrcsetを使って画像をレスポンシブにRetina対応させてみよう
HTMLにimg要素で画像を表示する 2020年版
srcset属性の使い方。画像の表示を高画質ディスプレイに対応させる方法
「解像度」の理解があいまいだったので備忘録としてまとめてみた
srcset
メリットと使い方
srcset
で複数のメディア指定が可能です。
解像度の高いデバイスで
高画質な画像を表示できます✨👀2x
, 3x
はデバイスピクセル比を表します。
要は
デバイスピクセル比が高い
=解像度が高い
=画像をものすごく綺麗に表示できる🌟
ということです💫☝️
2x
はRetinaディスプレイ3x
や4x
は高解像度ディスプレイsrc
はscrset
が対応してないIEなどに必要です。
ちなみに画像の@2x
は
その画像を2倍の解像度にしたものです。
デザインツールによっては
複数の解像度を
一括で書き出しすることもできます。
1 2 3 4 5 6 |
<img src="img/example-img.jpg" srcset="img/example-img.jpg 1x, img/example-img@2x.jpg 2x" alt="Example image" > |
ちなみにsrcset
で単位をw
にし、sizes
属性で指定すれば
50vwでウィンドウサイズの半分にすることが可能です💡
その画像サイズをウィンドウサイズの半分、
まぁ画像サイズを半分にするということです!
1 2 3 4 5 6 7 |
<img type="image/jpeg" src="default.jpeg" sizes="50vw" srcset="/large.jpeg 1440w, /medium.jpeg 720w, /small.png 360w" alt="img" > |
高画質の1枚だけで良い?
ここで疑問を持つ方もいらっしゃるでしょう。
「たくさん画像を書き出さず、
最初から高画質の画像だけを
表示させれば良いのでは❓」
それが1番楽なのですが…
高画質でも解像度が低ければ
せっかくの高画質のままに
見ることはできません👀💦
それでも読み込みに負担がかかります。
なので解像度に合った画像を
表示させるのが1番良いわけです💡
逆に通常の画像を
解像度の高いデバイスで見ると
画質が荒い…😵
となってしまいますね。
source
メリットと使い方
srcset
で解像度別に
画像の切り替えはできたものの、
レスポンシブ対応はまだできていません。
そこで使用するのがsource
タグというわけです💫☝️
sourceタグはpicture
, audio
, video
タグに対して
複数のメディアリソースを指定できます。
今回は画像で例をあげるのでpicture
を使用します。
まずは単純にメディアクエリで
表示している幅で画像を変えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<template> <div class="page"> <picture> <source media="(min-width: 800px)" // 幅が800pxになるまで srcset="/l800.jpeg" > <source media="(min-width: 600px)" // 幅が600pxになるまで srcset="/600.jpeg" > <img srcset="/small.jpeg" alt="sample"> // それ以外=600px以下 </picture> </div> </template> |
あとはデバイスごとに
適切な画像を表示してもらうようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<template> <div class="page"> <picture> <source media="(min-width: 800px)" srcset="/800w.jpeg 800w, /1000w.jpeg 1000w, /1200w.jpeg 1200w" > <source media="(min-width: 600px)" srcset="/800w.jpeg 800w, /1000w.jpeg 1000w, /1200w.jpeg 1200w" > <img srcset="/small.jpeg" alt="sample"> </picture> </div> </template> |
まとめ
画像表示に関するタグは
複数あるので最初は本当に混乱しました😂笑
1つずつ役割を理解することで
スッキリまとまって理解できました🌱