2012-02-08 11 views
25

ウェブページでよく見られる問題は、フローティングdivがコンテナの外に這うことです。オーバーフローが隠れている浮遊要素がコンテナをエスケープするのはなぜですか?

#wrapper{ 
    border:1px solid red; 
} 

#wrapper div{ 
    float:left; 
    font-size: 3em; 
} 
... 
<div id="wrapper"> 
    <div>Hello World</div> 
</div> 

ライブ例:http://jsfiddle.net/ugUVa/1/

この(明らかにdiv要素を挿入:両方)を修正する汚い方法はたくさんあり、私が見てきた

ずっとすっきり解決策は、ラッパーdivを設定しています隠さへオーバーフローのスタイル:

例:http://jsfiddle.net/ugUVa/2/

これはきれいに素敵で、ブラウザ間でうまく動作します追加のマークアップはありません。私は幸せですが、なぜそれが機能するのか分かりません!

私が見てきたすべてのドキュメントは、オーバーフローを示します。隠されたその子に合うように、親のサイズ変更、コンテンツのない隠すためである...

誰もが、この動作の説明を提供することはできますか?

おかげ

+8

要素がフローティングされると、要素のサイズ計算のためにドキュメントフローから基本的に削除されます。コンテナは現在「空」なので、許容される最小サイズまで縮小されます。クリアリング要素を追加するか、オーバーフローを設定すると、コンテナはサイズ変更のために内部のすべてを考慮しなければなりません。 –

+0

@MarcBは答えになるはずです。 – Christoph

+1

私はあなたが解決策ではなく説明を求めていることを知っていますが、clearfix hackを使うこともできます。基本的に 'clear:both;' divと同じですが、追加のマークアップはありません。私の例を見てください:http://jsfiddle.net/TheNix/fSBhT/それに関する記事:http://nicolasgallagher.com/micro-clearfix-hack/ – Nix

答えて

20

それはblock formatting contextを作成します。

ブロックの書式設定コンテキストは、浮動小数点の配置(float参照)およびクリア(clear参照)に重要です。 の位置付けと浮動小数点数のクリアの規則は、同じブロック内のものにのみ適用されます。 書式設定のコンテキスト。浮動小数点数は他の ブロック書式設定コンテキストのもののレイアウトには影響しません。また、clearは同じブロック書式設定コンテキストの で過去の浮動小数点数をクリアします。

も参照してください。http://www.w3.org/TR/CSS2/visuren.html#block-formatting

4

それはoverflowスタイルがあふれコンテンツに何が起こるかを制御することが意図されていることが正しいのです。

浮動要素への影響は、要素のブロック書式コンテキストを作成するoverflowスタイルの副作用です。

包含する要素のサイズを指定しない場合、ブロック書式設定コンテキストは、その要素が含む要素からそのサイズを取得します。したがって、包含する要素のサイズが取得されます。

+0

正確です。浮動小数点数のクリアと 'オーバーフロー 'の使用には微妙な違いがあると付け加えておきます。 [この回答]の2番目の部分(http://stackoverflow.com/a/6482054/106224)を参照してください。 – BoltClock

関連する問題