この質問には、いくつかの可能な解決策があります。以下に一般的な3つをリストします。
古いブラウザーを気にしない場合は、CSS のみのソリューション、javascript ソリューション、および HTML5 ソリューション:
CSS
画像をスタイル タグに移動し、メディア クエリを使用して適切な画像を表示することをお勧めします。
<style>
/* mobile first */
.img {
display:none;
}
/* tablet */
@media (min-width:600px) {
.img {
background:url('/path/to/image-tablet.png') no-repeat scroll 0 0 transparent;
}
}
/* desktop */
@media (min-width:1280px) {
.img {
background:url('/path/to/image-large.png') no-repeat scroll 0 0 transparent;
}
}
</style>
<div class="img"></div>
これが動的な Web ページであると仮定すると、css ファイルではなくタグ付きのページに css を含めstyle
ます。
HTML5
完全なブラウザー カバレッジ ( canIuse ) を気にしない場合は、新しい HTML5picture
要素を使用することもできます。
<picture>
<source
media="(min-width: 1280px)"
srcset="/path/to/image-large.png">
<source
media="(min-width: 600px)"
srcset="/path/to/image-tablet.png">
<img src="/path/to/image-mobile.png" /> <!-- a 1x1 empty pixel -->
</picture>
この例では、モバイル ブラウザとそれをサポートしていないブラウザがimg
タグを読み込みます。他のブラウザーは、メディア クエリに適した画像を読み込みます。
このソリューションが好きで、古いブラウザーでも動作するようにしたい場合は、ブラウザーがサポートしていない場合に機能を実装する JS スクリプトを見つけることができます。
Javascript
このアプローチは私にとって最もハックに感じますが、それは私の意見です。IE は 10 以降、このメソッドをサポートしており、非常に大きなブラウザー カバレッジを持っています。
属性なしでイメージ タグを作成しsrc
、イメージ サイズ バージョンをdata
属性として作成します。
<img data-tablet="/path/to/tablet.png" data-desktop="/path/to/large.png" />
<script>
var $el = jQuery('img');
if(window.matchMedia("(min-width: 600px)").matches) {
$el.attr('src', $el.data('tablet'));
}
if(window.matchMedia("(min-width: 1280px)").matches) {
$el.attr('src', $el.data('desktop'));
}
</script>
jQuery を使ってデモを行いましたが、重要な部分はwindow.matchMedia
. これはメディアクエリのようなチェックを行い、ブール値を返します。