Je nach dem zu erstellenden Design hat jede der unten aufgeführten Clearfix-CSS-Lösungen ihre eigenen Vorteile.
Das Clearfix hat zwar nützliche Anwendungen, wurde aber auch schon als "Hack" eingesetzt. Bevor Sie einen Clearfix verwenden, können vielleicht diese modernen CSS-Lösungen nützlich sein:
Moderne Clearfix-Lösungen
Container mit overflow: auto;
Der einfachste Weg, schwebende Elemente zu löschen, ist die Verwendung des Stils overflow: auto
auf das enthaltende Element. Diese Lösung funktioniert in allen modernen Browsern.
<div style="overflow: auto;">
<img
style="float: right;"
src="path/to/floated-element.png"
width="500"
height="500"
>
<p>Your content here…</p>
</div>
Ein Nachteil ist, dass die Verwendung bestimmter Kombinationen von Margin und Padding auf dem externen Element dazu führen kann, dass Bildlaufleisten erscheinen, aber dies kann gelöst werden, indem der Margin und das Padding auf einem anderen übergeordneten Element platziert werden.
Die Verwendung von "overflow: hidden" ist ebenfalls eine einfache Lösung, aber es gibt keine Bildlaufleisten, während die Verwendung von hidden
beschneidet jeden Inhalt, der sich außerhalb des enthaltenden Elements befindet.
Anmerkung: Das schwebende Element ist ein img
Tag in diesem Beispiel, kann aber jedes beliebige HTML-Element sein.
Clearfix Reloaded
Thierry Koblentz auf CSSMojo schrieb: Das allerneueste Clearfix neu geladen . Er wies darauf hin, dass durch den Wegfall der Unterstützung für oldIE die Lösung auf eine css-Anweisung vereinfacht werden kann. Außerdem kann die Verwendung von display: block
(anstelle von display: table
) ermöglicht es, dass die Ränder ordnungsgemäß kollabieren, wenn Elemente mit clearfix Geschwister sind.
.container::after {
content: "";
display: block;
clear: both;
}
Dies ist die modernste Version des Clearfix.
Ältere Clearfix-Lösungen
Die nachstehenden Lösungen sind für moderne Browser nicht erforderlich, können aber für die Ausrichtung auf ältere Browser nützlich sein.
Beachten Sie, dass diese Lösungen auf Browser-Fehlern beruhen und daher nur verwendet werden sollten, wenn keine der oben genannten Lösungen bei Ihnen funktioniert.
Sie sind ungefähr in chronologischer Reihenfolge aufgeführt.
"Beat That ClearFix", ein Clearfix für moderne Browser
Thierry Koblentz' von CSS Mojo hat darauf hingewiesen, dass wir bei der Ausrichtung auf moderne Browser jetzt auf die zoom
と ::before
Eigenschaften/Werte und verwenden Sie einfach:
.container::after {
content: "";
display: table;
clear: both;
}
Diese Lösung bietet keine Unterstützung für IE 6/7 absichtlich!
Thierry bietet auch an: " Ein Wort der Warnung Wenn Sie ein neues Projekt von Grund auf neu beginnen, können Sie das tun, aber tauschen Sie diese Technik nicht mit Ihrer jetzigen aus, denn auch wenn Sie oldIE nicht unterstützen, verhindern Ihre bestehenden Regeln, dass die Ränder kollabieren".
Mikro-Clearfix
Die neueste und weltweit angewandte Clearfix-Lösung, das Mikro-Clearfix von Nicolas Gallagher .
Bekannte Unterstützung: Firefox 3.5+, Safari 4+, Chrome, Opera 9+, IE 6+
.container::before, .container::after {
content: "";
display: table;
}
.container::after {
clear: both;
}
.container {
zoom: 1;
}
Überlaufeigenschaft
Diese grundlegende Methode wird für den üblichen Fall bevorzugt, wenn der positionierte Inhalt nicht außerhalb der Grenzen des Containers angezeigt werden soll.
http://www.quirksmode.org/css/clearing.html - erklärt, wie man die üblichen Probleme im Zusammenhang mit dieser Technik löst, nämlich die Einstellung width: 100%
auf dem Container.
.container {
overflow: hidden;
display: inline-block;
display: block;
}
Anstatt die display
Eigenschaft, um "hasLayout" für den IE festzulegen, andere Eigenschaften können verwendet werden für Auslösen von "hasLayout" für ein Element .
.container {
overflow: hidden;
zoom: 1;
display: block;
}
Eine andere Möglichkeit, Schwebekörper zu löschen, ist die overflow
Eigenschaft ist die Verwendung der Unterstrichhack . IE wendet die mit dem Unterstrich versehenen Werte an, andere Browser nicht. Die zoom
Eigenschaftsauslöser hasLayout im IE:
.container {
overflow: hidden;
_overflow: visible; /* for IE */
_zoom: 1; /* for IE */
}
Das funktioniert zwar... aber es ist nicht ideal, Hacks zu verwenden.
PIE: Einfache Clearing-Methode
Diese ältere "Easy Clearing"-Methode hat den Vorteil, dass positionierte Elemente außerhalb der Begrenzungen des Containers hängen können, allerdings auf Kosten eines komplizierteren CSS.
Diese Lösung ist ziemlich alt, aber Sie können alles über Easy Clearing auf Position Is Everything erfahren: http://www.positioniseverything.net/easyclearing.html
Element mit "clear"-Eigenschaft
Die schnelle und schmutzige Lösung (mit einigen Nachteilen), wenn Sie schnell etwas zusammenstellen wollen:
<br style="clear: both" /> <!-- So dirty! -->
Beeinträchtigungen
- Sie ist nicht responsiv und bietet daher möglicherweise nicht den gewünschten Effekt, wenn sich die Layout-Stile auf der Grundlage von Media-Queries ändern. Eine Lösung in reinem CSS ist idealer.
- Sie fügt HTML-Markup hinzu, ohne notwendigerweise einen semantischen Wert zu haben.
- Es erfordert eine Inline-Definition und -Lösung für jede Instanz anstelle eines Klassenverweises auf eine einzige Lösung eines "clearfix" in der CSS und Klassenverweise darauf in der HTML.
- Dies erschwert die Arbeit mit dem Code für andere, da sie möglicherweise weitere Hacks schreiben müssen, um das Problem zu umgehen.
- Wenn Sie in Zukunft eine andere Clearfix-Lösung verwenden müssen/wollen, müssen Sie nicht mehr alle
<br style="clear: both" />
Tag im Markup verstreut.
1 Stimmen
Ich benutze jqui.net/tips-tricks/css-clearfix es hilft mir, den Punkt zu verstecken :)
1 Stimmen
Was ist mit IE 6 und IE 7? Sie folgen nie dem richtigen Weg, Dinge zu bereinigen.
0 Stimmen
Besteht nach einem Jahr die Möglichkeit, die korrekte Antwort auf den modernen dreizeiligen Clearfix zu überarbeiten? hier wie sie in den bekannten Frameworks Bourbon und Inuit.css verwendet wird? Siehe meine Antwort unten .