En un diseño de 3 filas:
- la fila superior debe dimensionarse de acuerdo con su contenido
- la fila inferior debe tener una altura fija en píxeles
- la fila central debe expandirse para llenar el contenedor
El problema es que a medida que el contenido principal se expande, agota las filas de encabezado y pie de página:
HTML:
<section>
<header>
header: sized to content
<br>(but is it really?)
</header>
<div>
main content: fills remaining space<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- uncomment to see it break - ->
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- -->
</div>
<footer>
footer: fixed height in px
</footer>
</section>
CSS:
section {
display: flex;
flex-flow: column;
align-items: stretch;
height: 300px;
}
header {
flex: 0 1 auto;
background: tomato;
}
div {
flex: 1 1 auto;
background: gold;
overflow: auto;
}
footer {
flex: 0 1 60px;
background: lightgreen;
/* fixes the footer: min-height: 60px; */
}
Violín:
- http://jsfiddle.net/7yLFL/1/ (trabajando, con contenido pequeño)
- http://jsfiddle.net/7yLFL/ (roto, con mayor contenido)
Estoy en la afortunada situación de poder usar lo último y lo mejor en CSS, sin tener en cuenta los navegadores heredados. Pensé que podría usar el diseño flexible para finalmente deshacerme de los diseños antiguos basados en tablas. Por alguna razón, no está haciendo lo que quiero ...
Para el registro, hay muchas preguntas relacionadas sobre SO sobre "llenar la altura restante", pero nada que resuelva el problema que estoy teniendo con flex. Refs:
- Haga que un div llene la altura del espacio restante de la pantalla
- Rellene el espacio vertical restante: solo CSS
- ¿Tiene un div para completar el alto / ancho restante de un contenedor cuando lo comparte con otro div?
- Haga un estiramiento dividido anidado al 100% de la altura restante del contenedor.
- ¿Cómo puedo hacer que mi diseño de Flexbox tome 100% de espacio vertical?
- etc.