Flexbox ist ein "1-dimensionales" Layoutsystem: Es kann Elemente entlang horizontaler oder vertikaler Linien ausrichten.
Ein echtes Rastersystem ist "zweidimensional": Es kann Elemente entlang horizontaler UND vertikaler Linien ausrichten. Mit anderen Worten, Zellen können sich über Spalten und Zeilen erstrecken, was Flexbox nicht kann.
Aus diesem Grund verfügt die Flexbox nur über eine begrenzte Kapazität zum Aufbau von Gittern. Dies ist auch ein Grund, warum das W3C eine andere CSS3-Technologie entwickelt hat, Grid Layout (siehe unten).
In einem Flex-Container mit flex-flow: row wrap
müssen Flex-Elemente in neue Zeilen umbrochen werden .
Dies bedeutet, dass ein Flex-Element nicht unter ein anderes Element in derselben Zeile gewickelt werden kann .
Beachten Sie oben, wie Div # 3 unter Div # 1 umbrochen wird und eine neue Zeile erstellt. Es kann nicht unter div # 2 gewickelt werden .
Wenn Elemente nicht die höchsten in der Reihe sind, bleibt daher ein Leerraum übrig, wodurch unschöne Lücken entstehen.
Bildnachweis: Jefree Sujit
column wrap
Lösung
Wenn Sie zu wechseln flex-flow: column wrap
, werden Flex-Elemente vertikal gestapelt, und ein gitterartiges Layout ist besser erreichbar. Ein Container in Säulenrichtung weist jedoch auf Anhieb drei potenzielle Probleme auf:
- Es erweitert den Container horizontal und nicht vertikal (wie das Pinterest-Layout).
- Der Behälter muss eine feste Höhe haben, damit die Gegenstände wissen, wo sie verpackt werden müssen.
- Zum jetzigen Zeitpunkt weist es einen Mangel in allen gängigen Browsern auf, in denen der Container nicht erweitert wird, um zusätzliche Spalten aufzunehmen .
Infolgedessen ist ein Container in Spaltenrichtung in vielen Fällen möglicherweise nicht realisierbar.
Andere Lösungen
Container hinzufügen
In den ersten beiden Bildern oben sollten Sie die Elemente 2 und 3 in einem separaten Behälter verpacken. Dieser neue Container kann ein Geschwister von Punkt 1 sein. Fertig.
Hier ein detailliertes Beispiel: Layout der Taschenrechner-Tastatur mit Flexbox
Ein Nachteil, der hervorgehoben werden sollte: Wenn Sie die order
Eigenschaft verwenden möchten, um Ihr Layout neu anzuordnen (z. B. bei Medienabfragen), wird diese Option möglicherweise durch diese Methode beseitigt.
Desandro Mauerwerk
Masonry ist eine JavaScript-Rasterlayoutbibliothek. Es funktioniert, indem Elemente basierend auf dem verfügbaren vertikalen Raum in einer optimalen Position platziert werden, ähnlich wie ein Maurer, der Steine in eine Wand einfügt.
Quelle: http://masonry.desandro.com/
So erstellen Sie eine Website, die wie Pinterest funktioniert
[Pinterest] ist wirklich eine coole Seite, aber was ich interessant finde, ist, wie diese Pinnwände angeordnet sind ... Der Zweck dieses Tutorials ist es also, diesen reaktionsschnellen Blockeffekt selbst neu zu erstellen ...
Quelle: https://benholland.me/javascript/2012/02/20/how-to-build-a-site-that-works-like-pinterest.html
CSS-Grid-Layout-Modul Ebene 1
Dieses CSS-Modul definiert ein zweidimensionales gitterbasiertes Layoutsystem, das für das Design der Benutzeroberfläche optimiert ist. Im Rasterlayoutmodell können die untergeordneten Elemente eines Rastercontainers in beliebigen Slots in einem vordefinierten flexiblen oder Raster mit fester Größe positioniert werden.
Quelle: https://drafts.csswg.org/css-grid/
Beispiel für ein Rasterlayout: Nur CSS-Mauerwerkslayout, jedoch mit horizontal angeordneten Elementen