レイアウトの作業では、主要な列のフロート ベースのレイアウトと、サブ要素のテーブル ベースのレイアウトを組み合わせてみることにしました。したがって、私の html/css マークアップは次の行に沿っていました。
HTML:
<div class="column">
<div class="sub-element"></div>
<div class="sub-element"></div>
</div>
<div class="column">
<div class="sub-element"></div>
<div class="sub-element"></div>
</div>
...
CSS:
.column {
float: left;
display: table;
width: 15%;
margin: 2%;
/* ... */
}
.sub-element {
display: table-cell;
/* ... */
}
特定の幅とマージンは重要ではありません。参照例については、この jsFiddleを参照してください。
私が見たのは、ページを左から右に横切る各列ブロックの余白が、最後のものよりわずかに小さいことでした。これを実現するための追加のマークアップや CSS が存在しなかったので、私は混乱しました。さまざまな値をいじってみたところ、コメントアウトするdisplay: table
と、列幅が一定になるなど、期待していた通常の動作が発生することがわかりました。
これで、別の方法を使用して必要なレイアウトを取得できますが、それは問題ではありません。しかし、なぜこれが起こっているのか、私は本当に興味があります。何かご意見は?
編集
これは Webkit のバグのようです。display: table
float と margins を使用すると、Firefox で問題なく動作します。後世のための webkit の修正に関する提案はありますか?
さらに編集
Safariでテストしたところ、そこでも動作するようです。なんだクロム??
最終編集
(標準の Chrome に加えて) Firefox 18、Safari、および Chrome Canary でテストした結果、これは実際には Chrome 固有のバグであることがわかりました。
最も簡単な修正方法は、フロートされている各要素内に単純なラッパー div を追加してコンテンツを格納し、ラッパーの CSS を に設定してから、フロートされている外側の要素からwidth: 100%; height:100%; display: table;
を削除することです。display: table
魅力のように機能します。
HTML:
<div class="column">
<div class="sub-element-wrapper">
<div class="sub-element"></div>
<div class="sub-element"></div>
</div>
</div>
<div class="column">
<div class="sub-element-wrapper">
<div class="sub-element"></div>
<div class="sub-element"></div>
</div>
</div>
...
CSS:
.column {
float: left;
width: 15%;
margin: 2%;
/* ... */
}
.sub-element-wrapper {
width: 100%;
height: 100%;
display: table;
}
.sub-element {
display: table-cell;
/* ... */
}