Cálculo de altura de modelo de caja flexible HTML5

Después de investigar el modelo de caja flexible durante todo un día, debo decir que realmente me gusta. Implementa la funcionalidad que implemento en JavaScript de una manera rápida y limpia. Sin embargo, una cosa me molesta:

¡No puedo expandir un div para tomar el tamaño completo calculado por el modelo de caja flexible!

Para ilustrarlo, probaré que soy un ejemplo. En él, los dos lugares flexibles toman el exacto con y la altura, pero el div dentro solo toma la altura del elemento "

...

" . Para este ejemplo, no importa, pero lo que originalmente estaba intentando era colocar un “modelo de caja flexible” dentro de otro “modelo de caja flexible” y esto debe ser posible en mi opinión

 html, body { font-family: Helvetica, Arial, sans-serif; width: 100%; height: 100%; margin: 0px; padding: 0px; } #box-1 { background-color: #E8B15B; } #box-2 { background-color: #C1D652; } #main { width: 100%; height: 100%; overflow-x: auto; overflow-y: hidden; } .flexbox { display:-moz-box; display:-webkit-box; display: box; text-align: left; overflow: auto; } H1 { width: auto; } #box-1 { height: auto; -moz-box-orient: vertical; -webkit-box-orient: vertical; box-orient: vertical; -moz-box-flex: 3; -webkit-box-flex: 3; box-flex: 3; } #box-2 { height: auto; min-width: 50px; -moz-box-orient: vertical; -webkit-box-orient: vertical; box-orient: vertical; -moz-box-flex: 1; -webkit-box-flex: 1; box-flex: 1; } #fullsize{ background-color: red; height: 100%; } 
 

Hallo welt

He estado luchando con esto yo mismo, pero finalmente he logrado encontrar una solución.

Mira este jsFiddle , aunque solo he agregado prefijos de webkit para que estén abiertos en Chrome.

Básicamente tienes 2 problemas que trataré por separado.

  1. Conseguir que el niño de un elemento flexible llene altura 100%
    • Establecer position:relative; en el padre del niño.
    • Establecer position:absolute; en el niño
    • Luego puede establecer el ancho / alto según sea necesario (100% en mi muestra).
  2. Corregir el cambio de tamaño de desplazamiento “quirk” en Chrome
    • Poner overflow-y:auto; en el div desplazable
    • El div desplazable debe tener una altura explícita especificada. Mi muestra ya tiene una altura del 100%, pero si ya no se aplica ninguna, puede especificar la height:0;

Consulte esta respuesta para obtener más información sobre el problema del desplazamiento.

También debe hacer que el div desee expandir un cuadro flexible también y agregar un valor flexible. Esto soluciona el problema.

 #fullsize{ background-color: red; display: -webkit-box; display: box; display: -moz-box; box-flex:1; -webkit-box-flex:1; -moz-box-flex:1; } 

ya que hay algo de interés en esta pregunta, le daré la solución actual que encontré. Es una prueba en Chrome (no hay otro navegador que trabaje actualmente con esta muestra, pero tengo otro más grande trabajando en FF que de alguna manera no funciona cuando lo “simplifico” …).

La idea detrás de esto es, de alguna manera hacer que el elemento nested dentro de la caja flexible se extienda al tamaño completo del elemento de caja flexible. Para hacerlo, se agrega un elemento de posición absoluta en el interior, que tiene 0 de distancia hacia la izquierda, derecha, arriba y abajo.

Sin embargo, incluso en Chrome, hay un error al reducir y cambiar el tamaño del elemento para que desaparezca la barra de desplazamiento.

Aquí está el html:

     flexbox example - 2 column layout     
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.