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 row
modalità, ma la sua larghezza non aumenta in column
modalità. Inoltre, non c'è alcun riflusso immediato degli elementi quando si cambia l'altezza di una column
modalità, ma è presente nella row
modalità.
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: auto
invece flex-wrap: wrap
che 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 wrap
non espandere la sua larghezza durante il wrapping. Consulta code.google.com/p/chromium/issues/detail?id=247963 per ulteriori informazioni.