Je développe une mise en page Flexbox imbriquée qui fonctionne comme ceci :
Le niveau le plus externe (ul#main
) est une liste horizontale qui doit s'étendre vers la droite lorsque d'autres éléments 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
) 都有一个标头 (ul#main > li > h2
) 和一个内部列表 (ul#main > li > ul.tasks
). Cette liste interne est verticale et doit être divisée en colonnes si nécessaire. Au fur et à mesure qu'il s'enroule dans davantage de colonnes, sa largeur devrait augmenter pour laisser de la place à davantage d'éléments. Cette augmentation de largeur devrait également s'appliquer aux éléments contenant de la liste externe.
.tasks { flex-direction: column; flex-wrap: wrap; /* ...and more... */ }
Mon problème est que lorsque la hauteur de la fenêtre est trop petite, la liste intérieure ne s'enroule pas. J'ai essayé beaucoup de falsification de toutes les propriétés Flex, en essayant de suivre strictement les directives de CSS-Tricks, mais sans succès.
Ce JSFiddle montre ce que j'ai jusqu'à présent.
Résultats attendus (ce que je veux) :
Résultats réels (ce que j'ai obtenu) :
Résultats plus anciens (résultats que j'ai obtenus en 2015) :
Après quelques investigations, cela a commencé à ressembler à un problème plus grave. Tous les principaux navigateurs se comportent de la même manière, cela n'a rien à voir avec la conception de ma Flexbox imbriquée. Même la disposition plus simple des colonnes Flexbox n'augmente pas la largeur de la liste à mesure que les éléments sont renvoyés à la ligne.
Un autre JSFiddle démontre clairement le problème. Dans les versions actuelles de Chrome, Firefox et IE11, tous les éléments s'ajustent correctement ; row
模式下列表的高度会增加,但在 column
模式下其宽度不会增加。另外,当更改 column
模式的高度时,根本不会立即回流元素,但在 row
(voir exemple 5 pour plus de détails) semble indiquer que ce que je veux faire devrait être possible.
Quelqu'un peut-il trouver une solution à ce problème ?Mise à jour 2
Maintenant, je reviens sur
pour que le conteneur intérieur défile verticalement si nécessaire. Ce n'est pas joli, mais c'est une approche qui au moins ne perturbe pas trop la convivialité. overflow-y: auto
而不是 flex-wrap:wrapper
En retard à la fête mais j'ai toujours ce problème des années plus tard. J'ai finalement trouvé une solution en utilisant une grille. Sur le contenant, vous pouvez utiliser
J'ai un exemple sur CodePen pour basculer entre les problèmes Flexbox et les correctifs de maillage : https://codepen .io/MandeeD/pen/JVLdLd
Question
Cela ressemble à un défaut fondamental dans la disposition flexible.
Les conteneurs flexibles orientés colonnes ne s'étendent pas pour accueillir des colonnes supplémentaires. (Ce n'est pas un problème en
flex-direction: row
.)Cette question a été posée à plusieurs reprises (voir liste ci-dessous) et il n'y a pas de réponse claire en CSS.
Il est difficile d'identifier cela comme un bug car le problème se produit dans tous les principaux navigateurs. Mais cela soulève une question :
On pourrait penser qu'au moins l'un d'entre eux réussirait. Je ne peux que spéculer sur la raison. Il s’agissait peut-être d’une implémentation techniquement difficile et donc mise de côté pour cette itération.
Mise à jour : Ce problème semble avoir été résolu dans Edge v16.
Description du problème
OP a créé une démo utile pour illustrer le problème. Je l'ai copié ici : http://jsfiddle.net/nwccdwLw/1/ p>
Options de solution de contournement
Solutions Hacky de la communauté Stack Overflow :
"Il semble que ce problème ne puisse pas être résolu uniquement avec CSS, je vous recommande donc d'utiliser la solution JQuery."
Rapport de bug Chrome
Autres articles décrivant le même problème
ne s'étend-il pas en largeur pour couvrir tout- ?