Sto lavorando su un layout nidificato di flexbox che dovrebbe funzionare come segue:
Il livello più esterno ( ul#main) è un elenco orizzontale che deve espandersi a destra quando vengono aggiunti più elementi. Se diventa troppo grande, dovrebbe esserci una barra di scorrimento orizzontale.
#main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
/* ...and more... */
}
Ogni elemento di questo elenco ( ul#main > li) ha un'intestazione ( ul#main > li > h2) e un elenco interno ( ul#main > li > ul.tasks). Questo elenco interno è verticale e dovrebbe essere suddiviso in colonne quando necessario. Quando si avvolge in più colonne, la sua larghezza dovrebbe aumentare per fare spazio a più elementi. Questo aumento di larghezza dovrebbe applicarsi anche all'elemento contenente dell'elenco esterno.
.tasks {
flex-direction: column;
flex-wrap: wrap;
/* ...and more... */
}
Il mio problema è che gli elenchi interni non si chiudono quando l'altezza della finestra diventa troppo piccola. Ho provato a manomettere molte proprietà flex, cercando di seguire meticolosamente le linee guida di CSS-Tricks , ma senza fortuna.
Questo JSFiddle mostra ciò che ho finora.
Risultato atteso (quello che voglio) :

Risultato effettivo (quello che ottengo) :

Risultato precedente (quello che ho ottenuto nel 2015) :

AGGIORNARE
Dopo alcune indagini, questo inizia a sembrare un problema più grande. Tutti i principali browser si comportano allo stesso modo e non ha nulla a che fare con il design del mio flexbox nidificato. Anche i layout di colonna di flexbox più semplici rifiutano di aumentare la larghezza dell'elenco quando gli articoli vengono spostati.
Quest'altro JSFiddle dimostra chiaramente il problema. Nelle attuali versioni di Chrome, Firefox e IE11, tutti gli elementi si avvolgono correttamente; l'altezza dell'elenco aumenta in rowmodalità, ma la sua larghezza non aumenta in columnmodalità. Inoltre, non c'è alcun riflusso immediato degli elementi quando si cambia l'altezza di una columnmodalità, ma è presente nella rowmodalità.
Tuttavia, le specifiche ufficiali (guarda in particolare l'esempio 5) sembrano indicare che ciò che voglio fare dovrebbe essere possibile.
Qualcuno può trovare una soluzione a questo problema?
AGGIORNAMENTO 2
Dopo molti esperimenti con JavaScript per aggiornare l'altezza e la larghezza di vari elementi durante gli eventi di ridimensionamento, sono giunto alla conclusione che è troppo complesso e troppi problemi per provare a risolverlo in quel modo. Inoltre, l'aggiunta di JavaScript interrompe sicuramente il modello di flexbox, che dovrebbe essere mantenuto il più pulito possibile.
Per ora, sto ricadendo overflow-y: autoinvece flex-wrap: wrapche in modo che il contenitore interno scorra verticalmente quando necessario. Non è carino, ma è un modo in avanti che almeno non rompe troppo l'usabilità.
column wrapnon espandere la sua larghezza durante il wrapping. Consulta code.google.com/p/chromium/issues/detail?id=247963 per ulteriori informazioni.