【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で問題なく表示できればそれの方が簡単で良いと思います。
以上
コメント
コメントを投稿