Flexbox Challenge & Limitation
Die Herausforderung besteht darin, eine Gruppe von Flex-Elementen zu zentrieren und sie beim Wickeln linksbündig auszurichten. Dies ist derzeit mit der Flexbox nicht möglich, es sei denn, es gibt eine feste Anzahl von Boxen pro Zeile und jede Box hat eine feste Breite.
Mit dem in der Frage angegebenen Code könnten wir einen neuen Flex-Container erstellen, der den aktuellen Flex-Container ( ul
) umschließt, sodass wir den ul
mit zentrieren können justify-content: center
.
Dann ul
könnten die Flex-Elemente des linksbündig ausgerichtet werden justify-content: flex-start
.
#container {
display: flex;
justify-content: center;
}
ul {
display: flex;
justify-content: flex-start;
}
Dadurch wird eine zentrierte Gruppe von linksbündigen Flex-Elementen erstellt.
Das Problem bei dieser Methode ist, dass bei bestimmten Bildschirmgrößen rechts vom eine Lücke vorhanden ist ul
, die nicht mehr zentriert erscheint.
Dies liegt daran, dass im Flex-Layout (und tatsächlich in CSS im Allgemeinen) der Container:
- weiß nicht, wann ein Element umbrochen wird;
- weiß nicht, dass ein zuvor besetzter Raum jetzt leer ist, und
- berechnet seine Breite nicht neu, um das schmalere Layout zu verkleinern.
Die maximale Länge des Leerzeichens rechts entspricht der Länge des Flex-Elements, das der Container erwartet hatte.
In der folgenden Demo können Sie durch horizontale Größenänderung des Fensters sehen, wie das Leerzeichen kommt und geht.
DEMO
Ein praktischerer Ansatz
Das gewünschte Layout kann ohne Flexbox-Verwendung inline-block
und Medienabfragen erreicht werden .
HTML
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
CSS
ul {
margin: 0 auto;
width: 1200px;
padding-left: 0;
font-size: 0;
}
li {
display: inline-block;
font-size: 18px;
list-style-type: none;
width: 150px;
height: 50px;
line-height: 50px;
margin: 15px 25px;
box-sizing: border-box;
text-align: center;
}
@media screen and (max-width: 430px) { ul { width: 200px; } }
@media screen and (min-width: 431px) and (max-width: 630px) { ul { width: 400px; } }
@media screen and (min-width: 631px) and (max-width: 830px) { ul { width:600px; } }
@media screen and (min-width: 831px) and (max-width: 1030px) { ul { width: 800px; } }
@media screen and (min-width: 1031px) and (max-width: 1230px) { ul { width: 1000px; } }
Der obige Code rendert einen horizontal zentrierten Container mit linksbündigen untergeordneten Elementen wie folgt:
DEMO
Andere Optionen