Elemente gleichmäßig in Spalten verteilen

9

Ich habe ein einzelnes div mit dem Namen .wrap , innerhalb dessen Elemente platziert werden. Eine unbekannte Anzahl von Objekten ( .thing ) sollte in vier Spalten angeordnet werden (übereinander gestapelt).

%Vor%

Die Spalten müssen gleichmäßig verteilt sein, so dass keine Spalte leer ist. Dies wäre sehr einfach mit:

%Vor%

Allerdings funktioniert column-fill nur in Firefox, glaube ich.

Gibt es eine andere CSS-Methode, um dieses Layout in allen neueren Versionen von Browsern zu erreichen? Konnte flexbox hier konkret helfen?

Bitte beachten Sie, dass ich keine zusätzlichen divs hinzufügen kann, um als Spalten zu fungieren und keine JS-Lösung.

Hier ist eine Geige, die abgesehen von der gleichmäßigen Verteilung das gewünschte Layout hat → Ссылка

    
kthornbloom 14.12.2015, 18:56
quelle

1 Antwort

2

Ja, Sie können hier Flexbox verwenden - und das sollte die meiste Arbeit erledigen. Es ist eine Art Hacky, und Sie haben keine CSS-Spaltenregeln verwendet. Es gibt etwas weniger Variabilität. Wenn Sie also weitere Zeilen / Spalten hinzufügen, müssen Sie die Werte ändern. Um die Anzahl der Spalten pro Zeile beizubehalten, müssen Sie eine feste oder prozentuale Höhe für den Wrapper festlegen. Von dort aus richten Sie den Wrapper-Container als Flex-Container mit der Regel display: flex ein und erstellen mehrere Spalten mit flex-direction: column und flex-wrap: wrap oder der Kurzschrift flex-flow: column wrap .

Um sicherzustellen, dass jede Spalte eine x Anzahl von Elementen enthält, müssen Sie die flex-basis -Regel verwenden und auf den Prozentsatz der Spalte setzen, die Sie auffüllen möchten. Eine Spalte mit 3 Elementen hätte also flex-basis: 33.33% . Sie haben angegeben, dass Sie mehrere Zeilen mit drei Elementen und dann zwei Zeilen mit zwei Elementen wünschen. Daher müssen Sie den nth-child oder nth-of-type Selektor verwenden, um ab dem 10. Element eine neue Flex-Basis von 50% zu erstellen. Und natürlich müssen Sie einen Prozentsatz für die Breite festlegen, die das Ding-Element auf der Seite aufnehmen soll (4 Zeilen = 25%). Um sicherzustellen, dass alle Elemente gleich groß sind, müssen Sie das

verwenden

Das Zentrieren des Textes in einer Flexbox bleibt jedoch ein Problem und Sie müssen die Dinge als Flex-Container einrichten, indem Sie display auf flex oder inline-flex auf einen flex-direction von column setzen mit text-align und justify-content Eigenschaften, die auf center gesetzt sind.

%Vor%

Ссылка

Dieses CSS sollte Ihre Probleme lösen.

%Vor%     
litel 14.12.2015 22:36
quelle

Tags und Links