Neulich gab es eine interessante Unterhaltung bei der Arbeit: Sollen wir die CSS-float-Eigenschaft verwenden, jetzt wo wir CSS Grid und Flexbox haben?
Die kurze Antwort
Nein! Naja, meistens. Ich würde es heute nur noch zum Umbrechen von Text um Bilder herum verwenden, und ich würde float für Layouts gänzlich vermeiden.
Die längere, nervigere Antwort
Bevor es Flexbox und Grid gab, mussten wir die CSS-float-Eigenschaft verwenden, um Grids und Layouts zu erstellen. Tatsächlich war es das Erste, was ich über Webdesign gelernt habe. An einem heißen Sommernachmittag schlug ich ein Exemplar von Designing with Web Standards von Jeffrey Zeldman auf und verschob dann einen winzigen roten Div mit float: right. Es war magisch. Es steckte Macht in float.
Es war so einfach, etwas auf dem Bildschirm zu bewegen, dass ich mich frage, wie viele Designer sich einfach deshalb in das Web verliebt haben, weil es so einfach ist, Dinge so zu bewegen.
Aber die Verwendung von float zum Erstellen komplexer Layouts war schon immer ein Hack: Es war eigentlich nur dafür gedacht, Text um ein Bild fließen zu lassen.
img {
width: 150px;
float: left;
}
Die Probleme mit float beginnen, wenn wir versuchen, riesige Layouts und zeitschriftenähnliche Grids zu erstellen. Aber das mussten wir tun, da es damals keine Alternativen gab, wie wir sie heute haben.
Ein Problem mit der float-Eigenschaft war, dass man geflotete Elemente mit etwas namens clearfix umhüllen musste, das so aussah
<div class="clearfix">
<div class="float-left">Column</div>
<div class="float-left">Column</div>
<div class="float-left">Column</div>
</div>
clearfix:after {
content: "";
display: table;
clear: both;
}
Jay Hoffman beschrieb den clearfix-Hack vor einiger Zeit
Der clearfix, für diejenigen, die ihn nicht kennen, ist ein CSS-Hack, der einen hartnäckigen Fehler behebt, der auftritt, wenn zwei geflotete Elemente nebeneinander gestapelt sind. Wenn Elemente auf diese Weise ausgerichtet sind, hat der übergeordnete Container eine Höhe von 0, und das kann leicht verheerende Auswirkungen auf ein Layout haben. Alles, was Sie vielleicht tun möchten, ist, eine Seitenleiste links von Ihrem Hauptinhaltsblock zu positionieren, aber das Ergebnis wären zwei Elemente, die sich überlappen und ineinander kollabieren. Um die Sache noch komplizierter zu machen, ist der Fehler browserübergreifend inkonsistent. Der clearfix wurde erfunden, um all das zu lösen.
Die Dinge begannen sich danach langsam zu ändern. Im Jahr 2017 erklärte Rachel Andrew, wie Browser das clearfix-Problem ohne jegliche Hacks behandeln können. Alles, was wir brauchen, ist der folgende CSS-Code, um die gleiche Korrektur vorzunehmen
.container {
display: flow-root;
}
Das Seltsame ist, dass ich bis etwa drei Minuten vor dem Tippen dieser Zeile nicht wusste, dass der Wert flow-root existiert. Aber ich denke, das verteidigt irgendwie das Argument, das ich hier machen werde: mit CSS Grid und Flexbox brauchen wir float eigentlich nicht mehr. Die Eigenschaft wurde wirklich entwickelt, um eine Sache zu tun: Text um Bilder fließen zu lassen. Aber jetzt haben wir mit Grid und Flexbox wunderbare Kräfte, die die schwere Arbeit für echte Layouts erledigen können.
Zurück zu der Diskussion, die ich bei der Arbeit hatte. Einige Leute sagten, wir sollten zurückgehen und alle Instanzen von float in unserer Codebasis löschen, weil es alter Code ist und wir ihn leicht durch Flexbox oder Grid ersetzen können. Aber hier würde ich sagen: "Hallo! Halt mal kurz an." Ich glaube nicht, dass die float-Eigenschaft an einigen Stellen in unserer Codebasis so viel Schaden anrichtet – das ist kein radioaktiver Code, der Probleme verursacht.
Sollten wir also CSS float für etwas anderes als das Umbrechen von Text um Text verwenden? Nein. Aber sollen wir alle sofort das Web von CSS-Float-Deklarationen reinigen, weil es nicht rein und nicht der "richtige" Weg ist, die Dinge zu tun? Nein, nochmal nein.
Das Nette am Web ist, dass alter Code keine Dinge kaputt machen sollte. Fragen Sie einfach Chris. Eine Website, die nicht die schicksten CSS-Eigenschaften oder die coolsten Tricks verwendet, ist nicht nutzlos oder schlecht. Wir haben float einfach durch Alternativen ersetzt, die besser sind. Ich denke, es ist hier eine gute Lektion, dass diese CSS-Eigenschaften wahrscheinlich für immer Bestand haben werden, weil sie immer noch anwendbare Anwendungsfälle im modernen Webdesign haben.
Und das ist in Ordnung.
Es ist eine ziemlich häufige Frage auf Stack Overflow, was ein Maß dafür ist, wie stark die Erwartung der Verwendung von Floats durch Layout-Hacks getrübt wurde.
CSS Exclusions wird die Anwendungsfälle für Floats weiter erheblich einschränken. Es bleibt abzuwarten, ob Floats ihre Nische behalten werden, sobald Exclusions weit verfügbar sind.
Du hast es auf den Punkt gebracht. Text um ein Bild herumfließen lassen (ein extrem seltener Fall); nichts weiter.
Ich muss sagen – ich mochte das alte
floatnie.Ich mochte den Namen
flow-rootnicht. Es wäre angemessener, einen Namen zu verwenden, der mitblock-beginnt.flow-rootscheint unlogisch, da es sich auf die inneren Elemente zu beziehen scheint, während der Designer das übergeordnete Element stylen möchte.Das Wort
rootist ebenfalls verwirrend; es scheint sich auf das Root-Element der Webseite/des Dokuments zu beziehen.Übrigens, die Vorschaufunktion beim Schreiben eines Kommentars hier hat ein Problem. Ich kann die vollständige Vorschau des Kommentars nicht sehen; sie ist auf die Höhe des Kommentarfeldes/Textbereichs beschränkt, und ich kann nicht scrollen. (Verwende Firefox für Android Version 85.1.3)
Ich stimme dir vollkommen zu :)
Die kurze Antwort reichte mir, um diesen Artikel zum Lesen zu markieren, da es zu 99,9 % mein Anwendungsfall dafür ist.
Meine erste Reaktion darauf war, mir Can I Use anzusehen, um den aktuellen Stand der Flexbox- und Grid-Verfügbarkeit zu prüfen. Es sieht so aus, als ob Flexbox in etwa 98% der Browser verfügbar ist, Grid in 95% (mehr oder weniger). Oberflächlich betrachtet bedeutet das, dass etwa 1 von 50 Benutzern Probleme mit einer Flexbox-basierten Website haben wird und 1 von 20 Benutzern eine Grid-basierte Website nicht so sehen wird, wie Sie es beabsichtigen. Die letztere Zahl ist eindeutig viel zu hoch: Wenn 5% Ihrer Benutzer Ihre Website nicht nutzen können, stimmt etwas nicht.
Aber dann fiel mir ein, dass die Frage nicht wirklich ist, wie viele Benutzer kein Grid verwenden können, sondern welche Benutzer kein Grid verwenden können. Überraschenderweise stellt sich heraus, dass es hauptsächlich mobile Benutzer auf kleineren, älteren Geräten sind. Und was diese Benutzer wahrscheinlich brauchen, ist kein komplexes Float-basiertes Layout, sondern etwas viel Einfacheres. Anders ausgedrückt, vielleicht sind die grundlegenden Layout-Stile, die von einfachem HTML/CSS unterstützt werden, nicht nur ausreichend, sondern tatsächlich angemessen für diese Benutzer.
Es wird einige Ausnahmen geben. Wenn Sie kein Flexbox haben, gibt es keine offensichtliche Möglichkeit, eine Liste in eine horizontale Reihe von Elementen zu verwandeln, ohne float oder (grauen) Tabellen zu verwenden. Insgesamt sieht es jedoch so aus, als hätten wir den Wendepunkt in Bezug auf Flexbox und Grid erreicht, und float für Layouts kann tatsächlich sterben gelassen werden.
Ich bin wiederholt auf Probleme beim Drucken von flex-anzeigenden Inhalten gestoßen – Seitenumbrüche, die eine Textzeile durchschneiden oder Inhalte, die an einem Seitenumbruch komplett abgeschnitten sind – und Floats sind oft der einfachste Weg, das Problem zu lösen.
Ein Pull-Zitat in einem flüssigen Layout ist der einzige andere Anwendungsfall für Floats, da sowohl Flexbox als auch Grid das Layout sehr schwer zu verwalten machen würden. Dies ist der eigentliche Verwendungszweck von float, wie er entworfen wurde, und die anderen Layouts wurden durch Ausnutzung der Beziehung zwischen clear und float erstellt.
Ich sehe clear als den wirklichen Verlierer, da es viel weniger Anwendungsfälle als float gibt, um es zu verwenden.
Bilder sind nicht das Einzige, um das Sie Text herumfließen lassen möchten. Es gibt eine Reihe anderer Dinge.
Jemand anderes erwähnte ein Pull-Zitat, was ein weiteres großartiges Beispiel ist.
Sie möchten vielleicht ein kleines Video, ähnlich wie ein Bild, vielleicht als Ersatz für ein GIF, mit umfließendem Text.
Drop Caps sind ein weiteres ziemlich übliches Anwendungsbeispiel für float.
Vergessen wir nicht, float war das erste flüssige Designelement und es ist immer noch eine der besten Möglichkeiten, lange Textblöcke interessanter zu gestalten.
Viele Print-Magazin-Layout-Elemente können am einfachsten mit Floats reproduziert werden. Unter dem Anwendungsfall Pull-Zitate sollten alle Arten von Seitenbereicherung einbezogen werden: Tipps, Info-Blöcke, Mini-Link-Menüs, verwandte Inhalte, Autoreninformationen usw.
ach ja, und shape-outside braucht auch float.
Für mich ist die Verwendung von float anstelle von grid eher wie Denken in 3D statt in 2D. Mit float kann ich Elemente leichter auf semantischere Weise überlappen, wobei z-index kontrolliert, was realistischerweise näher am Bildschirm ist.
Manchmal, wenn man keine Kontrolle über die Reihenfolge der Elemente in einer Komponente hat, kann float nützlich sein.
Ansonsten Flex!
Float ist perfekt, um ein Bild rechts oder links innerhalb des Artikelflusses zu platzieren. Die Verwendung von Flex oder Grid für diesen Zweck wäre ein Hack.