Ist es möglich, für flex-Elemente ausrichten, die eng an die Artikel über Sie?
Dies ist in der Tat, das Pinterest-layout. Allerdings, die Lösungen online zu finden sind, verpackt in Spalten, das heißt, dass der Behälter versehentlich wächst horizontal. Das ist nicht das Pinterest-layout, und es funktioniert nicht mit dynamisch geladenen Inhalten.
Was ich will zu tun ist, haben eine Reihe von Bildern mit fester Breite und asymmetrische Höhe, horizontal angeordnet, aber das einwickeln in eine neue Zeile, wenn die Grenzen des fixed-width-container erfüllt sind:
Können flexbox tun, oder muss ich zurückgreifen auf eine JS-Lösung wie Mauerwerk?
Es ist nicht klar, was die Reihenfolge der Elemente sein sollte und es ist ziemlich wichtig. Könntest du Nummern?
Wenn ich etwa, dass, aber es könnte Schränken die möglichen Antworten. Ich weiß, dass die top-drei wäre 1, 2, 3 von Links nach rechts, aber ich weiß nicht wirklich, ob 4 unten 1, 2 oder 3. (Falls senkrechter Platzierung sind die Kriterien, es sollte unter 3; wenn die horizontale Platzierung, sollte es unter 1.) Geht alles!
Keine flexbox ist keine gute Lösung für dieses layout verwenden, sollten Sie das Mauerwerk oder im schlimmsten Fall den css-Spalten, die ähnlich meine Antwort auf diese Frage, so könnte es Ihnen helfen, stackoverflow.com/questions/34417059/...
stackoverflow.com/questions/8470070/...
Ein bisschen spät auf der party, hier ist die
Wenn ich etwa, dass, aber es könnte Schränken die möglichen Antworten. Ich weiß, dass die top-drei wäre 1, 2, 3 von Links nach rechts, aber ich weiß nicht wirklich, ob 4 unten 1, 2 oder 3. (Falls senkrechter Platzierung sind die Kriterien, es sollte unter 3; wenn die horizontale Platzierung, sollte es unter 1.) Geht alles!
Keine flexbox ist keine gute Lösung für dieses layout verwenden, sollten Sie das Mauerwerk oder im schlimmsten Fall den css-Spalten, die ähnlich meine Antwort auf diese Frage, so könnte es Ihnen helfen, stackoverflow.com/questions/34417059/...
stackoverflow.com/questions/8470070/...
Ein bisschen spät auf der party, hier ist die
answer to a similar question
von Evan Sharp, der Autor des Pinterest-Skript und co-Gründer von Pinterest, der Erklärung der Logik.InformationsquelleAutor Guybrush Threepwood | 2015-12-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Flexbox ist eine "1-dimensional" - layout-system: Es können ausrichten von Elementen entlang der horizontalen ODER vertikalen Linien.
Einem echten grid-system ist "2-dimensional": Es kann ausrichten von Elementen entlang der horizontalen UND vertikalen Linien. In anderen Worten, können die Zellen erstrecken sich über Spalten und Zeilen, die flexbox nicht.
Dies ist der Grund, warum flexbox hat eine begrenzte Kapazität für Gebäude Stromnetze. Es ist auch ein Grund, warum die W3C entwickelt hat, ein weiterer CSS3-Technologie, Grid-Layout (siehe unten).
In einem flex-container mit
flex-flow: row wrap
-, flex-Elemente umhüllt werden muss, um neue Zeilen.Dies bedeutet, dass ein flex-Element kann nicht wickeln, unter einem anderen Element in der gleichen Zeile.
Ankündigung vor, wie div #3 wraps unten div #1, erstellen Sie eine neue Zeile. Es kann nicht wickeln unter div #2.
Als Ergebnis, wenn die Elemente nicht die höchste in der Zeile, Leerzeichen bleibt, erstellen unschöne Lücken.
Bild-Kredit: Jefree Er
column wrap
LösungWenn Sie mit dem Schalter
flex-flow: column wrap
-, flex-Elemente-Stapel vertikal und ein raster-ähnliches layout ist mehr erreichbar. Jedoch, einer Spalten-Richtung container hat drei potentielle Probleme, die rechts von der Fledermaus:Als Ergebnis einer Spalten-Richtung container kann nicht möglich sein in vielen Fällen.
Anderen Lösungen
Hinzufügen Behälter
In den ersten beiden Bildern oben, wrappen Elemente 2 und 3 in einem separaten Behälter. Diese neuen container sein kann, ein Geschwisterchen zu Punkt 1. Getan.
Hier ein ausführliches Beispiel: Rechner-Tastatur-layout mit flexbox
Einen Nachteil hervorzuheben: Wenn Sie wollen, verwenden Sie die
order
- Eigenschaft neu zu arrangieren, Ihr layout (wie bei media-queries), kann dieses Verfahren zu beseitigen, die option.Desandro Mauerwerk
Wie, um eine Website zu Bauen, die Funktioniert Wie Pinterest
"CSS Grid Layout Module Level 1
Grid-Layout Beispiel: CSS-only-Mauerwerk-layout, aber mit Elementen bestellt, horizontal
InformationsquelleAutor Michael_B
Was Sie wollen, erreicht werden kann
32 Möglichkeiten, die CSS-Weise:1.
flexbox:2. CSS Spalten
(diese Lösung hat der sehr gepflegte Vorteil, integrierte
column-span
- sehr praktisch für den Titel). Der Nachteil ist die Bestellung von Artikeln die in den Spalten (erste Spalte enthält das erste Drittel der Elemente und so weiter...). Ich machte eine jsFiddle für diese.3. Mauerwerk plugin
absolute Positionierung nach der Berechnung gerendert Element-Größen, über JavaScript (Mauerwerk plugin).
Du hast Recht, über #1. Ich war nicht in der Lage zu machen, arbeiten mit flex. Nicht sicher, was Sie bedeuten, von "sehr schlechte browser-Unterstützung". Können Sie mir einige zahlen, bitte? Ich denke #2 hat Probleme für weniger als 5% der Benutzer. Korrigieren Sie mich, wenn ich falsch bin.
Wenn Sie einen Blick auf die Verwendung Relativer Werte, die grid-system ist nicht für eine große Anzahl von Benutzern, so dass es wahrscheinlich nicht die Produktion bereit noch. Es ist eine großartige Lösung, wenn, Dank für, die. caniuse.com/#search=grid
Faszinierend. Können Sie vor Ort alle Unterschiede zwischen grid und Spalten?
lol war das sarkastisch gemeint? In jedem Fall, du hast Recht.
InformationsquelleAutor Andrei Gheorghiu
Flexbox ist eine "1-dimensional" - layout-system: Es können ausrichten von Elementen entlang der horizontalen ODER vertikalen Linien.
Einem echten grid-system ist "2-dimensional": Es kann ausrichten von Elementen entlang der horizontalen UND vertikalen Linien. In anderen Worten, können die Zellen erstrecken sich über Spalten und Zeilen, die flexbox nicht.
Dies ist der Grund, warum flexbox hat eine begrenzte Kapazität für Gebäude Stromnetze. Es ist auch ein Grund, warum die W3C entwickelt hat, ein weiterer CSS3-Technologie, Grid-Layout (siehe unten).
In einem flex-container mit
flex-flow: row wrap
-, flex-Elemente umhüllt werden muss, um neue Zeilen.Dies bedeutet, dass ein flex-Element kann nicht wickeln, unter einem anderen Element in der gleichen Zeile.
Ankündigung vor, wie div #3 wraps unten div #1, erstellen Sie eine neue Zeile. Es kann nicht wickeln unter div #2.
Als Ergebnis, wenn die Elemente nicht die höchste in der Zeile, Leerzeichen bleibt, erstellen unschöne Lücken.
Bild-Kredit: Jefree Er
column wrap
LösungWenn Sie mit dem Schalter
flex-flow: column wrap
-, flex-Elemente-Stapel vertikal und ein raster-ähnliches layout ist mehr erreichbar. Jedoch, einer Spalten-Richtung container hat drei potentielle Probleme, die rechts von der Fledermaus:Als Ergebnis einer Spalten-Richtung container kann nicht möglich sein in vielen Fällen.
Anderen Lösungen
Hinzufügen Behälter
In den ersten beiden Bildern oben, wrappen Elemente 2 und 3 in einem separaten Behälter. Diese neuen container sein kann, ein Geschwisterchen zu Punkt 1. Getan.
Hier ein ausführliches Beispiel: Rechner-Tastatur-layout mit flexbox
Einen Nachteil hervorzuheben: Wenn Sie wollen, verwenden Sie die
order
- Eigenschaft neu zu arrangieren, Ihr layout (wie bei media-queries), kann dieses Verfahren zu beseitigen, die option.Desandro Mauerwerk
Wie, um eine Website zu Bauen, die Funktioniert Wie Pinterest
"CSS Grid Layout Module Level 1
Grid-Layout Beispiel: CSS-only-Mauerwerk-layout, aber mit Elementen bestellt, horizontal
Was Sie wollen, erreicht werden kann
32 Möglichkeiten, die CSS-Weise:1.
flexbox:2. CSS Spalten
(diese Lösung hat der sehr gepflegte Vorteil, integrierte
column-span
- sehr praktisch für den Titel). Der Nachteil ist die Bestellung von Artikeln die in den Spalten (erste Spalte enthält das erste Drittel der Elemente und so weiter...). Ich machte eine jsFiddle für diese.3. Mauerwerk plugin
absolute Positionierung nach der Berechnung gerendert Element-Größen, über JavaScript (Mauerwerk plugin).
den
column
Ansatz scheint ein guter Kompromiss, wenn Siecolumn-width
übervmin
odervmax
Einheiten und dropcolumn-count
(erste snippet) ,display:grid
undvmin
ist auch eine option für die Zukunft (zweite snippet).test-demo mit vmin
CSS:
HTML:
einen link unter anderem https://web-design-weekly.com/2014/11/18/viewport-units-vw-vh-vmin-vmax/
display:grid
konnten machen es auch einfach mit auto-fill-aber um einen span-Wert auf höchste Bild-also Zeilen und Spalten können inbricateCSS:
HTML:
können Sie sehen, https://css-tricks.com/snippets/css/complete-guide-grid/
Erreichen Sie das Mauerwerk Effekt wie pro Ihre screenshot, aber du hast die Höhe des äußeren div-dynamisch
CSS:
HTML:
Statt
flexbox
, empfehle ich die Nutzung Spalten für raster wie dieses. Wie Sie sehen können, der Abstand auf die unteren Bilder können besser sein, aber für eine native CSS-Lösung, die ich denke, es ist Recht ordentlich. Nicht mehr JS:CSS:
HTML: