現在開発中のサイトでは、さまざまなピクセル比をサポートしようとしています。また、必要なブラウザプレフィックスを提供して、合理的な範囲内でさまざまなデバイス/ブラウザをサポートできるようにします。また、可能な限りSVGを使用していますが、写真画像用のソリューションが必要です。理想的には、以下を提供したいと思います。
私の質問は、これを達成するためにメディアクエリを作成する最善の方法は何でしょうか?私の主な関心事は、私の主張が私が達成しようとしているものに対して正しいことです。ご提案やアドバイスをいただければ幸いです。現在、私のコードは次のとおりです。
/* @1x Images (Pixel Ratio 1.0) */
#dgst_shopping_bag {background-image:url(img/shopping_bag.png);}
/* @2x Images (Pixel Ratio of 1.25+) */
@media only screen and (-o-min-device-pixel-ratio: 5/4),
only screen and (-webkit-min-device-pixel-ratio: 1.25),
only screen and (min-device-pixel-ratio: 1.25),
only screen and (min-resolution: 1.25dppx) {
#dgst_shopping_bag {background-image:url(img/[email protected]);}
}
/* @3x Images (Pixel Ratio of 2.25+) */
@media only screen and (-o-min-device-pixel-ratio: 9/4),
only screen and (-webkit-min-device-pixel-ratio: 2.25),
only screen and (min-device-pixel-ratio: 2.25),
only screen and (min-resolution: 2.25dppx) {
#dgst_shopping_bag {background-image:url(img/[email protected]);}
}
/* @4x Images (Pixel Ratio of 3.25+) */
@media only screen and (-o-min-device-pixel-ratio: 13/4),
only screen and (-webkit-min-device-pixel-ratio: 3.25),
only screen and (min-device-pixel-ratio: 3.25),
only screen and (min-resolution: 3.25dppx) {
#dgst_shopping_bag {background-image:url(img/[email protected]);}
}
代替案1:私は<picture>
タグでこれを達成します。サポートしていないブラウザに代替コンテンツを提供できることはわかっています<picture>
、それを利用する際の私の主な関心事です。複数のピクセル比の写真を提供するためのベストプラクティスになると思いますか?
まあ、背景画像とpicture
などのインライン画像要素との明らかな機能の違いを無視すると、2つの間に長所と短所がいくつかあります。
background-image
の短所:インラインスタイルに対してメディアクエリを使用する方法はないため、background-image
を指定するには、タグとは別の背景画像が必要な要素に対してセレクターを宣言する必要があります。これにより、動的に作成された要素に対するこのソリューションが複雑になります。
また、異なるピクセル比の画像のみを提供することに関心がある場合は、srcset
要素の代わりに、img
タグの picture
属性 を使用できます。 picture
要素にはより多くのマークアップが必要であり、これには不要な多くの機能があり、さらにsrcset
のサポートがわずかに優れています。
background-image
の長所/インライン画像の短所:解像度ベースのメディアクエリ はるかに優れたサポートpicture
要素 および srcset
属性 一部のブラウザは、現時点ではpicture
要素またはsrcset
属性をサポートしていませんが、サポートは改善されています。
ちなみに、16より古いバージョンのFirefoxのブラウザサポートを最大化する場合は、 min--moz-device-pixel-ratio
セレクター を追加できます。これは、-webkit-min-device-pixel-ratio
と同じ構文です。 CSSを使用した例を次に示します。
/* @2x Images (Pixel Ratio of 1.25+) */
@media only screen and (-o-min-device-pixel-ratio: 5/4),
only screen and (-webkit-min-device-pixel-ratio: 1.25),
only screen and (min--moz-device-pixel-ratio: 1.25),
only screen and (min-device-pixel-ratio: 1.25),
only screen and (min-resolution: 1.25dppx) {
#dgst_shopping_bag {background-image:url(img/[email protected]);}
}
背景画像が必要な場所にはメディアクエリを使用し、インライン画像が必要な場所にはsrcset
またはpicture
を使用することをお勧めします。ただし、この時点で、サポートする必要があるブラウザーを検討することがより重要な場合があります。それについては、互換性のあるリンクを参照してください(おそらく、古いブラウザーを使用している多くの人がおそらく標準解像度モニターも使用していると考えられます)。
本当にimg[srcset]
属性。そのサポートは、別の回答の状態よりもはるかに優れています。現在のChromeandSafariはこの属性をサポートしています。そして、knowそれは、Firefox 38およびIE 12もサポートします。さらに、構文は単純なプログレッシブ拡張を行うことができ、複雑なメディアクエリを記述する必要はありません。
これはどのように見えるかです:
<img src="img/[email protected]" srcset="img/[email protected] 2x, img/[email protected] 3x" />
また、サポートしていないブラウザーにサポートを追加する場合は、 differentpolyfills から選択できます。
ポリフィルを使用する場合は、マークアップを次のように変更できます。
<img srcset="img/[email protected], img/[email protected] 2x, img/[email protected] 3x" />