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.
Respuestas:
Hazlo simple: DEMO
Versión de pantalla completa
fuente
flex: 1
aflex-grow: 1
. Gracias por la solucion!El siguiente ejemplo incluye el comportamiento de desplazamiento si el contenido del componente central expandido se extiende más allá de sus límites. Además, el componente central ocupa el 100% del espacio restante en la ventana gráfica.
jsfiddle aquí
Ejemplo de html que se puede usar para demostrar este comportamiento
fuente
html
del selector y appylingheight: 100vh
quebody
específicamente: jsfiddle.net/pm6nqcqh/1Un enfoque más moderno sería utilizar la propiedad de cuadrícula.
fuente
Use la
flex-grow
propiedad para el contenido principal div y dele eldispaly: flex;
a su padre;fuente
section
altura no es fija) en lugar de usarposition: absolute
?position: absolute;
. https://jsfiddle.net/xa26brzf/