div1 と div2 の周りに余白があれば、div3 が表示されます。
<h2>Why it breaks...</h2>
<div style="width:100px;height:100px;background-color:#ffff00;float:left;margin: 0 10px;">div1</div>
<div style="width:100px;height:100px;background-color:#0000ff;float:left;margin: 0 10px;">div2</div>
<div style="width:100px;height:100px;background-color:#00ff33;">div3</div>
<h2>How to fix it...</h2>
<div style="width:100px;height:100px;background-color:#ffff00;float:left;margin: 0 10px;">div1</div>
<div style="width:100px;height:100px;background-color:#0000ff;float:left;margin: 0 10px;">div2</div>
<div style="width:100px;height:100px;background-color:#00ff33;overflow: auto;">div3</div>
ただし、これはoverflow: auto
div3 を使用して簡単に修正できます。
フィドルを参照してください: http://jsfiddle.net/audetwebdesign/jv7YB/
この効果が見られる理由
フロー内の div3 で、高さと幅が 100px に指定され、背景色が緑です。
フロートがない場合、親要素であるビューポートの左上に緑色の四角形が表示されます。緑色の四角の中では、テキスト (より正確には、テキストを含む行ボックス) が左上に配置されます。
フロートを追加すると、フロートはビュー ポートの左上から配置され、通常のインフロー コンテンツの上にペイントされます。
ただし、div3 テキストを含む行ボックスは、フロート用のスペースを作るために短縮されますが、フロートと元のテキストを含むスペースが div3 コンテナーにないため、インライン ボックスは押し下げられます。
div3 コンテナーの背景は、テキストを含む行ボックスとは別であり、期待どおりに押し下げられません。
div3 ブロックに適用overflow: auto
すると、新しいブロック フォーマット コンテキストが作成され、div3 ブロックは自己完結型ユニットのように機能するため、緑の背景がコンテンツと子要素を囲みます。
参考文献
重ね順と背景色の描画方法については、http ://www.w3.org/TR/CSS2/zindex.html#painting-order を参照してください。
ブロック フォーマット コンテキストの場合: http://www.w3.org/TR/CSS2/visuren.html#block-formatting
ブロック書式設定コンテキストがそのまま実装される理由の詳細については
、新しいブロック書式設定コンテキストを確立するために CSS2.1 が "visible" 以外のオーバーフロー値を定義するのはなぜですか?を参照してください。ボルトクロックの礼儀