Je travaille sur une mise en page flexbox imbriquée qui devrait fonctionner comme suit:
Le niveau le plus à l'extérieur ( ul#main) est une liste horizontale qui doit s'étendre vers la droite lorsque d'autres éléments y sont ajoutés. S'il devient trop grand, il devrait y avoir une barre de défilement horizontale.
#main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
/* ...and more... */
}
Chaque élément de cette liste ( ul#main > li) a un en-tête ( ul#main > li > h2) et une liste interne ( ul#main > li > ul.tasks). Cette liste interne est verticale et doit être intégrée dans des colonnes si nécessaire. Lors de l'encapsulation dans plus de colonnes, sa largeur doit augmenter pour faire de la place pour plus d'éléments. Cette augmentation de largeur doit également s'appliquer à l'élément contenant de la liste externe.
.tasks {
flex-direction: column;
flex-wrap: wrap;
/* ...and more... */
}
Mon problème est que les listes internes ne s'enroulent pas lorsque la hauteur de la fenêtre devient trop petite. J'ai essayé beaucoup de falsification de toutes les propriétés flex, en essayant de suivre méticuleusement les directives de CSS-Tricks , mais pas de chance.
Ce JSFiddle montre ce que j'ai jusqu'à présent.
Résultat attendu (ce que je veux) :

Résultat réel (ce que j'obtiens) :

Résultat plus ancien (ce que j'ai obtenu en 2015) :

METTRE À JOUR
Après quelques recherches, cela commence à ressembler à un problème plus important. Tous les principaux navigateurs se comportent de la même manière , et cela n'a rien à voir avec l'imbrication de ma conception flexbox. Les dispositions de colonne Flexbox encore plus simples refusent d'augmenter la largeur de la liste lorsque les éléments sont enveloppés.
Cet autre JSFiddle démontre clairement le problème. Dans les versions actuelles de Chrome, Firefox et IE11, tous les éléments sont correctement enveloppés; la hauteur de la liste augmente en rowmode, mais sa largeur n'augmente pas en columnmode. De plus, il n'y a pas du tout de redistribution immédiate des éléments lors du changement de hauteur d'un columnmode, mais il y en a en rowmode.
Cependant, les spécifications officielles (regardez spécifiquement l'exemple 5) semblent indiquer que ce que je veux faire devrait être possible.
Quelqu'un peut-il trouver une solution de contournement à ce problème?
MISE À JOUR 2
Après de nombreuses expériences en utilisant JavaScript pour mettre à jour la hauteur et la largeur de divers éléments lors des événements de redimensionnement, j'en suis venu à la conclusion qu'il est trop complexe et trop difficile d'essayer de le résoudre de cette façon. De plus, l'ajout de JavaScript rompt définitivement le modèle de flexbox, qui doit être maintenu aussi propre que possible.
Pour l'instant, je reviens à la overflow-y: autoplace de flex-wrap: wrappour que le conteneur interne défile verticalement en cas de besoin. Ce n'est pas joli, mais c'est une voie à suivre qui au moins ne rompt pas trop la convivialité.
column wrapne pas étendre sa largeur lors de l'emballage. Voir code.google.com/p/chromium/issues/detail?id=247963 pour plus d'informations.