子がフローティングしているときに親divの高さがゼロになるのはなぜですか


131

私のCSSには以下があります。すべてのマージン/パディング/ボーダーはグローバルに0にリセットされます。

#wrapper{width: 75%; min-width: 800px;}
.content{text-align: justify; float: right; width: 90%;}
.lbar{text-align: justify; float: left; width: 10%;}

HTMLを次のように書くと

<div id="wrapper">
    <div class="content">
        some text here
    </div>
    <div class="lbar">
        some text here
    </div>
</div>

ページは正しくレンダリングされます。しかし、要素を検査すると、高いdiv#wrapperと表示され0pxます。私はそれが最後まで拡大すると思っていました、div.contentそして、div.lbarなぜこれが起こるのですか?

この場合も、ページは正常にレンダリングされます。この行動は私を困惑させるだけです。


4
これは、A List ApartのCSS Floats 101に役立つかもしれません。
デビッドはモニカ

回答:


250

フローティングコンテンツは、コンテナの高さに影響しません。要素には、フローティングではないコンテンツが含まれていません(そのため、コンテナーが空であるかのように、コンテナーの高さが0になるのを止めるものはありません)。

overflow: hiddenコンテナの設定は、新しいブロックのフォーマットコンテキストを確立することによってそれを回避します。参照フロートを収容するための方法を他の技術のためにと山車を含む CSSがこのように設計された理由についての説明をします。


コンテナにフロートを含めるための別の方法を次に示します。これは、ページに要素を追加する必要なくCSSで解決されます。
Phil

56

通常、floatsは親のレイアウトには含まれません。

それを防ぐoverflow: hiddenには、親に追加します。


16
おかげでこれは機能しますが、なぜなのかわかりません... overflow:hiddenは、オーバーフローするコンテンツを非表示にするもので、要素を拡大して含まないものと言われています。
ripper234 2011年

:@ ripper234ここに理由ですstackoverflow.com/questions/25818199/...
kristianp

6

これが正しい方法かどうかはわかりませんdisplay: inline-block;が、ラッパーdivに追加することで解決しました。

#wrapper{
    display: inline-block;
    /*border: 1px black solid;*/
    width: 75%;
    min-width: 800px;
}

.content{
    text-align: justify; 
    float: right; 
    width: 90%;
}

.lbar{
    text-align: justify; 
    float: left; 
    width: 10%;
}

1
これは私が探していた正確な解決策でした。オーバーフロー:隠れた原因のボックスの影が自然に消えます。
キティアラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.