Warum ist die übergeordnete Div-Höhe Null, wenn sie untergeordnete Elemente schwebt?


131

Ich habe folgendes in meinem CSS. Alle Ränder / Auffüllungen / Ränder werden global auf 0 zurückgesetzt.

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

Jetzt schreibe ich mein HTML als

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

Die Seite wird korrekt gerendert. Wenn ich jedoch die Elemente inspiziere, div#wrapperwird dies als 0pxhoch angezeigt . Ich hätte erwartet, dass es sich bis zum Ende ausdehnt div.contentund div.lbar... Warum passiert das?

Auch hier wird die Seite gut gerendert. Dieses Verhalten verwirrt mich nur.


4
Dies kann für Sie nützlich sein. CSS Floats 101 aus A List Apart .
— David sagt, Monica am

Antworten:


250

Schwebende Inhalte haben keinen Einfluss auf die Höhe des Containers. Das Element enthält keinen Inhalt, der nicht schwebt (nichts hindert die Höhe des Containers daran, 0 zu sein, als wäre er leer).

Durch das Festlegen overflow: hiddendes Containers wird dies vermieden, indem ein neuer Blockformatierungskontext erstellt wird . Unter Methoden zum Enthalten von Floats für andere Techniken und zum Enthalten von Floats finden Sie eine Erklärung, warum CSS auf diese Weise entwickelt wurde.


Hier ist ein weiterer Ansatz , mit dem Container Floats enthalten, der in CSS gelöst wird, ohne dass der Seite Elemente hinzugefügt werden müssen.
— Phil

56

Normalerweise werden floats im Layout ihrer Eltern nicht berücksichtigt.

Um dies zu verhindern, fügen Sie overflow: hiddendem übergeordneten Element hinzu.


16
Danke, das funktioniert, aber ich verstehe nicht, warum ... Überlauf: versteckt soll den Inhalt verbergen, der überläuft, nicht das Element vergrößern, um es zu enthalten.
— Ripper234

@ ripper234 Hier ist der Grund: stackoverflow.com/questions/25818199/…
— kristianp

6

Ich bin mir nicht sicher, ob dies der richtige Weg ist, aber ich habe ihn gelöst, indem ich ihn display: inline-block;zum Wrapper-Div hinzugefügt habe.

#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
Dies war genau die Lösung, nach der ich gesucht habe. Überlauf: Versteckte Boxschatten verschwinden natürlich.
— Kitiara
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.