(2016/09/26 追記)
picture
要素について、ICS MEDIAにて更に詳しく解説しました。こちらも合わせて参照ください。
レスポンシブイメージで画像の表示を最適化 〜CSSもJSもいらないHTML 5.1の新機能 - ICS MEDIA
HTML 5.1にて実装される新要素picture
要素を使うと、CSSメディアクエリを使って画像を出し分けることが可能です。
例えば、ビューポート横幅が700px以下の時、a.png
という画像を表示するコードは下記のとおりです。個別の画像の指定はsource
要素で行い、画像パスをsrcset
属性、メディアクエリをmedia
属性でそれぞれ指定します。また、picture
要素に対応していないブラウザの為に、img
要素も必ず指定します。
<picture>
<source media="(max-width: 600px)" srcset="images/a.png">
<img src="images/c.png" alt="">
</picture>
source
要素は複数指定できます。ビューポート横幅が600px以下、600px以上700px以下、それ以外でそれぞれ画像を出し分けるコード例は次です。
<picture>
<source media="(max-width: 600px)" srcset="images/a.png">
<source media="(max-width: 700px)" srcset="images/b.png">
<source srcset="images/c.png">
<img src="images/c.png" alt="">
</picture>
デモはCodePenにアップしました。picture
要素に対応しているブラウザで動作します。
ウインドウサイズに応じて、a.png
、b.png
、c.png
の画像が切り替わるのがわかります。
主要ブラウザの最新版で使用可能
iOS 9.3、Android Browser 50がpicture
要素に対応したことで、デスクトップ・モバイル含む現在の主要ブラウザ全てでpicture
要素が使えるようになりました(※)。もしそれ以外のブラウザでも使用したい場合は、「Picturefill」等のポリフィルを使用するとよいでしょう。
次回の記事「コマ撮りアニメをHTML 5.1のpicture要素だけで作る方法(CSS、JavaScript不要)」が応用編となっていますので、是非ご覧ください。