結論
IE8+Bootstrap3の組み合わせで、ウィンドウ横幅いっぱいのレイアウトにしたい場合、containerクラスを使って以下のCSSを適用すればよい。
/* 幅いっぱいにする設定 */
.container {
width: auto;
}
/* 幅いっぱいにする設定(IE8対応用) */
@media (min-width: 768px) {
width: auto;
}
}
@media (min-width: 992px) {
.container {
width: auto;
}
}
@media (min-width: 1200px) {
.container {
width: auto;
}
}
経緯
twitter bootstrap 3 で横幅をめいっぱい広げたいとき at softelメモを参考に、bootstrap.cssのあとで読み込むCSSファイル中で、
.container {
width: auto;
}
を追加した。IE8以外のブラウザでは期待通りの挙動になった。(上記記事には、Bootstrap 3.0.1でこの方法が利くと書いてあったが、3.0.0でうまくいった。)
しかし、IE8ではうまくいかない。responds.jsが原因。上記のCSSでは、bootstrap.cssの中のcontainerの横幅を指定している部分(↓)を上書きしているが、responds.jsがそれを元に戻してしまう。
このあたり:
bootstrap.css
@media (min-width: 768px) {
.container {
width: 750px;
}
}
@media (min-width: 992px) {
.container {
width: 970px;
}
}
@media (min-width: 1200px) {
.container {
width: 1170px;
}
}
responds.jsは、CSS3のMedia Queriesを解釈してJavaScriptでそれをMedia Queries非対応ブラウザ(IE8など)に適用するが、CSSのカスケードするしくみを完璧にカバーしているわけではなかった。ただ、@media
を使った形式で記述しておけばオーバーライドに成功した。
/* 幅いっぱいにする設定(IE8対応用) */
@media (min-width: 768px) {
width: auto;
}
}
@media (min-width: 992px) {
.container {
width: auto;
}
}
@media (min-width: 1200px) {
.container {
width: auto;
}
}
以上