Home > archives > Mac IE でのセンタリング

Mac IE でのセンタリング

固定幅のフローティングレイアウトをしていて、ブロックレベル要素をセンターに配置したい時、通常なら

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 でのセンタリング まとめ(暫定版)

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

Comment Form
Remember personal info

Home > archives > Mac IE でのセンタリング

Search

Return to page top