Flexbox Challenge & Limitation
La sfida è centrare un gruppo di elementi flessibili e allinearli a sinistra sulla fasciatura. Ma a meno che non ci sia un numero fisso di scatole per riga e ogni scatola abbia una larghezza fissa, questo non è attualmente possibile con flexbox.
Utilizzando il codice pubblicato nella domanda, potremmo creare un nuovo contenitore flessibile che avvolge l'attuale contenitore flessibile ( ul), che ci consentirebbe di centrare il ulcon justify-content: center.
Quindi gli elementi flessibili di ulpotrebbero essere allineati a sinistra con justify-content: flex-start.
#container {
display: flex;
justify-content: center;
}
ul {
display: flex;
justify-content: flex-start;
}
Questo crea un gruppo centrato di elementi flessibili allineati a sinistra.
Il problema con questo metodo è che a determinate dimensioni dello schermo ci sarà uno spazio sulla destra del ul, che non apparirà più centrato.

Ciò accade perché nel layout flessibile (e, in realtà, CSS in generale) il contenitore:
- non sa quando un elemento va a capo;
- non sa che uno spazio precedentemente occupato è ora vuoto, e
- non ricalcola la sua larghezza per restringere il layout più stretto.
La lunghezza massima dello spazio bianco a destra è la lunghezza dell'elemento flessibile che il contenitore si aspettava fosse lì.
Nella demo seguente, ridimensionando la finestra orizzontalmente, puoi vedere gli spazi bianchi andare e venire.
DEMO
Un approccio più pratico
Il layout desiderato può essere ottenuto senza l'utilizzo di flexbox inline-blocke media query .
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; } }
Il codice precedente esegue il rendering di un contenitore centrato orizzontalmente con elementi figlio allineati a sinistra come questo:

DEMO
Altre opzioni