1. Index
  2. (X)HTML/CSS
  3. Mac IE でのセンタリング

miniturbo::Blog

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

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

Comment: 6

通りすがりの魚: 2006-11-13 (Mon) 16:41

そもそもoverflow: hidden;で高さを算出できることを知らなかった。勉強になりました。ありがとう。

kz: 2006-11-14 (Tue) 01:28

コメントありがとうございます!

overflow: hidden;の他にもいくつか方法はあるのですが、それについては追々書きたいと思いますー。

こちらこそお読みいただいてありがとうございます!

のえる: 2006-12-06 (Wed) 01:59

この問題にはまっていたので、大変参考になりました。

ところで解説中の margin: -400px; ですが、これでは上にも400px移動してしまいませんか? margin-left かなと。

テスター: 2006-12-08 (Fri) 13:06

ウィンドウ幅変えると相対配置なので崩れます。

可変での解決策はないのでしょうか?

kz: 2006-12-08 (Fri) 14:45

のえるさん>

やはり同じ境遇の方がいらっしゃったのですね。

解決されたようでなによりです!

> ところで解説中の margin: -400px; ですが...

あわわわ、すぐに訂正します!ありがとうございますー

>テスターさん

可変幅の場合、div#contentの横幅を%指定するカタチでいかがでしょうか?

Mac IE用にはその半分の%分margin-leftでマイナスすれば中央は位置になると思います。

記事を別途書き直しましたのでご覧ください!

No Name: 2007-04-17 (Tue) 15:15

adsdasdasdasdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasdasdasdasdasda

asda

Comment Form
Remember Me?

Trackback: 0

TrackBack URL for this entry
http://miniturbo.org/mt/mt-tb.cgi/16
Listed below are links to blogs that reference
Mac IE でのセンタリング from miniturbo::Blog
  1. Index
  2. (X)HTML/CSS
  3. Mac IE でのセンタリング
Search
Feeds
  • FeedBurner Counter

Page Top