Das wird heutzutage ausreichen (IE 8 und höher)
.group:after {
content: "";
display: table;
clear: both;
}
Wenden Sie es auf jedes übergeordnete Element an, in dem Sie die Floats bereinigen müssen. Zum Beispiel:
<div class="group">
<div class="is-floated"></div>
<div class="is-floated"></div>
<div class="is-floated"></div>
</div>
Sie würden dies anstelle des Bereinigens des Floats mit etwas wie <br style="clear: both;" /> am Ende des Elternteils (leicht zu vergessen, nicht direkt in CSS handhabbar, nicht semantisch) oder mit etwas wie overflow: hidden; am Elternteil verwenden (Sie möchten den Überlauf nicht immer verstecken).
Nun zu ein wenig Geschichte!
Dies war die ursprüngliche populäre Version, entwickelt, um Browser so weit wie möglich zu unterstützen
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
.clearfix { display: inline-block; }
/* start commented backslash hack \*/
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* close commented backslash hack */
Dann gab es eine etwas sauberere Version, hier dokumentiert von Jeff Starr, basierend auf der Tatsache, dass niemand IE für Mac benutzt, worum es bei dem Backslash-Hack ging.
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
* html .clearfix { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */
Dann wurde es populär, "group" als Klassennamen zu verwenden, was schöner und semantischer ist (via Dan Cederholm). Auch die content-Eigenschaft benötigt nicht einmal den Leerzeichen, sie kann ein leerer String sein (via Nicolas Gallagher). Dann, ohne Text, wird font-size nicht benötigt (Chris Coyier).
.group:after {
visibility: hidden;
display: block;
content: "";
clear: both;
height: 0;
}
* html .group { zoom: 1; } /* IE6 */
*:first-child+html .group { zoom: 1; } /* IE7 */
Wenn Sie natürlich die Unterstützung für IE 6 oder 7 fallen lassen, entfernen Sie die entsprechenden Zeilen.
.group:before,
.group:after {
content: "";
display: table;
}
.group:after {
clear: both;
}
.group {
zoom: 1; /* For IE 6/7 (trigger hasLayout) */
}
Sehen Sie oben auf dieser Seite die modernste Version des Clearfix.
In Zukunft könnten wir das tun
.group {
display: flow-root;
}
Nur damit ich es verstehe: Wäre das für Kindelemente, die gefloatet sind, und somit das Elternelement verschwindet?
Ich habe festgestellt, dass das Anwenden von overflow: hidden; auf das Elternelement dies behebt. Das Elternelement füllt sich dann hinter den Kindelementen.
Ja, das stimmt, aber overflow: hidden; versteckt auch den Überlauf, was unter Umständen unerwünscht sein kann.
overflow: auto;Funktioniert gut, solange Sie die Kontrolle über Ihre Ränder und Abstände behalten (sonst sehen Sie Scrollbalken). Das ist ironisch. :)
Chris Coyier sagte: Ja, das stimmt, aber overflow: hidden; versteckt auch den Überlauf, was unter Umständen unerwünscht sein kann.""
Menü mit schnellen Links, ul, li verwendete benutzerdefinierte Auswahllisten usw. (diese sind absolut positioniert) sind die einige Umstände.
lol, nur damit Sie "klar" sind, haha :)
Ich benutze nur und habe keine Fehler auf Test-Websites gesehen.
Ich benutze dies immer noch rituell. Es versagt mich selten und hat sich browserübergreifend hervorragend bewährt.
Das einzige Mal, dass ich damit ein Problem habe, ist, wenn ich einen flüssigen Container hatte, der nach links oder rechts gefloatet war. Ich bekam eine große Lücke unter einem der Elemente, wenn der clearfix vorhanden war.
Rockt! Ich war immer verwirrt, ob ich die Markup-basierte Bereinigung oder diese verwenden sollte. Das ist cool… muss es aber noch in einer ziemlich großen Anwendung testen.
Ich mache mir Sorgen wegen des .clearfix{display:inline-block;}, block. Ich bin mir nicht sicher, ob dies in einer Anwendung mit vielen Markups / komplexen Layouts zu 100% perfekt wäre. Korrigieren Sie mich, wenn ich falsch liege.
Die Bearbeitungs- und Löschfunktionalität dieses Kommentarbereichs ist einfach genial :). Ich liebe den Zähler… großartige Benutzererfahrung und großartiges Interaktionsdesign. Mach weiter, Chris!
Chris – du bist, wie Mary Poppins, praktisch in jeder Hinsicht perfekt, außer bei "it's" und "its". Um dir zu helfen, ein höheres Maß an Perfektion zu erreichen, gebe ich dir eine kostenlose Lektion!!!! (bist du schon aufgeregt?)
Possessive Pronomen: his, hers, theirs, ours, mine, yours, whose, und its
Beachten Sie, dass bei keinem davon ein Apostroph steht – denken Sie einfach an "his, hers, its", um sich daran zu erinnern.
Kontraktion: It is wird zu it’s verkürzt, he is => he’s, she is => she’s, I am => I’m, you are => you’re, they are => they’re, we are => we’re, who is => who’s
Bei Pronomen stehen Apostrophe nur für Kontraktionen, wie oben gezeigt. Normale Nomen verwenden Apostrophe, um Besitz anzuzeigen, aber keine Pronomen.
Ihr Titel für diesen Beitrag sollte also "Force Element To Self-Clear its Children" (nicht it’s) lauten. Ich sehe diesen Fehler oft in Ihren Beiträgen, aber dieser fällt noch mehr auf, da er im Titel steht.
Puh! Das ist aus dem Weg (und das Sehen dieser Fehler behindert wirklich den Inhalt), du bist großartig und ich habe SO viel von dir gelernt – ich hoffe, meine kleine Grammatikstunde hilft wirklich!
Und, zum Thema, danke für diesen hilfreichen Snippet!
Du bist die schlimmste Person, die ich je getroffen habe.
Dann bist du aufgewacht und hast gemerkt, wen kümmert's.
Wow, diese Maggie Wolfe Riley, sie ist unglaublich herablassend, nicht wahr.
Ich musste meinen Apostroph-Gebrauch dort noch einmal überprüfen.
Wie schläfst du nachts? Was für ein dummer Kommentar, wir wussten alle, was er meinte.
Es ist ziemlich lustig, dass er tatsächlich seine Titel geändert hat, hahah
Maggie Wolfe Riley hat wahrscheinlich viele Katzen.
Danke Maggie! Sehr hilfreich.
Ich hasse Leute wie dich!
Bin ich wirklich der Einzige, der findet, dass es eine standardisierte, nicht-hackige Methode dafür in CSS3 geben sollte?
Wirklich? Bin ich der Einzige? (trauriger, langsamer Handflächenschlag)
overflow: evelop;
overflow: contain-floats;
float-collapse: none;
ETWAS, IRGENDWAS.
Du bist nicht der Einzige. Die dritte gefällt mir am besten.
Absolut zugestimmt.
Ja! Lange überfällig!
Eine native Eigenschaft wäre sehr willkommen.
Ich kann keine nützlichen Erklärungen finden, wenn ich Dinge wie "warum gibt es keinen nativen clearfix in CSS" google.
Weiß jemand warum?
Flexbox hat mich neulich wahnsinnig gemacht, als ich justify-content:space-between; verwendete und es die unsichtbaren Pseudo-Elemente in die Berechnungen einbezog. Es ist einfach, sie mit Modernizr als Haken wieder zu entfernen, aber es ist nur Aufwand.
Dies kann eine gefährliche Technik sein, es sei denn, Autoren wissen genau, was dieses Styling in Bezug auf die Konstruktion bedeutet.
Siehe alles, was Sie über clearfix wissen, ist falsch
Der beste Weg, einen clearfix zu verwenden, finden Sie unter best clearfix ever. Er verwendet keine Klassennamen zur Lösung des Problems, sondern eine automatische Lösung, die auf alle Block-Level-Elemente angewendet werden sollte, mit Ausnahme von p- und Footer-Elementen.
Wow. Das ist mit Abstand eine der am besten gestalteten Websites, die ich je gesehen habe. Alles ist schön, lädt schnell und hat genau die richtige Menge an Interaktivität und Minimalismus.
Zu diesem Beitrag, ich bin neu in CSS, und dieses Problem hat mich eine Weile ratlos gemacht, bis ich von einem TutorialZine-Template erfuhr, dass es so etwas wie einen Clearfix-Hack gibt. Ich kann nicht glauben, dass so viele Leute seit so vielen Jahren auf dieses Problem hingewiesen haben und es immer noch nicht behoben ist. Semantische Tags wie nav und section bedeuten wenig, wenn grundlegendere Probleme wie dieses nicht angegangen werden. Ich finde die gesamte CSS-Designtechnik sehr mühsam, ich kann Entwicklern nicht vorwerfen, früher Tabellen verwendet zu haben.
Clearfix funktioniert bei mir unter IE7 überhaupt nicht, es behebt IE6-Probleme, aber nicht IE7, irgendwelche Ideen?
Ich habe gerade diese Seite gefunden
http://wiki.fluidproject.org/display/fluid/Testing+clear-fix+solutions
wo alle Clearfixes getestet werden, scheint es, dass bei IE7 keiner von ihnen funktioniert :( bizarr. Hat jemand eine Lösung dafür?
Update vom 18. Mai
Ist "display:table" nicht normalerweise abgeraten? Oder ist es hier in Ordnung, weil es auf den "content:"" angewendet wird?"?
HTML-Tabellen sind für tabellarische Daten und deren Verwendung für Layouts ist semantisch falsch. CSS handelt nicht von Semantik, sondern von Präsentation.
Daher ist die Darstellung eines Elements als display:table oder display:table-cell oder was auch immer in Ordnung!
Ich bin mir ziemlich sicher, dass :before und :after Pseudo-Selektoren in IE6 und IE7 nicht funktionieren, daher ist diese Lösung in Bezug auf browserübergreifende Funktionalität nicht nützlich…
Weitere Kommentare dazu?
Es funktioniert. Probieren Sie Dinge aus, bevor Sie sich beschweren. Es ist sehr einfach, Tests in http://jsfiddle.net/ zusammenzustellen. Alle Techniken haben mehrere Selektoren, die ohne Pseudo-Elemente sind für IE 6/7.
Entschuldigung, ich meinte das letzte. Die einzige Zeile ohne Pseudo-Element ist die, die hasLayout für IE auslöst. Ich vermisse sicher etwas Wichtiges oder funktioniert diese wie clear:both für IE…
Ich benutze das schon seit Jahren und es hat mich noch nie im Stich gelassen. Aber es erstaunt mich, wie Leute immer noch Schwierigkeiten haben, dieses Konzept zu verstehen, wenn sie UI-Entwickler sind. Ich musste dies kürzlich einem Programmierer mit über 15 Jahren Erfahrung beibringen und er ist immer noch unklar im Verständnis davon.
Eines der besten Beispiele, die ich ihnen zeige, ist mit Hintergrundfarben für Eltern und separaten Kindcontainern. Das klärt die Dinge normalerweise fast sofort in Bezug auf den Unterschied zwischen der Verwendung von Clearfix und dem Nichtanwenden.
Ich sollte das wahrscheinlich wissen, aber was genau ist ein Clearfix und was ist sein Zweck? Ich habe überall nach einer Erklärung gesucht, aber ich konnte nichts darüber finden, was sie sind. Danke für Ihre Hilfe! :)
Wenn Sie Elemente floaten, versucht das Elternelement nicht mehr, dieses Element zu umschließen. Wenn Sie viele gefloatete Elemente als Teil eines Layouts verwenden, müssen Sie manchmal die gefloateten Kinder "bereinigen", damit das Elternelement sie weiterhin vollständig wie gewünscht umschließen kann und den richtigen Fluss aus Layout-/Designperspektive beibehält.
Die Klassen .clearfix oder .group, wenn sie mit den obigen Lösungen verwendet werden, bieten eine modulare Möglichkeit, dies einem Elternelement mit CSS und einer Klasse hinzuzufügen, ohne auf nicht-semantische Divs oder Breaks in Ihrem HTML zurückgreifen zu müssen.
Danke für die Erklärung Kristian. Bis jetzt hatte ich auch Schwierigkeiten, eine klare Antwort zu finden.
Hallo! Aufgrund des letzten Updates: Beeinflussen Elternelemente mit 'display:table' ihre absolut positionierten Kindelemente nicht?
Sehr schön, wie Sie die Updates des Fixes anzeigen. So ist es wirklich einfach, die Entwicklung davon zu sehen! Danke!
Der klarste Artikel zum Clearfix-Hack bisher.
Hervorragende Arbeit an den Grafiken dieser Website.
Bravo!
Absolut einverstanden~~
Overflow ist das fehlende "Puzzlestück" [danke, Patrick, alter Hund]...
CSS3 Parenting [CSScube] semantisch seit IE4-6, Opera. Fun ist einfach
overflow: auto
Im Kontext ist es [speziell für meine Damen Dinge]
.cleargroup, parentname.cleargroup {
display: block;
font-size: 0;
overflow: auto;
}
Und dann, da wir das auf die Spitze treiben
Font-size ist der Anzeigeelement-Abstandhalter, nicht die Höhe. Das Attribut font-size ist der logische Anzeigeanker, und sein Wert wird ignoriert (Selektor in neuen Browsern nicht erforderlich? Oh je, Anker!). Das Echo von display:block im Attribut ist entscheidend, um den flüssigen Float-Überlauf innerhalb von cleargroup mit einer absoluten Position zu verwalten. Relative Positionierung behandelt alle CSS-Widgets, die Sie in die cleargroup-Zone werfen. Für diejenigen, die immer noch mit alten IE- und Firefox-Macken geplagt sind, hilft der; der Operator wird von anderen ignoriert. Ebenso wird visibility (lockern Sie Ihren Kragen, Skript-Nerds) durch display:block verwaltet, das an Eltern und Kind angehängt ist und den Attribut-Operator-Überlauf wie erforderlich in der Anzeige sichert.
Dies funktioniert besonders gut dort, wo das Build nebeneinanderliegende vertikale Spalten enthält, die um ein gefloatetes Element oder einen Block gewickelt sind. Parentname ermöglicht die Einbindung eines öffnenden Blockquote-Salvos oder was auch immer. Ein schließender Salvo würde Ihren Float-Wrap jedoch leicht verderben, inline oder anderweitig. Weil kein Überlauf mehr übrig ist. Es ist eines dieser charakteristischen CSS-logischen Aussterbensdinge, Ugh.
Nun, die Design- und Entwicklungsfrage lautet: innerhalb des Elternteils oder außerhalb des Vorgängers. Auf der Seite scheint es in neuen Browsern ein lässiges Entweder-oder-Div zu sein. Dies lässt den Style-Hinweis offen für Skripte und Geräte. Für die reinen Herzen gibt es auch cleargroup Container Popup-Tutorials. In diesem Szenario gleicht overflow Clip-Ränder usw. aus.
ergo: Ich hoffe, diese großartigen Begriffe "echo" und "zone" in der Nähe eines beliebigen CSS-Attributs stören die Designer nicht. Die hermeneutische Hülle, die den CSS-Diskurs sichert, ist nicht ganz sicher, oder? Net5 und CSS4 sind im Anmarsch. … overflow:auto
Was zum Teufel redest du da. Ich hasse Pseudointellektuelle.
(Entschuldigung, das musste ich einfach sagen. Es klang lustig und passte perfekt zu dieser Stelle)
Pseudointellektueller: Eine Person, die versucht, sich über die durchschnittliche Intelligenz zu erheben, indem sie annimmt, dass ihr gewählter Wortschatz die meisten Leute verwirren wird. Der gewünschte Effekt: "Wow, er klingt schlau!"
[Meine Definition]
OK. Ich sollte jetzt aufhören.
Übrigens – deine Seite rockt, Chris. Viele Segen.
Ich liebe diesen Ansatz. Die Gruppe-Klasse hat clearfix bei mir vollständig ersetzt. Ich werde nie wieder eine clearfix-Klassenbezeichnung in meiner Arbeit sehen. Wie immer großartig, Sir!
Ich liebe deine Seite, aber es wäre einfacher, wenn du nur einen funktionierenden Clearfix-Snippet anstelle von zwei oder drei anbieten würdest.
Du solltest einfach den letzten verwenden, solange es in Ordnung ist, dass er nur in IE8+ funktioniert – was er dir hier zeigt, ist die Weiterentwicklung des Hacks, und die vorletzte Iteration ist die fortschrittlichste, die überall funktioniert… da hast du es.
Danke Chris für deinen Clearfix-Snippet! Funktioniert immer noch großartig. Ich benutzte den Mikro-Fix von Nicolas, der mit Pauls Boilerplate geliefert wird, aber im neuesten Firefox hat er mein Layout kaputt gemacht und sich unerwartet verhalten. Deiner funktioniert immer noch, gut gemacht :D
Hier passiert dasselbe. Firefox hat Probleme mit Nicolas' Clearfix. Was tun?
Hallo Chris,
Ich denke, es gibt derzeit einen Fehler in Firefox, dass, wenn man nichts in "content" hat, Formularelemente einen doppelten Rand bekommen. Ich bin sicher, dass selbst ein Leerzeichen nicht funktioniert und FF mindestens einen Punkt benötigt. Habe dieses Verhalten bei anderen Elementen nicht bemerkt.
Etwas, das für mich immer funktioniert, anstatt clearfix zu verwenden, ist eine einfache Klasse in Ihrer CSS-Datei
Fügen Sie dann einfach ein Div mit dem obigen Klasse-Element unter all Ihren gefloateten ein.
Ich hatte damit nie ein Problem, im Gegensatz zur Clearfix-Lösung.
Das Hinzufügen von Markup zur Behebung von Stilproblemen ist keine gute Idee (auch wenn es tatsächlich möglich ist), einfach weil Markup aus semantischen Gründen erfolgen soll, ohne jegliche Stil-/Design-Implikationen.
Sie können ein <div> (oder ein <hr> oder was auch immer) hinzufügen, um Float-Probleme zu beheben, und das wurde schon lange getan, aber es fügt unnötige Elemente zum DOM-Baum hinzu und verwendet das Markup für einen falschen Zweck.
Außerdem ist es einfacher, eine Klasse zu haben, die auf das Element angewendet wird, das einen Clearfix benötigt, als ein nicht-semantisches Element vor dem schließenden Tag des Elements einzufügen, das einen Clearfix benötigt.
Nun, verdammt, für eine Minute fühlte ich mich ein wenig dumm. Ich benutze das auch. Danke fürs Posten. Es hat meinen Verstand gerettet.
Scheinen falsche Hugo G zu sein
Hallo,
Ich liebe den Micro-Clearfix-Hack und finde ihn sehr passend beim Schreiben von modularem CSS. Fügen Sie einfach eine .cf-Klasse zum Element hinzu, das Sie bereinigen möchten, und fertig! Außerdem ist die Verwendung als Mixin bei LESS oder SCSS ein Kinderspiel.
Dennoch – eine Diskussion mit einem Kollegen brachte mich zum Nachdenken. Wie wirkt sich die Verwendung von Pseudo :before/:after auf die Speichernutzung aus, wenn der Browser die Seite rendert?
Die Verwendung von content: ""; in Ihrem CSS fügt nichts in den DOM-Baum ein, aber sie werden in den Render-Baum eingefügt, richtig?
Nehmen wir an, Sie haben 1000 Elemente, alle mit dem Clearfix angewendet. Der Browser muss tatsächlich die :before und :after sowie das Hauptelement (visuell) handhaben. Das Problem entsteht bei der Optimierung für mobile Browser. Normalerweise sind diese langsamer als Desktop-Browser.
Wenn der traditionelle overflow:hidden verwendet werden kann, um Elemente zu bereinigen (und Ihr Design dies zulässt), ist dies dann nicht besser in Bezug auf die Leistung?
Tolles Nachdenken. Ich vermute, dass selbst mobile Browser dies ziemlich schnell handhaben, aber es wäre einige Tests wert. Zu schade, dass CSS-Tests wie diese so schwierig sind.
Es ist unwahrscheinlich, dass Sie einen Clearfix auf so viele Elemente auf einer Seite anwenden müssten? Wenn ja, dann sollten Sie vielleicht, bevor Sie sich Sorgen machen, ob das einen Browser belasten würde, auch daran arbeiten, einfacheren Layout-HTML und CSS zu schreiben, die nicht so viele Clear-Events erfordern würden, um alles wie gewünscht zu machen, da ein so komplizierter oder redundanter Layout-Code den Browser ebenfalls belasten würde.
overflow:hidden und overflow:auto haben gelegentliche Probleme, bei denen sie entweder a) Dinge verstecken, die Sie nicht verstecken möchten, oder b) manchmal Scrollbalken anzeigen, wenn die Dinge ein wenig daneben gehen. Keines davon ist meiner Meinung nach optimal, daher sind diese Clearfix-Hacks die bevorzugte Methode. Es gibt einen Grund, warum Leute wie Chris und Nic Gallagher diese Lösungen fördern – aus Layout-/Design-Perspektive sind sie zuverlässig und haben weniger nachteilige Auswirkungen als die Alternative.
Ich bekomme das einfach nicht zum Laufen, egal was passiert... Naja, lassen wir es überlaufen
Die Verwendung des universellen Selektors (*) hat ziemlich schwerwiegende negative Auswirkungen auf die Leistung. Das Hinzufügen eines einzigen Top-Level-Wildcards zu Ihrem CSS, wie Sie es gezeigt haben, wird meiner Erfahrung nach normalerweise mindestens die CSS-Parse-Zeit vervierfachen. Es ist besser, IE-spezifische Kommentare für IE-spezifische Dinge zu verwenden, damit Sie nicht die Browser aller anderen verlangsamen (ganz zu schweigen davon, dass es kein Hack ist, sondern eine unterstützte Funktion, die genau das tut, was Sie wollen, und auf die Sie sich verlassen können).
Haben Sie dazu echte Daten? Ich habe noch nie Daten dazu gesehen. Ich weiß, dass technisch gesehen ja, dieser Selektor länger zum Parsen dauert als ein ID-Selektor, aber ist es buchstäblich eine spürbare Verzögerung? Meine Hypothese ist, dass es keine große Sache ist, entweder haben Sie eine Seite mit WEITAUS mehr Elementen als eine durchschnittliche Website oder Sie verwenden VIELE universelle Selektoren.
function example() {
element.innerHTML = "code";
}
Im letzten Beispiel können Sie auch display: block; anstelle von display: table; verwenden und es funktioniert genauso. Gibt es einen Unterschied zwischen ihnen? Zum Beispiel, spielt es eine Rolle, welches man verwendet?
Ich denke, Sie könnten dies verbessern, indem Sie den Inhalt auf diesen
.clearfix:after { content: "0A0";}ändern, was im Grunde ein Leerzeichen wird. Sie könnten auchfont-size:0;hinzufügen, um die unnötige Zeile am Ende des Elements zu entfernen, damit sie richtig ausgerichtet ist :)Vielen Dank dafür
Ich habe diese Idee von dieser Website übernommen, ich hoffe, sie hilft :)
http://www.jqui.net/tips-tricks/css-clearfix/
Das letzte Beispiel (August 2012) funktioniert nicht in Safari 6.0.1
Das vorherige funktioniert perfekt. Danke!
Kompatibilitätsproblem:?
Ich weiß nicht, ob Sie versucht haben, diese Seite mit
Opera 12.02
Build 1578
Windows 7 (32 Bit),
aber die CSS-Snippets sehen überhaupt nicht gut aus.
Die Snippets erfordern, dass der Benutzer horizontal scrollt, um den gesamten Snippet anzuzeigen, was das Lesen erschwert.
Ich habe dies unter Chrome ausprobiert und es funktioniert wie erwartet, aber Opera legt alles auf eine Zeile und fügt eine links-rechts-Scrollleiste hinzu.
Sehr unangenehm für uns Opera-Benutzer. Ich wollte Sie nur informieren, falls es für Sie wichtig ist.
Ich habe versucht, dieses CSS zu validieren unter http://jigsaw.w3.org/css-validator/. Es wurde nur ein Fehler gefunden: Die Eigenschaft zoom existiert nicht für das Element * + html .clearfix. Es scheint, als könnte dieses Problem durch Ersetzen des folgenden Fragmentes der base.css-Datei behoben werden
[code=css]/* für IE7 */
* + html .clearfix {
zoom: 1 !important;
}[/code]
Hatte jemand schon einmal, dass Teile von Webseiten in Chrome verschwanden, aber nicht in anderen Browsern? Die fehlenden Teile werden geladen, wenn ich das Browserfenster nach rechts aufziehe. Sie scheinen direkt nach dem zweiten div auf einer Seite zu erscheinen, die die Klasse “group” hat (das WP e-commerce Plugin weist jedem Produkt-Div auf der Produktseite die Gruppe-Klasse zu). Ich frage mich, ob die viele Male vorkommende Gruppe-Klasse auf einer Seite ein Problem in Chrome darstellt.
Ich habe das nun auf mehreren Computern ausprobiert und denke, die leeren Bereiche erscheinen in zufälligeren Mustern, als ich dachte. Ich glaube nicht, dass es etwas mit der “group”-Klasse zu tun hat. Wenn jedoch jemand die Frage beantworten möchte, ob die Zuweisung der Gruppe-Klasse zu mehreren Divs auf einer Seite ein Problem darstellt, wäre das gut zu wissen. Danke an alle.
Ich kann mit dieser Technik kein gewünschtes Ergebnis erzielen (obwohl ich mich erinnere, dass es früher wie erwartet für mich funktionierte).
http://jsfiddle.net/92wmB/9/
Ungefloatete Elemente umschließen immer noch gefloate und „selbstbereinigte“ Elemente. Ich würde erwarten, dass selbst ungefloatete Elemente die Clearing-Regel des Pseudo-Elements respektieren. Wie Sie in der Fiddle sehen können, funktioniert es mit der zusätzlichen Markup-Methode (mit <div style=”both”></div>).
Das eigentliche Problem hier ist, dass wir Floats auf Blockelementen verwenden, die den Float überhaupt nicht haben sollten.
Die einzige echte Lösung, die ich sehe, um die Notwendigkeit von Hacks wie diesem zu beseitigen, wäre, dass CSS eine Methode zur ordnungsgemäßen Handhabung des Floatens von Blockelementen implementiert.
Angesichts des bisher langsamen Fortschritts von CSS werde ich nicht darauf warten, dass dies bald geschieht.
Warten Sie auf Flexbox
Ausgezeichnet. Ich mag besonders das letzte Update vom August 2012. Endlich ein clearfix, das ich mir merken konnte. Ich habe es bereits sehr erfolgreich mit meinen Schülern eingesetzt. Vielen Dank.
Warum schlägst du immer noch
tablevor, wenn Nicolas sagte, dass die Verwendung vontableauf :before zurückzuführen ist.Habe ich etwas übersehen?
Hallo!
Ich habe versucht, die neueste Version von clearfix/group hier anzuwenden: jsfiddle link.
Warum gibt es einen zusätzlichen Abstand nach den „li“-Tags in den Feeds „ul“? Wenn ich die ursprüngliche clearfix-Version verwendet habe, gibt es dort keinen Abstand. (Chrome, Firefox, IE)
Danke.
Das
p-Element innerhalb vonlibenötigtmargin-top: 0;Das erste
pbenötigtmargin-top: 0;und das zweite (letzte)pbenötigtmargin-bottom: 0;Hier ist die korrigierte Version
Hallo, Adonis K.
Aktualisierte jsfiddle
Ich habe einen Hintergrund: Himmelblau zum „ul“ und Hintergrund: Dunkelgrau zum „li“ hinzugefügt. Können Sie den himmelblauen Hintergrund direkt nach dem dunkelgrauen Hintergrund sehen?
Dieser himmelblaue Hintergrund unter dem dunkelgrauen li sollte nicht erscheinen, oder?
Ich bin etwas verwirrt wegen all der Updates. Ist die oberste die aktuellste oder die unterste??
Ich auch.
Ja, welches soll ich benutzen?! O.o
Ich glaube, das vorletzte ist das aktuellste „Update“ für den clearfix (und Sie können das letzte verwenden, wenn Sie IE6/7 nicht unterstützen). Ich weiß, das mag nicht richtig erscheinen, da das Datum darauf August 2012 angibt, aber ich mache gerade CodeSchool.com und das ist es, was sie verwenden. Außerdem erwähnt er, wie er zur Verwendung von .group statt .clearfix wechselt, was alle nullifizieren würde, die clearfix als Klassennamen verwenden. Sie können sehen, dass es auch einfacher ist als die anderen, was meiner Annahme nach relevanter ist, da die Dinge im Laufe der Zeit einfacher werden.
Könnte falsch liegen, aber das ist nur meine Meinung.
Hallo allerseits, ich verstehe die Lösung immer noch nicht wirklich.
Warum die Notwendigkeit für:
content: "";Liegt es daran, dass der Browser das angehängte Element nicht anerkennen würde, weil es leer ist… oder so etwas?
Danke!
Pseudo-Elemente ::after und ::before erfordern die Eigenschaft „content“, sonst werden sie ignoriert
Hat jemand dem W3C eine
display:clearfixRegel oder ein Äquivalent als neuen CSS-Standard vorgeschlagen? Es ist verrückt, dass wir einen Hack verwenden müssen, nur um eine Funktionalität zu erhalten, die als eingebaute Option kommen sollte.Wie schlägt man so etwas vor?
Was geht ab allerseits?!
Ich habe das ganze Internet durchsucht, um diesen Fehler mit Firefox zu beheben. Meine Seite wird perfekt in Chrome und IE angezeigt, aber Firefox war leer (ja, nichts innerhalb des „Containers“ erscheint auf dem Bildschirm).
Die Lösung: #contaier {overflow: auto; clear: both;}
obs. „container“ ist der ID-Name des Haupt-Divs auf meiner Seite.
Probleme, die ich hatte
Das Hinzufügen eines Divs mit der Eigenschaft „clear: both“ innerhalb des Containers funktionierte, bis ich feststellte, dass mein „border-radius“ verschwunden war.
„Overflow: visible“ (nur) zeigte die Elemente an, ABER die Hintergrundfarbe verschwand ebenfalls.
„Clear: both“ (nur) zeigt den Hintergrund ebenfalls nicht an.
Für mich hat das sehr gut funktioniert.
Ich hätte gerne mehr über dieses Problem erklärt, aber mein Englisch ist dafür nicht gut genug.
Also im Grunde, wenn ich Layouts mit Wrapper habe, füge ich einfach die Klasse „group“ zu all meinen Wrappern hinzu?
Brauche ich sie auch für ul-Listen, nur um sicherzugehen?
Übrigens, Chris, deine Videocasts sind wirklich erstaunlich!
Vorschlag für diese Seite: Sollten wir die Reihenfolge der Korrekturen umkehren, sodass die aktuellste zuerst angezeigt wird? Ich denke, das ist es, was die Leute am meisten wollen, und sie können dann bei Bedarf durch die Historie scrollen.
Hahaha. Ich liebe es, den Fortschritt mit den Updates zu sehen!
FYI, einige frühere Kommentare (von vor sehr langer Zeit) verlinkten zu einer Seite „Best Clearfix Ever“.
Der Link war kaputt. Ich habe ein wenig Google-Fu benutzt, um ihn zu finden.
Der korrekte Link: Best Clearfix Ever
Ich mag ihren Ansatz, aber er könnte besser gemacht werden. Sie haben viele wiederholte Stile, und jeder weiß, dass das nicht DRY ist. Haha.
Alle Anerkennung gebührt dem Autor, aber der Sinn von CSS ist die Eliminierung redundanter Stile. Ihre Version, obwohl sie großartig funktioniert, wäre besser so.
Man muss nicht immer wieder die gleiche Zeile für jedes Element wiederholen, um es zu löschen, oder? Das ist jetzt eine schöne automatische Löschung. Ausgezeichnet.
Mann, du bist ein Segen… Ich suche das schon lange
Sie haben mir mit diesem hier das Leben gerettet!
Ich muss etwas missverstehen, denn obwohl es auf den ersten Blick großartig aussieht… meine Bilder überlappen sich im unteren Teil des Divs, wo man nach oben scrollen muss, um sie zu sehen. Weiß jemand, wie man das verhindern kann? http://www.eweknit.com/photos/
Was ist falsch an den kürzeren Versionen, die ich herum sehe, wie
.cf:before, .cf:after { content: “”; display: table; }
.cf:after { clear: both; }
.cf { zoom: 1; } (mit dem Niedergang von IE 6/7 kann dies fallen gelassen werden, richtig?)
?
Das ist nicht anders als die letzte, die Chris auflistet — aber du kannst sie nennen, wie du willst.
.group::after {content: "";
display: table;
clear: both;
}
Dieser Beitrag hat einfach viele alte Iterationen, um Ihnen zu zeigen, wie sich clearfix entwickelt hat… und Ihnen die einfachste, neueste Form in ihrer verkürzten Pracht zu zeigen.
(Tatsächlich unterscheidet sich Chris' Version dadurch, dass sie nur ::after enthält, sodass 1/2 der Objekte in das DOM gerendert werden)
Das benutze ich mit SCSS.
Es ist ein Mixin, weil man in Sass eine Platzhalterklasse nicht über Medienabfragen erweitern kann. Ich mache es auf diese Weise, um mein HTML sauber zu halten.
Ich bin mir nicht sicher, warum
clear: bothimmer in::afterwar, aber das hat für mich nicht immer funktioniert. Ich hatte keine Probleme, es in das tatsächliche Element einzufügen, und es scheint in allen von mir getesteten Fällen zu funktionieren.Ich sehe nicht, wie die IE6/7-Zeilen helfen, da IE7/früher weder :after noch :nth-child unterstützt, daher wird es unwirksam sein.
Mit solchen Browserproblemen (ja, wir müssen IE7 auch 2015 noch unterstützen) ist es viel weniger sauber, nach einem
<div class='clearfloat'/>zu haben, alsclass='superlativeclearfloat'im Element, mit einer Menge mysteriöser CSS…?Warum verwendest du nicht einfach…
overflow: auto;
zoom: 1;
Hallo Chris,
Mir ist aufgefallen, dass du das :before in der letzten Aktualisierung nicht mit aufgenommen hast. Ich habe es auch nicht mit aufgenommen und es hat bisher wie vorgesehen funktioniert, aber werde ich später feststellen, dass ich es mit aufnehmen sollte?
Vielen Dank,
Justin
Bitte beachten Sie, dass Pseudo-Elemente mit ZWEI Doppelpunkten geschrieben werden (im Gegensatz zu Pseudo-Klassen, die mit einem einzelnen Doppelpunkt geschrieben werden). Also
.clearfix:aftersollte
.clearfix::afterlautenGöran hat Recht für alles ab IE9+ und modern.
IE8 versteht nur die alte Syntax mit einem Doppelpunkt. Fügen Sie auch eine Version mit einem Doppelpunkt hinzu, wenn Sie IE8-Unterstützung benötigen. Es ist nicht ideal, aber wir sprechen hier von einem Hack.
Ich denke, wir haben eine bessere Lösung im Intrinsic- und Extrinsic-Sizing-Modul auf dem Weg, aber seine Unterstützung wird für die meisten Projekte noch einige Zeit nicht gut genug sein http://caniuse.com/#feat=intrinsic-width
Gibt es ein Problem damit, einfach display: table zu verwenden? Entschuldigen Sie, ich kann das nicht in älteren oder mobilen Browsern testen.
Jens Meiert (der Entwickler von Google Frameworks) schrieb erst letzte Woche über Clearfixes und schlug vor, einfach overflow zu verwenden. https://meiert.com/en/blog/20161114/no-clearfix/
Ich glaube, das Hinzufügen eines Bildes würde es einfacher machen zu verstehen, worüber der Artikel spricht. Das hat mir geholfen
http://stackoverflow.com/questions/8554043/what-is-a-clearfix/29562362#29562362
Was ist mit
overflow:auto|hidden(auf dem Elternelement)…?Wie wäre es mit
Danke Rob. Das gefällt mir sehr gut. Und es funktioniert wie erwartet in allen Browsern, die ich getestet habe.
Abhängig von der Struktur Ihres HTML scheint die Lösung .clearfix {display:flow-root;} jedoch anders mit Margin Collapsing umzugehen als die Lösung .clearfix::after {content: “”; clear: both; display: block;}. Daher ist es am besten, das Margin Collapsing in allen erforderlichen Browsern gründlich zu überprüfen, um sicherzustellen, dass es das gewünschte Ergebnis erzielt.
Es gibt eine Diskussion über die clearfix::after-Lösung und Margin Collapsing unter http://www.cssmojo.com/the-very-latest-clearfix-reloaded/.
In meinem Fall, mit meinen gewählten Layout-Methoden und der Notwendigkeit, IE11 sowie moderne Browser zu unterstützen, bleibe ich bei der .clearfix::after-Lösung. Ich freue mich auf den Tag, an dem display:flow-root alles ist, was wir brauchen.
Ich habe nie verstanden, warum Leute einen „clearfix“-Hack verwenden.
Ich ging immer davon aus, dass man niemals einen
<
div> ohne CSS-Eigenschaften lassen sollte.
Ich habe diese „clearfix“-Sache nie auf meiner Website verwendet und immer genau das bekommen, was ich wollte,
Gehen Sie einfach nicht davon aus, dass der Browser weiß, was Sie mit Ihren HTML-Elementen tun wollen,
und überlassen Sie Ihre Elementstile nicht dem Zufall, dann sind Sie auf der sicheren Seite!!
Mein Kurzform-„clearfix“ ist der folgende, es sei denn, Sie möchten das allerletzte Element in einem Container „clearfixen“
Hallo Chris! Mann, ich war schon immer ein Fan deiner Arbeit. Du hast großartige Informationen und machst es wirklich zu einer großartigen Lernerfahrung. Ich stelle fest, dass deine Beiträge bis ins Jahr 2009 zurückreichen. Das ist erstaunlich! Postest du hier noch? Ich frage mich nur, weil ich immer noch lese und lerne und auch übe. Danke JP Olivier
Ich habe irgendwo gelernt, dass das Elternelement als Inline-Block die korrekte Höhe für gefloate Kinderelemente hat.