1. Home
  2. Archive
  3. IEでfloatさせたボックスのmarginが2倍になるバグ

IEでfloatさせたボックスのmarginが2倍になるバグ

有名なバグではありますが、久しぶりに遭遇して困ったことになったので書き残しておきます。 実際どういう感じで表示されるかというと、下記のような感じです。

BOX A
margin-left:30px;
float:left;

BOX B
margin-left:30px;

上記例のBOX AとBOX Bの違いは左にfloatさせているか、いないかだけです。FireFoxなどのブラウザでは同じに見えていると思います。IE6で見るとfloatさせているBOX AのmarginがBOX Bのmarginの2倍の大きさになっているのがわかります。このバグの対処方はいくつかあります。

一番良い対処方法はmarginでなく、paddingを指定する手法です。paddingで置き換えられる場合はこれでいいんですが、どうしてもmarginじゃないとヤダ!って状況もあるわけです。

その場合は仕方ないのでハックしちゃいましょう。IEのみの現象なのでアンダースコアハックなどがお手軽でいいかなと思います。ハックで改良するとこうなります。

BOX C
margin-left:30px;
_margin-left:15px;
float:left;

これでめでたくIEと他のブラウザで同じように表示されるようになりましたが、ハックはできるだけ使わず極力paddingで対処したいものです。ちなみにこの現象はIE7では修正されています。

トラックバック一覧

  1. CSS Lecture 2008年7月24日 12時50分

    IEでfloatさせたボックスのmarginが倍くらいになる…

    CSSレイアウト初心者が一度は経験するであろう。このIE6でfloatさせたボックスのmarginの解釈の違いだと思います。 よくIEだけが右カラムが落ちてる…って

  2. CSS Lecture 2008年7月31日 23時08分

    IEでfloatさせたボックスのmarginが倍くらいになる…

    CSSレイアウト初心者が一度は経験するであろう。このIE6でfloatさせたボックスのmarginの解釈の違いだと思います。 よくIEだけが右カラムが落ちてる…って (more…)

コメント一覧

  1. 検索できますた 2007年4月6日 17時17分

    IEのfloatのバグの対処法にこんな方法があったんですね!
    ものすごく参考になりました!ありがとうございます。

  2. hoka@管理人 2007年4月6日 18時12分

    >検索できますたさん
    コメントありがとうございます!お役に立てて光栄です。
    アンダースコアハックはお手軽で便利なんですよね~。他にも使いどころは多いですよ。

  3. hama 2007年8月27日 12時26分

    アンダースコアハックはCSS仕様違反なので、仕様に準拠した回避方法があるならそのほうがいいと思います。
    書き方はほとんど変わりませんし…
    http://kikky.net/pc/bro_discrete.html

    またmarginを2つ書かなくてもdisplayの指定で簡単に回避できます。
    他のブラウザが仕様どおりなら問題がありません。
    http://kikky.net/pc/css_bug041.html

  4. hoka@管理人 2007年8月27日 15時10分

    >hamaさん
    ご指摘ありがとうございます。たしかにアンダースコアハックはあまりよろしくはないですね。
    セレクタをもう一つ書く手間を惜しんでアンダースコアハックを使ってしまいました・・・
    いけないことです。

    ちなみにアンダースコアハックを使わなかったら下記のような感じが一番スマートかな?

    div.boxC {
     margin-left:30px;
     float:left;
    }

    * html div.boxC {
     margin-left:15px;
    }

    displayによる回避は知りませんでした・・・もっと勉強します。

コメントフォーム

※HTMLタグは使用できません。