ディスプレイの高精細化が進んでいますので対応方法について検討してみました。
CSSでの対応
-webkit-device-pixel-ratio を使用
devicePixelRatio が1の場合、img1.pngが表示。
devicePixelRatio が2の場合、img2.pngが表示。
/* 通常の場合 */ #test { height:200px; width:200px; background:url(img1.png); } /* devicePixelRatioが2の場合 */ @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) { #test { background-size: 200px 200px; -webkit-background-size: 200px 200px; background:url(img2.png); } }
CSS4のimage-setを使う場合
devicePixelRatio が1の場合、img1x.pngが表示。
devicePixelRatio が2の場合、img2x.pngが表示。
こっちの方がスッキリしていますが、使用できるブラウザが限られます。
#test { background:black; background:-webkit-image-set( url(img1x.png) 1x, url(img2x.png) 2x ); width:200px; height:200px; }
jQueryでの対応
devicePixelRatio が1より大きい場合、
replace を使用して画像の拡張子の前に@2xを追加します。
replace を使用して画像の拡張子の前に@2xを追加します。
$(function(){ var pixelRatio = window.devicePixelRatio; if (pixelRatio > 1) { $('img').each(function() { $(this).attr('src', $(this).attr('src').replace(/^(.+)(\.[a-z]+)$/,"$1@2x$2")); }); } });
思うに
将来的には、こんな事をしなくても良くなると思いますが、暫くは対応が必要ですね