¿Cómo puedo saber que una fila de diseño de caja flexible consume el espacio vertical restante en una ventana del navegador?
Tengo un diseño de caja flexible de 3 filas. Las dos primeras filas son de altura fija, pero la tercera es dinámica y me gustaría que creciera hasta la altura completa del navegador.
Tengo otra caja flexible en la fila 3 que crea un conjunto de columnas. Para ajustar correctamente los elementos dentro de estas columnas, necesito que comprendan la altura completa del navegador, para cosas como el color de fondo y las alineaciones de los elementos en la base. El diseño principal finalmente se parecería a esto:
.vwrapper {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: stretch;
align-content: stretch;
//height: 1000px;
}
.vwrapper #row1 {
background-color: red;
}
.vwrapper #row2 {
background-color: blue;
}
.vwrapper #row3 {
background-color: green;
flex 1 1 auto;
display: flex;
}
.vwrapper #row3 #col1 {
background-color: yellow;
flex 0 0 240px;
}
.vwrapper #row3 #col2 {
background-color: orange;
flex 1 1;
}
.vwrapper #row3 #col3 {
background-color: purple;
flex 0 0 240px;
}
<body>
<div class="vwrapper">
<div id="row1">
this is the header
</div>
<div id="row2">
this is the second line
</div>
<div id="row3">
<div id="col1">
col1
</div>
<div id="col2">
col2
</div>
<div id="col3">
col3
</div>
</div>
</div>
</body>
Intenté agregar un height
atributo, que funciona cuando lo configuro en un número fijo pero no cuando lo configuro en 100%
. Entiendo height: 100%
que no funciona, porque el contenido no llena la ventana del navegador, pero ¿puedo replicar la idea usando el diseño de flexbox?
Respuestas:
Debe establecer
height
enhtml, body, .wrapper
to100%
(para heredar la altura completa) y luego establecer unflex
valor mayor que1
to.row3
y no en los demás.MANIFESTACIÓN
fuente
establecer la envoltura a la altura del 100%
y configurar la tercera fila para flex-grow
manifestación
fuente
Déjame mostrarte otra forma que funciona al 100%. También agregaré algo de relleno para el ejemplo.
Como puede ver, podemos lograr esto con algunas envolturas de control mientras utilizamos el atributo flex-grow y flex-direction.
1: Cuando el padre "flex-direction" es una "fila", su hijo "flex-grow" funciona horizontalmente. 2: Cuando el padre "flex-direction" es "columnas", su hijo "flex-grow" funciona verticalmente.
Espero que esto ayude
Daniel
fuente
div
exageración.flex-pad-y
:)