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 hacia la derecha cuando se le agregan más elementos. Si crece demasiado, debería 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 a columnas cuando sea necesario. Al envolver en más columnas, su ancho debe aumentar para dejar espacio para más elementos. 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 flexibles, tratando de seguir meticulosamente las pautas de CSS-Tricks , 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) :
Después de algunas investigaciones, esto comienza a parecer un problema mayor. Todos los navegadores principales se comportan de la misma manera , y no tiene nada que ver con que mi diseño de flexbox esté anidado. Incluso los diseños de columna de flexbox 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 el row
modo, pero su ancho no aumenta en el column
modo. Además, no hay ningún reflujo inmediato de elementos cuando se cambia la altura de un column
modo, pero sí en row
modo.
Sin embargo, las especificaciones oficiales (mire 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?
Después de experimentar mucho 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 demasiado complicado intentar resolverlo de esa manera. Además, agregar JavaScript definitivamente rompe el modelo de flexbox, que debe mantenerse lo más limpio posible.
Por ahora, estoy retrocediendo en overflow-y: auto
lugar de flex-wrap: wrap
para 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.
Esto parece una deficiencia fundamental en el diseño flexible.
Un contenedor flexible en la dirección de la columna no se expandirá para acomodar columnas adicionales. (Esto no es un problema en flex-direction: row
.)
Esta pregunta se ha hecho muchas veces (consulte la lista a continuación), sin respuestas claras en CSS.
Es difícil identificar esto como un error porque el problema ocurre en todos los navegadores principales. Pero plantea la pregunta:
¿Cómo es posible que todos los navegadores principales logren que el contenedor flexible se expanda en la envoltura en dirección de fila pero no en dirección de columna?
Uno pensaría que al menos uno de ellos lo haría bien. Solo puedo especular sobre el motivo. Quizás fue una implementación técnicamente difícil y fue archivada para esta iteración.
ACTUALIZACIÓN: El problema parece estar resuelto en Edge v16.
El OP creó una demostración útil que ilustra el problema. Lo estoy copiando aquí: http://jsfiddle.net/nwccdwLw/1/
Soluciones hacky de la comunidad de Stack Overflow:
Llegó tarde a la fiesta, pero todavía me encontré con este problema AÑOS después. Terminé encontrando una solución usando grid. En el contenedor puedes usar
display: grid;
grid-auto-flow: column;
grid-template-rows: repeat(6, auto);
Tengo un ejemplo en CodePen que alterna entre el problema de flexbox y la corrección de la cuadrícula: https://codepen.io/MandeeD/pen/JVLdLd
Encontré una solución alternativa PURE CSS realmente impresionante aquí.
https://jsfiddle.net/gcob492x/3/
El truco: establecer writing-mode: vertical-lr
en la lista div y luego writing-mode: horizontal-tb
en el elemento de la lista. Tuve que modificar los estilos en JSFiddle (eliminar muchos de los estilos de alineación, que no son necesarios para la solución).
Nota: el comentario dice que solo funciona en navegadores basados en Chromium y no en Firefox. Solo lo he probado personalmente en Chrome. Es posible que haya una forma de modificar esto para que funcione en otros navegadores o que haya actualizaciones en dichos navegadores que hagan que esto funcione.
Un gran saludo a este comentario: Cuando los elementos de flexbox se envuelven en modo columna, el contenedor no aumenta su ancho . Examinar ese hilo de problemas me llevó a https://bugs.chromium.org/p/chromium/issues/detail?id=507397#c39, lo que me llevó a este JSFiddle.
Es lamentable que muchos navegadores importantes sufran este error después de muchos años. Considere una solución alternativa de Javascript. Siempre que la ventana del navegador cambie de tamaño o se agregue contenido al elemento, ejecute este código para que cambie de tamaño al ancho adecuado. Puede definir una directiva en su marco para que lo haga por usted.
element.style.flexBasis = "auto";
element.style.flexBasis = `${element.scrollWidth}px`;
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.
Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.
Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.
Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
Anteriormente, Kotaku informó que un hotel Godzilla se estaba abriendo en Tokio este abril. Junto al hotel, estaba programada la aparición de una enorme cabeza de 'Zilla, pero todo lo que hemos visto fueron imágenes conceptuales computarizadas.
Foto: Getty Desde que lanzó The Boring Company hace un año, Elon Musk ha mencionado varios sitios de construcción posibles para el negocio de perforación de túneles y ha descartado una vaga referencia a una aprobación gubernamental "verbal" para un túnel Hyperloop que conecta la ciudad de Nueva York y Washington. , CC. Pero ahora sabemos que al menos un alcalde quiere que Musk perfore un agujero debajo de su ciudad.
Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.
Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.
El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.
Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".
Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.
Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.