Der Gedankengang hinter einem Flexbox-Layout

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Ich muss nur zwei Boxen nebeneinander stellen und ich höre, Flexbox ist gut für so etwas.

Alleine das Hinzufügen von display: flex; zum Elternelement legt die Kindelemente in einer Reihe an.

Nun, das ist cool. Ich hätte sie wahrscheinlich schwimmen lassen können, aber das hier ist einfacher.

Sie sollten aber wahrscheinlich den gesamten Platz einnehmen, den sie haben. Kann ich die Eltern einfach auf 100% Breite dehnen? Nun, das kann ich, aber das wirkt sich offenbar nicht auf die Kindelemente aus.

Wenn das Elternelement mehr Platz hat, als die Kinder benötigen, hilft das den Kindern nicht allein, den Platz auszufüllen.

Vielleicht kann ich width: 50%; für die Kinder verwenden? Das funktioniert, aber ich dachte, der Sinn von Flexbox sei, dass man nicht alle Breiten spezifisch angeben muss. Ah ja, Flexbox hat all diese Möglichkeiten, das wachstums-schrumpfende-ursprüngliche Verhalten von Kindern auszudrücken. Sieht so aus, als wäre flex: 1; hier so einfach wie möglich.

Das Anwenden von flex: 1; auf die Kinder erlaubt ihnen, zu wachsen und den Platz auszufüllen.

Ich mag, dass ich bisher keine Mathematik oder hart kodierte Werte verwenden musste. Kann ich ein Drei-Spalten-Muster erstellen, ohne CSS anzufassen?

Schön.

Hmmm, Moment. Die Größen sind ein bisschen, ähhh, flexibel? Nichts zwingt diese Boxen, ständig ein Drittel des Containers zu sein.

Sieht so aus, als würde flex-basis: 33% das nicht beheben. flex: 0 0 33%; tut das auch nicht. Sieht so aus, als würde width: 33%; flex-shrink: 0; das tun, wenn wir es wirklich erzwingen wollen.

Manchmal erfordert ein Design exakt gleich große Boxen. Das ist vielleicht das Territorium von CSS Grid, aber egal.

Das lange Wort, das dieses Größenverhalten bei schmalen Breiten erzwingt, ist vielleicht ein ungewöhnliches Szenario. Wir hätten es auch mit word-break: break-word; hyphens: auto; am Kind lösen können.

Eine andere Sache, die wir tun könnten, ist, die verdammten Elemente einfach umbrechen zu lassen, anstatt so streng damit zu sein. Flexbox kann das, oder?

Oh hey, das erinnert mich daran, wie cool es ist, dass die ersten beiden Elemente die gleiche Höhe haben. Das ist das Standardverhalten stretch, aber es kann auch gesteuert werden. Und das ist zeilenweise, weshalb die zweite Zeile ihre eigene unterschiedliche Höhe hat.

Was, wenn ich möchte, dass der erste „Love“-Block stattdessen oben ist? Sieht so aus, als könnte ich ihn neu anordnen, oder? Mal sehen, die Standardreihenfolge ist 0, also um zuerst zu sein, mache ich order: -1;.

Ha! Das hat irgendwie funktioniert. Aber ich meinte, ich möchte, dass er in der oberen Zeile die volle Breite einnimmt. Ich denke, ich kann ihn einfach auf flex-basis: 100%; setzen und die anderen werden entsprechend umbrechen.

Es ist ziemlich seltsam, die Quellreihenfolge und die visuelle Reihenfolge so unterschiedlich zu haben. Vielleicht sollte das in die Kategorie „niemals tun“ fallen.

Was, wenn ich das ganze Flexbox-Ding an einem bestimmten Punkt aufgeben will? Ein Teil von mir möchte die Richtung zu vertikal mit flex-direction: column; ändern und die Kinder auf volle Breite erzwingen. Ah, ein einfaches display: block; am Elternelement macht das in einem Zug.

Anstatt alle Flexbox-Sachen zu ändern, um ein Spaltenlayout zu handhaben, schalten wir Flexbox einfach aus.

Flexbox kann viel mehr! Eines meiner Lieblingsfeatures ist, wie automatische Ränder funktionieren, um andere Elemente wegzudrücken, wenn Platz vorhanden ist. Dies ist nur eine kleine Reise, bei der wir etwas UI ausprobieren und die nützlichen Dinge sehen, die Flexibilität bietet, sowie Dinge, die sie verwirrend machen können.