- 2006-11-13 (月) 13:50
- archives
固定幅のフローティングレイアウトをしていて、ブロックレベル要素をセンターに配置したい時、通常なら
div#content {
margin: 0 auto;
}
てな感じでセンタリングすると思います。
しかし、Mac IEではある条件のときにmargin: auto;が効かなくなります。今回は、それを解決するお話。
ある条件とは、フロートで高さを算出させるために overflow: hidden; を使用した場合です。この時、そのブロック要素ではmarginのautoが効かなくなってしまいます。(marginプロパティで値を一括指定すると無視される(4.1/5.0) – CSSバグ辞典)
つまり…
<div id="content">
<div id="menu">メニュー的なもの</div>
<div id="main">メイン的なもの</div>
</div>
こんな2カラムレイアウトをしたい時
div#content {
overflow: hidden;
width: 800px;
margin: 0 auto;
}
こんな感じで、overflow: hidden;を用いて高さを出すとMac IEではmarginのautoが効かなくなり、div#contentは左に寄ってしまいます。
フロートレイアウト時の高さを出す方法はいくつかあるのですが、Mac IEでは今のところ、このoverflow: hidden; を用いた方法がベターだと思われます。
そこで、Mac IEではmargin: auto;以外の方法でセンタリングをすることになります。
具体的には、以下の方法をとります。
div#content {
position: relative;
left: 50%;
width: 800px;
margin: -400px; /* 横幅の半分の値 */
}
ブロックレベル要素に、ポジションで左から50%…つまり右からも50%なので、真中から配置するようにします。そしてネガティブマージンを用い、その要素の半分をマイナスしています。こうすることによってMac IEでoverflowを使用したときでも、センタリングをすることができます。
さらにMac IE以外ではmarginを使用するため、Holly Hackを用いてMac IEのみ違うプロパティをあてます。
まとめると以下のようになります。
body {
text-align: center; /* IE6互換モード用 */
}
div#content {
overflow: hidden;
width: 800px;
margin: 0 auto;
text-align: left; /* IE6互換モード用 */
}
/* これ以降Mac IE 5のみに適用される \*//*/
div#content {
position: relative;
left: 50%;
margin: -400px;
margin-left: -400px;
}
/* これ以降Mac IE 5以外にも適用される */
既存のブログが、カラム部分だけ左寄せになってしまう!ってな方は是非お試しくださいー。
2006.12.8 追記
Mac IE用に指定していたmarginプロパティに誤りがありました。
正しくは「margin-left: -400px;」となります。
THX. のえるさん
可変幅にも対応したものを別途エントリーしました。ご覧ください。
「Mac IE でのセンタリング まとめ(暫定版)」
- Newer: 次回のミニターボ
- Older: DOCTYPEスイッチ
Comments:6
- 通りすがりの魚 06-11-13 (月) 16:41
-
そもそもoverflow: hidden;で高さを算出できることを知らなかった。勉強になりました。ありがとう。
- miniturbo 06-11-14 (火) 1:28
-
コメントありがとうございます!
overflow: hidden;の他にもいくつか方法はあるのですが、それについては追々書きたいと思いますー。
こちらこそお読みいただいてありがとうございます! - のえる 06-12-06 (水) 1:59
-
この問題にはまっていたので、大変参考になりました。
ところで解説中の margin: -400px; ですが、これでは上にも400px移動してしまいませんか? margin-left かなと。 - テスター 06-12-08 (金) 13:06
-
ウィンドウ幅変えると相対配置なので崩れます。
可変での解決策はないのでしょうか? - miniturbo 06-12-08 (金) 14:45
-
のえるさん>
やはり同じ境遇の方がいらっしゃったのですね。
解決されたようでなによりです!> ところで解説中の margin: -400px; ですが…
あわわわ、すぐに訂正します!ありがとうございますー>テスターさん
可変幅の場合、div#contentの横幅を%指定するカタチでいかがでしょうか?
Mac IE用にはその半分の%分margin-leftでマイナスすれば中央は位置になると思います。
記事を別途書き直しましたのでご覧ください! - 匿名 07-04-17 (火) 15:15
-
adsdasdasdasdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasdasdasdasdasda
asda