Ich arbeite an einem verschachtelten Flexbox-Layout, das wie folgt funktionieren sollte:
Die äußerste Ebene ( ul#main
) ist eine horizontale Liste, die nach rechts erweitert werden muss, wenn weitere Elemente hinzugefügt werden. Wenn es zu groß wird, sollte eine horizontale Bildlaufleiste vorhanden sein.
#main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
/* ...and more... */
}
Jedes Element dieser Liste ( ul#main > li
) hat einen Header ( ul#main > li > h2
) und eine innere Liste ( ul#main > li > ul.tasks
). Diese innere Liste ist vertikal und sollte bei Bedarf in Spalten eingeschlossen werden. Wenn Sie mehr Spalten einschließen, sollte sich die Breite erhöhen, um Platz für mehr Elemente zu schaffen. Diese Breitenerhöhung sollte auch für das enthaltene Element der äußeren Liste gelten.
.tasks {
flex-direction: column;
flex-wrap: wrap;
/* ...and more... */
}
Mein Problem ist, dass die inneren Listen nicht umbrochen werden, wenn die Höhe des Fensters zu klein wird. Ich habe viele Manipulationen an allen Flex-Eigenschaften versucht und versucht, die Richtlinien bei CSS-Tricks akribisch zu befolgen , aber kein Glück.
Diese JSFiddle zeigt, was ich bisher habe.
Erwartetes Ergebnis (was ich will) :
Tatsächliches Ergebnis (was ich bekomme) :
Älteres Ergebnis (was ich 2015 bekommen habe) :
AKTUALISIEREN
Nach einigen Untersuchungen scheint dies ein größeres Problem zu sein. Alle gängigen Browser verhalten sich gleich und haben nichts damit zu tun, dass mein Flexbox-Design verschachtelt ist. Noch einfachere Flexbox-Spaltenlayouts weigern sich, die Listenbreite zu erhöhen, wenn die Elemente umbrochen werden.
Diese andere JSFiddle zeigt das Problem deutlich. In aktuellen Versionen von Chrome, Firefox und IE11 werden alle Elemente korrekt verpackt. Die Höhe der Liste nimmt im row
Modus zu, die Breite im column
Modus jedoch nicht . Es gibt auch überhaupt keinen sofortigen Rückfluss von Elementen, wenn die Höhe eines column
Modus geändert wird, aber es gibt einen row
Modus.
Die offiziellen Spezifikationen (siehe Beispiel 5) scheinen jedoch darauf hinzudeuten, dass das, was ich tun möchte, möglich sein sollte.
Kann jemand eine Problemumgehung für dieses Problem finden?
UPDATE 2
Nachdem ich viel mit JavaScript experimentiert habe, um die Höhe und Breite verschiedener Elemente während Größenänderungsereignissen zu aktualisieren, bin ich zu dem Schluss gekommen, dass es zu komplex und zu schwierig ist, es auf diese Weise zu lösen. Durch das Hinzufügen von JavaScript wird das Flexbox-Modell definitiv beschädigt, das so sauber wie möglich gehalten werden sollte.
Im Moment greife ich auf zurück, overflow-y: auto
anstatt flex-wrap: wrap
dass der innere Container bei Bedarf vertikal rollt. Es ist nicht schön, aber es ist ein Weg nach vorne, der zumindest die Benutzerfreundlichkeit nicht zu sehr beeinträchtigt.
column wrap
seine Breite beim Umbrechen nicht vergrößert. Weitere Informationen finden Sie unter code.google.com/p/chromium/issues/detail?id=247963 .