Estoy trabajando en un diseño de caja flexible anidado que debería funcionar de la siguiente manera:
El nivel más externo ( ul#main
) es una lista horizontal que debe expandirse a la derecha cuando se le agregan más elementos. Si crece demasiado, debe haber una barra de desplazamiento horizontal.
#main {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
/* ...and more... */
}
Cada elemento de esta lista ( ul#main > li
) tiene un encabezado ( ul#main > li > h2
) y una lista interna ( ul#main > li > ul.tasks
). Esta lista interna es vertical y debe ajustarse en columnas cuando sea necesario. Al envolver en más columnas, su ancho debe aumentar para dejar espacio para más artículos. Este aumento de ancho debería aplicarse también al elemento contenedor de la lista externa.
.tasks {
flex-direction: column;
flex-wrap: wrap;
/* ...and more... */
}
Mi problema es que las listas internas no se ajustan cuando la altura de la ventana es demasiado pequeña. He intentado muchas manipulaciones con todas las propiedades de flex, tratando de seguir las pautas de CSS-Tricks meticulosamente, pero no tuve suerte.
Este JSFiddle muestra lo que tengo hasta ahora.
Resultado esperado (lo que quiero) :
Resultado real (lo que obtengo) :
Resultado anterior (lo que obtuve en 2015) :
ACTUALIZAR
Después de algunas investigaciones, esto comienza a parecer un problema mayor. Todos los principales navegadores se comportan de la misma manera , y no tiene nada que ver con que mi diseño de Flexbox esté anidado. Diseños de columna de flexbox aún más simples se niegan a aumentar el ancho de la lista cuando los elementos se ajustan.
Este otro JSFiddle demuestra claramente el problema. En las versiones actuales de Chrome, Firefox e IE11, todos los elementos se ajustan correctamente; la altura de la lista aumenta en row
modo, pero su ancho no aumenta en column
modo. Además, no hay reflujo inmediato de elementos cuando se cambia la altura de un column
modo, pero sí está en row
modo.
Sin embargo, las especificaciones oficiales (mira específicamente el ejemplo 5) parecen indicar que lo que quiero hacer debería ser posible.
¿Alguien puede encontrar una solución a este problema?
ACTUALIZACIÓN 2
Después de mucho experimentar usando JavaScript para actualizar la altura y el ancho de varios elementos durante los eventos de cambio de tamaño, he llegado a la conclusión de que es demasiado complejo y demasiados problemas tratar de resolverlo de esa manera. Además, agregar JavaScript definitivamente rompe el modelo de flexbox, que debe mantenerse lo más limpio posible.
Por ahora, me estoy volviendo hacia atrás en overflow-y: auto
lugar de flex-wrap: wrap
que el contenedor interno se desplace verticalmente cuando sea necesario. No es bonito, pero es un camino a seguir que al menos no rompe demasiado la usabilidad.
column wrap
no expanda su ancho cuando se ajusta. Consulte code.google.com/p/chromium/issues/detail?id=247963 para obtener más información.