css - start - flex-grow
Altura 100% en la columna de flexbox niƱo (1)
TL; DR: configure .flex para display:flex , y elimine la height:100% en .flex-child . Puede ver el CodePen modificado aquí.
Por qué funciona:
Aprendí de esta pregunta similar que, de acuerdo con la especificación de flexbox, un valor de align-self:stretch autoalineado (el valor predeterminado para un elemento flexionado) cambia solo el valor utilizado de la propiedad transversal de un elemento (en este caso, height ) . Sin embargo, los porcentajes se calculan a partir del valor especificado de la propiedad transversal del padre, no de su valor utilizado. Si alguna vez abre su inspector y ve la height:100% en ''Estilos'' pero height:1200px en ''Computado'', entonces eso le muestra los valores especificados y utilizados , respectivamente.
Parece que Chrome sigue la especificación al principio a este respecto. Eso significa que establecer la height:100% en .flex-child significa el 100% de la height especificada de .flex . Como no hemos especificado una height en .flex , eso significa que estamos agarrando el 100% de la height predeterminada, que es auto . ¿Ves por qué el motor de diseño se está confundiendo?
Configuración de .flex para display:flex y eliminación de la height:100% de .flex-child (para que no siga intentando establecer el 100% de auto ) hará que .flex-child complete todos los .flex
Cuando esto no funcione:
Esto no funcionará si estás tratando de llenar solo algunos de .flex , ej. tratando de establecer .flex-child a la height:90% , porque flexionar al niño significa que va a llenar todo el espacio disponible. Pensé que podrías piratearlo con posicionamiento absoluto, pero eso tampoco parece funcionar. Puede hackear agregando un segundo hijo a .flex que llamaremos .spacer y estableciendo .spacer en flex:1 y .flex-child en flex:9 (asegúrese de establecer flex-direction:column en .flex también ) Un truco, pero la única forma en que podría arreglarlo. Aquí está el CodePen.
Sin embargo, afortunadamente no tenemos que seguir confiando en esto y simplemente cambiarán las especificaciones para que actúen más de lo esperado.
Esta pregunta ya tiene una respuesta aquí:
- cómo hacer que las flexboxes anidadas funcionen 3 respuestas
Estoy teniendo problemas con una columna de flexbox en que los elementos secundarios del elemento flexible no responden a la height en porcentajes. Solo he comprobado esto en Chrome y, por lo que entiendo, es solo un problema de Chrome. Aquí está mi ejemplo:
HTML
<div class=''flexbox''>
<div class=''flex''>
<div class=''flex-child''></div>
</div>
<div class=''static''></div>
</div>
CSS
.flexbox{
position:absolute;
background:black;
width:100%;
height:100%;
display: flex;
flex-direction:column;
}
.flex{
background:blue;
flex:1;
}
.flex-child{
background:red;
height:100%;
width:100%;
display:block;
}
.static{
background:green;
width:100%;
height:5rem;
}
Lo quiero así que el .flex-child rojo llena el .flex azul. ¿Por qué la height:100% no funciona height:100% ?