Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8577

htmlとCSSによる画像の出し分け(高解像度対応)

$
0
0

レスポンシブデザインのサイトでは、画像の大きさ(幅と高さ)を可変にする他に、高解像度(デバイスピクセル比が1より大きい)への対応が必要となっています。
javaScriptを使わずに画像の高解像度対応する方法をまとめます。

機種デバイスピクセル比
apple iPhoneX3
hTc U114

他の機種について調べる場合は、javaScriptのwindow.devicePixelRatioで取得できます。
JavaScriptによるユーザー情報の取得で記事を書きました。

デバイスピクセル比での出し分け

html
<img srcset="320x240.png 1x, 640x480.png 2x, 1280x960.png 4x" src="default.png" width="320">

上の例の場合(大きい順に書いても、小さい順に書いても)

デバイスピクセル比表示される画像
1320x240.png
2640x480.png
41280x960.png
sercset非対応端末default.png

ビューポート幅での出し分け

html
<img srcset="320x240.png 320w, 640x480.png 640w, 1280x960.png 1280w" src="default.png">

動作確認時の注意点
ブラウザの幅を変化させた場合

ブラウザ動作
Firefox切り替わる
Edge幅を大きくする場合は切り替わる(小さくするときはリロードすれば切り替わる)
Chrome幅を大きくする場合は切り替わる(小さくするときリロードしても切り替わらないので開き直す)
IEsrcset非対応なのでdefault-image.pngが表示される

上の例の場合に表示される画像
(大きい順に書いても、小さい順に書いても同じです)

デバイスピクセル比ビューポート幅表示される画像
1~320px320x240.png
1321px~640px640x480.png
1641px~1280x960.png
1sercset非対応端末default.png
2~160px320x240.png
2161px~320px640x480.png
2321px~1280x960.png
2sercset非対応端末default.png
3~80px320x240.png
381px~160px640x480.png
3161px~1280x960.png
3sercset非対応端末default.png

(幅320px未満を考慮するケースは無いと思いますが・・・)

sizes属性

  • 画像の幅を指定する
  • srcset属性をビューポート幅(w)で指定している場合のみ使用可能
  • 値には、画像の横幅の表示サイズを指定
  • 単位は em、rem、px、cm、pt、vw、vh、vmin、vmaxなど (calc() 関数も使用可能))
  • メディアクエリが使用可能
html
<img sizes="50vw" srcset="320x240.png 320w, 640x480.png 640w, 1280x960.png 1280w" src="default.png">

ビューポート幅が640pxの場合
画像は640pxの50vw(半分)の320pxで表示される

デバイスピクセル比表示される画像
1320x240.png
2640x480.png
41280x960.png
sercset非対応端末default.png

sizesにメディアクエリを使用する場合の記述方法

html
<img sizes="(max-width: 320px) 100vw, (max-width: 640px) 75vw, 50vw"
 srcset="320x240.png 320w, 640x480.png 640w, 1280x960.png 1280w" src="default.png">

picture要素

  • pictureは子要素にsourceとimgを持つことで機能する(img要素の記述は必須)
  • 複数の画像リソースの中から、 ブラウザの状況に応じて希望する画像を1つ表示してくれる(読み込まれる画像は1つだけ)
  • imgは読み込まれるとそこでpicture内の読み込みが終了するので、picture内の最後に記述
html
<picture>
  <source media="(max-width:640px)" srcset="phone.jpg">
  <source media="(min-width:960px)" srcset="tablet.jpg">
  <img src="legacy.jpg" >
</picture>

source要素

sourceの属性内容
mediaメディアクエリの指定
typeファイルタイプの指定
srcset切り替え幅とファイル名の指定
sizes表示幅の指定

picture要素とsrcset属性

pictureの方がより柔軟な対応ができます。
sourceタグは srcset属性を持つので、組み合わせて利用することができます。

secset or picture用途
srcsetサイズ(解像度)違いの複製画像をデバイス環境に応じて切り替えるだけ
pictureブラウザによって読み込む画像フォーマットを変更する、単なるサイズ違いに留まらない画像の切り替えを行える

背景画像の高解像度化

メディアクエリのresolutionで出し分けを行えます。

デバイスピクセル比resolution(dpi)
196
2192
3288
4384

計算式 デバイスピクセル比 x 96

css
@media screen and (min-resolution: 96dpi) {

  .box {
    background-image: url("bg1x.png");
  }

}

@media screen and (min-resolution: 192dpi) {

  .box {
    background-image: url("bg2x.png");
  }

}

@media screen and (min-resolution: 288dpi) {

  .box {
    background-image: url("bg3x.png");
  }

}

@media screen and (min-resolution: 384dpi) {

  .box {
    background-image: url("bg4x.png");
  }

}

Viewing all articles
Browse latest Browse all 8577

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>