So starten Sie eine neue Spalte in flex Spalte wrap-layout
Ich möchte, dass meine Daten in Spalten angeordnet sind (von oben nach unten, von Links nach rechts) und jede Position innerhalb der Daten beginnen soll eine neue Spalte. Es gibt drei Einschränkungen:
- Verwenden müssen, flex (ich brauchen, um eine spezielle Funktion für die flex)
- Nicht gruppieren der Daten (z.B. wickeln Sie alle Daten-items in einem div)
- Keine Feste Höhe
Meine Frage ist, wie kann ich Kraft ein Spaltenumbruch innerhalb einer flex-flow: column
wrap-layout?
CSS:
.grid {
display: flex;
flex-direction: column;
flex-wrap: wrap;
}
.grid .head {
width: 25%;
background: orange;
border-bottom: thin dotted;
}
.grid .data {
width: 25%;
background: yellow;
border-bottom: thin dotted;
}
/* my attempt to solve this */
.grid {
height: 76px;
}
HTML:
<div class="grid">
<div class="head">Column 1 (3 items)</div>
<div class="data">item 1-1</div>
<div class="data">item 1-2</div>
<div class="data">item 1-3</div>
<div class="head">Column 2 (4 items)</div>
<div class="data">item 2-1</div>
<div class="data">item 2-2</div>
<div class="data">item 2-3</div>
<div class="data">item 2-4</div>
<div class="head">Column 3 (2 items)</div>
<div class="data">item 3-1</div>
<div class="data">item 3-2</div>
<div class="head">Column 4 (1 items)</div>
<div class="data">item 4-1</div>
</div>
- Dies wird wahrscheinlich nicht passen Ihre Bedürfnisse, aber ich habe dieses mit der Standard-Reihe von Richtung und leeren divs... es ist ein bisschen schmutzig.
- Wären Sie daran interessiert, eine Lösung, die über
column-count
? Flex-und column-count nicht gut zusammen spielen, aber vielleicht, wenn flex angewendet wird, auf ein übergeordnetes element, die Sie vielleicht in der Lage sein, Sie beide zu verwenden - Das wird nicht für mich arbeiten, aber es könnte helfen, jemand anderes mit ähnlichen problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Offenbar die richtige Lösung ist die Verwendung der
break-before
oderbreak-after
Eigenschaft:In der Zeit des Schreibens, die meisten Browser implementieren die
*-break-*
Eigenschaften falsch oder nicht implementiert werden. Betrachten Sie diese Antwort seiner Zeit Voraus.Folgende demo arbeitet in:
CSS:
HTML:
Chrom Version 73.0.3683.75
Nicht respektieren die Spalte break:
Ich glaube nicht, dass es einen Weg gibt, dies zu tun mit flexbox, aber wenn wir
column-count
wir können den Vorteil der Eigenschaften:'Pause-before', 'Pause-after', 'break-inside'
Insbesondere:
Können wir
break-before: column;
auf jeden 'Kopf' - element, wo die Spalte Wert bedeutet:(ähnlich wie wenn wir mit Pause-nach:Spalte diese zwingen würde, eine Spalte Pause nach der generierten box )
NB: Browser-Unterstützung ist derzeit beschränkt auf den IE (!!)
FIDDLE (Nur IE)
Beachten Sie, dass in der oben fiddle für den IE scheint es eine Positionierung-Problem (bug?) so legte ich einige code in einem speziellen Medien-Abfrage, die nur Effekte, die der IE so nicht zu Wirkung anderen Browsern
-webkit-column-break-before
während im IE funktioniert es uneinheitlich, je nach der Höhe der Spalte Elemente.Wenn Sie können dynamisch hinzufügen ein div vor jeder Kopf (außer der ersten), kann es möglich sein. Credits gehen an Tobias Bjerrome Ahlin. Getestet auf Chrome, Firefox, Safari und IE11.
CSS:
HTML: