【About】
CSS3で採用された「background-size」ですが、「cover」は画像の縦横比を維持したまま、背景領域を完全に覆うよう背景画像を配置(大概は縦か横が切り取られる)してくれるとても素晴らしいスタイルです。ところが残念なことにIE8では対応していません。
しかしこんな便利なスタイルをたかがIE8のためにゆずるわけには行きません。
デキる子にはベストエフォートを、デキない子には苦労をしてがんばってもらう。(ポリフィルというやつ)
その方法を以下に提案します。
【方針】
モダンブラウザでは当然CSS3の「ackground-size:cover;」を指定。IE8では、JavaScriptで幅に応じたそれぞれの背景画像を動的に変更する。
(IE8用に複数の背景画像を用意する必要があります。)
【HTML】
<!--ヘッダーあたりで--> <script src="/path/to/jRespond.js"></script>・・・※ ・・・ <div id="myArea"></div>・・・ここに背景画像を表示 ・・・
※ jRespond.js(IE8用に設置)
ブレイクポイントを指定して、ブレイクポイント毎の動作を指定できるすぐれもの
https://github.com/ten1seven/jRespond
【CSS】(モダンブラウザはこれで表示)
#myArea { background: url(/path/to/image/back.jpg) no-repeat center top; background-size: cover; ・・・ } ・・・ @media (min-width: 1200px) { #myArea { height:500px; } } @media (min-width: 992px) and (max-width: 1199px) { #myArea { height:400px; } } ・・・
【JavaScript】(IE8はこれで対応)
$(document).ready(function () { //jRespond settings var jRes = jRespond([ { ・・・ }, { label: 'sm-device', enter: 768, exit: 991 }, { label: 'md-device', enter: 992, exit: 1199 }, { label: 'lg-device', enter: 1200, exit: 10000 }]); jRes.addFunc([ { breakpoint: 'lg-device', enter: function () { if (navigator.userAgent.match(/msie [8.]/i)) { $('#myArea').css('background-image', 'url(/path/to/image/backLg.jpg)'); } }, exit: function () { } }, { breakpoint: 'md-device', enter: function () { if (navigator.userAgent.match(/msie [8.]/i)) { $('#myArea').css('background-image', 'url(/path/to/image/backMd.jpg)'); } }, exit: function () { } },{ ・・・ } }]); ・・・ });
【補足】
IE6,IE7,IE8でもCSS3のbackground-sizeプロパティをCSSハックできる「jquery.backgroundSize.js」
http://louisremi.github.io/jquery.backgroundSize.js/demo/
というものがありますが、どうやらIE8等の場合、背景画像ではなく、imgタグに返還して表示しているようなので、試したところ表示が崩れてしまいました。
上記JSで問題なく表示できればそれの方が簡単で良いと思います。
以上
コメント
コメントを投稿