開発チームブログ
ダブルマージンバグ
- 投稿日
- 2009年08月07日
- カテゴリ
- 開発チームブログ
XHTML+CSSでコーディングをしていると、約1/3くらいはIEとそのほかのブラウザの表示差異を吸収する作業に追われます。
特にIE6がかなりのへそ曲がりなので、いつも泣かされてます。
IE6のかなーり有名なバグに、ダブルマージンバグがあります。
これは、floatしているボックス要素にfloatしている方向のマージンをあてると、そのマージンが2倍になってしまうというものです。
// CSSソース //==============================
div.box {
float: left;
margin-left: 20px;
}
=====================================
<div>タグに“box”というクラスで、“左”にfloatしているボックス要素に“左”marginをあてています。
<div>タグの左側のmarginは本来20pxであるものが、IE6だと2倍の40pxになります。
これを知らないと、左の余白がデザイン指定よりもふくらんだり、
他のfloatしているボックス要素がカラム落ちしてしまったりと、踏んだり蹴ったりです。
IE6用にCSSを分けるとか、CSSハックを使って対処するのも可能ですが、できるだけスマートに解決したいところです。
そんなわけで、以下の一文を追加します。
// CSSソース //==============================
div.box {
display: inline; /* double margin bug fix */
float: left;
margin-left: 20px;
}
=====================================
元のCSSに "display: inline;" が追加されました。(/*~*/は目印でつけています。本来は必要ありません。)
「え?!ボックス要素をインライン要素に変えて大丈夫なの?」と思ってしまいますが、
ブラウザはfloatしている要素はブロック要素として扱うようです。
こうすることで、なぜか2倍にふくらんだマージンが元に戻ります。
.....やれやれだね。
業種別インタビュー
業種別ブログ
開発チームプロフィール
開発チーム
team Developers
LULER WEB CREATIONS 所属
(SE / WEBデザイナー / コーダ-)
Comment
開発チーム@ブログでは、SE/プログラマーの山口とコーダー/イラストレーターの齋藤が主に記事を更新しております。WEBコンテンツ開発にまつわる情報やネットワーク/サーバ管理に関する情報など業界ポッドでもかなりマニアックなスタッフブログです。同業者の方や本業界に興味のある方はどうぞ。

