Obwohl Elemente wie <div>
s wachsen normalerweise, um ihren Inhalt anzupassen, indem die float
Eigenschaft kann für CSS-Neulinge ein verblüffendes Problem darstellen: Wenn schwebende Elemente nicht schwebende übergeordnete Elemente haben, wird das übergeordnete Element eingeklappt.
Zum Beispiel:
<div>
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
Das übergeordnete Div in diesem Beispiel wird nicht expandieren um seine schwebenden Kinder zu enthalten - es wird so aussehen, als hätte es height: 0
.
Wie kann man dieses Problem lösen?
Ich möchte hier eine erschöpfende Liste von Lösungen erstellen. Wenn Ihnen browserübergreifende Kompatibilitätsprobleme bekannt sind, weisen Sie bitte darauf hin.
Lösung 1
Das Elternteil schweben lassen.
<div style="float: left;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
Profis : Semantischer Code.
Nachteile : Es kann sein, dass Sie das übergeordnete Element nicht immer schweben lassen wollen. Selbst wenn Sie dies tun, müssen Sie die Eltern der Eltern floatet, und so weiter? Müssen Sie jedes Vorgängerelement freilassen?
Lösung 2
Geben Sie dem Elternteil eine eindeutige Höhe.
<div style="height: 300px;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
Profis : Semantischer Code.
Nachteile : Nicht flexibel - wenn sich der Inhalt ändert oder die Größe des Browsers verändert wird, bricht das Layout zusammen.
Lösung 3
Fügen Sie ein "Spacer"-Element innerhalb des übergeordneten Elements ein, etwa so:
<div>
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
<div class="spacer" style="clear: both;"></div>
</div>
Profis : Einfach zu codieren.
Nachteile : Nicht semantisch; das Spacer-Div existiert nur als Layout-Hack.
Lösung 4
Elternteil auf overflow: auto
.
<div style="overflow: auto;">
<div style="float: left;">Div 1</div>
<div style="float: left;">Div 2</div>
</div>
Profis : Benötigt kein zusätzliches div.
Nachteile : Scheint ein Hacker zu sein - das ist nicht die overflow
den angegebenen Zweck der Immobilie.