Kürzlich habe ich den Code einer Website durchgesehen und festgestellt, dass jeder <div>
eine Klasse hat clearfix
.
Nach einer kurzen Google-Suche habe ich erfahren, dass es manchmal für IE6 ist, aber was ist eigentlich ein Clearfix?
Können Sie einige Beispiele für ein Layout mit einem Clearfix im Vergleich zu einem Layout ohne Clearfix angeben?
div
vollständig auf die richtige Höhe erweitert wird, um seine schwebenden untergeordneten Elemente einzuschließen. webtoolkit.info/css-clearfix.htmlAntworten:
Wenn Sie IE9 oder niedriger nicht unterstützen müssen, können Sie Flexbox frei verwenden und müssen keine schwebenden Layouts verwenden.
Es ist erwähnenswert, dass die Verwendung von schwebenden Elementen für das Layout heutzutage durch die Verwendung besserer Alternativen immer mehr entmutigt wird.
display: inline-block
- BesserFlexbox wird von Firefox 18, Chrome 21, Opera 12.10 und Internet Explorer 10, Safari 6.1 (einschließlich Mobile Safari) und dem Standardbrowser 4.4 von Android unterstützt.
Eine detaillierte Browserliste finden Sie unter: https://caniuse.com/flexbox .
(Vielleicht ist es die absolut empfohlene Art, Elemente auszulegen, sobald seine Position vollständig festgelegt ist.)
Mit einem Clearfix kann ein Element seine untergeordneten Elemente automatisch löschen , sodass Sie kein zusätzliches Markup hinzufügen müssen. Es wird im Allgemeinen in Float-Layouts verwendet, in denen Elemente zum horizontalen Stapeln schweben .
Der Clearfix ist eine Möglichkeit, das Containerproblem mit der Höhe Null für schwebende Elemente zu bekämpfen
Ein Clearfix wird wie folgt durchgeführt:
Wenn Sie keine IE <8-Unterstützung benötigen, ist auch Folgendes in Ordnung:
Normalerweise müssten Sie Folgendes tun:
Mit clearfix benötigen Sie nur Folgendes:
Lesen Sie darüber in diesem Artikel - von Chris Coyer @ CSS-Tricks
quelle
content: "\00A0";
Die \ 00A0 stellen einen Leerraum dar, ein einfacher Leerraum funktioniert nicht gut :) Entschuldigung. :)display: inline-block
es besser ist als Floats für blockbasiertes Layout. Inline-Blöcke werden, wie der Name schon sagt, inline gelegt - die meisten Layouts basieren auf Blöcken, und es ist einfach nicht sinnvoll, diese Blöcke in einem Inline-Formatierungskontext anzuordnen. Sie müssen sich auch mit verschiedenen Problemen im Zusammenhang mit der Inline-Formatierung befassen, z. B. Leerzeichen zwischen Elementen, andere Inline-Elemente, Größe, Ausrichtung usw., wie viele andere bereits betont haben. Zugegeben, Float-Layouts machen auch nicht viel Sinn, aber zumindest haben Floats den Vorteil, blockbasiert zu sein.Die anderen Antworten sind richtig. Aber ich möchte hinzufügen, dass es ein Relikt der Zeit ist, als die Leute zum ersten Mal CSS lernten und missbraucht wurden,
float
um ihr gesamtes Layout zu erstellen.float
ist dazu gedacht, Dinge wie Float-Bilder neben langen Textläufen zu machen, aber viele Leute haben es als primären Layoutmechanismus verwendet. Da es nicht wirklich dafür gedacht war, benötigen Sie Hacks wie "clearfix", damit es funktioniert.Heutzutage
display: inline-block
ist dies eine solide Alternative (mit Ausnahme von IE6 und IE7 ), obwohl modernere Browser mit noch nützlicheren Layoutmechanismen unter Namen wie Flexbox, Grid-Layout usw. ausgestattet sind.quelle
inline-block
Dies ist keine strikte Verbesserung gegenüber Floats, da zwischen den Blöcken ein Problem auftritt, bei dem Leerzeichen im HTML-Code in Leerzeichen übersetzt werden, die Blöcke trennen.inline-block
erfordert eigenefloat
Problemumgehungen , genau wie Clearfix.Damit
clearfix
kann ein Container seine schwimmenden Kinder einwickeln. Ohne einclearfix
oder ein gleichwertiges Design wickelt sich ein Container nicht um seine schwebenden Kinder und kollabiert, so als ob seine schwebenden Kinder absolut positioniert wären.Es gibt verschiedene Versionen des Clearfix mit Nicolas Gallagher und Thierry Koblentz als Hauptautoren.
Wenn Sie ältere Browser unterstützen möchten, verwenden Sie am besten diesen Clearfix:
In SCSS können Sie die folgende Technik verwenden:
Wenn Sie ältere Browser nicht unterstützen möchten, gibt es eine kürzere Version:
quelle
div
Umhüllung die schwebenden Elemente? Können Sie mir helfen, es zu visualisieren?Um ein Update zur Situation im zweiten Quartal 2017 anzubieten.
Eine neue CSS3-Anzeigeeigenschaft ist in Firefox 53, Chrome 58 und Opera 45 verfügbar .
Überprüfen Sie die Verfügbarkeit für jeden Browser hier: http://caniuse.com/#feat=flow-root
Das Element (mit einer Anzeigeeigenschaft, die auf flow-root festgelegt ist) generiert eine Blockcontainerbox und legt ihren Inhalt mithilfe des Flow-Layouts fest. Es wird immer ein neuer Blockformatierungskontext für seinen Inhalt erstellt.
Das heißt, wenn Sie ein übergeordnetes Div verwenden, das ein oder mehrere schwebende untergeordnete Elemente enthält, stellt diese Eigenschaft sicher, dass das übergeordnete Element alle untergeordneten Elemente einschließt. Ohne Clearfix-Hack. Bei allen untergeordneten Elementen noch bei einem letzten Dummy-Element (wenn Sie die Clearfix-Variante mit: vor bei den letzten untergeordneten Elementen verwendet haben).
quelle
flow-root
sind die eigentliche Lösung.Einfach ausgedrückt ist Clearfix ein Hack .
Es ist eines dieser hässlichen Dinge, mit denen wir alle nur leben müssen, da es wirklich der einzig vernünftige Weg ist, um sicherzustellen, dass schwebende Kinderelemente ihre Eltern nicht überfluten. Es gibt andere Layout-Schemata, aber Floating ist heutzutage im Webdesign / in der Webentwicklung zu alltäglich, um den Wert des Clearfix-Hacks zu ignorieren.
Ich persönlich neige zur Micro Clearfix-Lösung (Nicolas Gallagher)
Referenz
quelle
Eine in CSS-Float-basierten Layouts häufig verwendete Technik besteht darin, einem Element, von dem Sie wissen, dass es Floating-Elemente enthält, eine Handvoll CSS-Eigenschaften zuzuweisen. Die Technik, die üblicherweise unter Verwendung einer Klassendefinition namens aufgerufen wird
clearfix
, implementiert (normalerweise) die folgenden CSS-Verhaltensweisen:Der Zweck dieser kombinierten Verhaltensweisen besteht darin, einen Container zu erstellen,
:after
dessen aktives Element ein einzelnes '' enthält. markiert als versteckt, wodurch alle bereits vorhandenen Floats gelöscht und die Seite für den nächsten Inhalt effektiv zurückgesetzt werden.quelle
Die andere (und vielleicht einfachste) Option zum Erreichen eines Clearfixes ist die Verwendung
overflow:hidden;
für das enthaltende Element. Zum BeispielDies kann natürlich nur in Fällen verwendet werden, in denen der Inhalt niemals überlaufen soll.
quelle
Ich habe die akzeptierte Antwort ausprobiert, aber ich hatte immer noch ein Problem mit der Inhaltsausrichtung. Durch Hinzufügen eines ": before" -Selektors wie unten gezeigt wurde das Problem behoben:
WENIGER oben wird zu CSS unten kompiliert:
quelle
Hier ist eine andere Methode gleich, aber ein bisschen anders
Der Unterschied ist der Inhaltspunkt, der durch ein
\00A0
== ersetzt wirdwhitespace
Mehr dazu unter http://www.jqui.net/tips-tricks/css-clearfix/
Hier ist eine kompakte Version davon ...
quelle
.clearfix {...}
,html[xmlns] .clearfix {...}
,* html .clearfix {...}
, Und.clearfix {...}
alle dasselbe wählen und sich gegenseitig überschreiben. Dies ist ein wenig hacky und nicht wirklich benötigt.\00A0
, ich glaube , es wegen der Cross - Browser - Kompatibilität und dem Wissen der Zeit war.