El tamaño mínimo automático de artículos flexibles
Estás encontrando una configuración predeterminada de flexbox.
Un elemento flexible no puede ser más pequeño que el tamaño de su contenido a lo largo del eje principal.
Los valores predeterminados son ...
min-width: auto
min-height: auto
... para elementos flexibles en dirección de fila y columna, respectivamente.
Puede anular estos valores predeterminados configurando elementos flexibles en:
min-width: 0
min-height: 0
overflow: hidden(o cualquier otro valor, excepto visible)
Especificación de Flexbox
4.5. Tamaño mínimo automático de artículos flexibles
Para proporcionar un tamaño mínimo predeterminado más razonable para los elementos flexibles, esta especificación introduce un nuevo autovalor como el valor inicial de las propiedades min-widthy min-heightdefinidas en CSS 2.1.
Con respecto al autovalor ...
En un elemento flexible que overflowestá visibleen el eje principal, cuando se especifica en la propiedad de tamaño mínimo del eje principal del elemento flexible, especifica un tamaño mínimo automático . De lo contrario, se calcula a 0.
En otras palabras:
- Los valores predeterminados
min-width: autoy min-height: autosolo se aplican cuando overflowes visible.
- Si el
overflowvalor no es visible, el valor de la propiedad de tamaño mínimo es 0.
- Por lo tanto,
overflow: hiddenpuede ser un sustituto de min-width: 0y min-height: 0.
y...
- El algoritmo de dimensionamiento mínimo se aplica solo en el eje principal.
- Por ejemplo, un elemento flexible en un contenedor de dirección de fila no se obtiene
min-height: autode manera predeterminada.
- Para una explicación más detallada, vea esta publicación:
¿Has aplicado min-width: 0 y el elemento aún no se encoge?
Contenedores Flex Anidados
Si se trata de elementos flexibles en múltiples niveles de la estructura HTML, puede ser necesario anular los elementos predeterminados min-width: auto/ min-height: autoactivados en niveles superiores.
Básicamente, un elemento flexible de nivel superior con min-width: autopuede evitar la reducción en los elementos anidados a continuación con min-width: 0.
Ejemplos:
Notas de renderizado del navegador
Chrome frente a Firefox / Edge
Desde al menos 2017, parece que Chrome está (1) volviendo a los valores predeterminados min-width: 0/ min-height: 0o (2) aplicando automáticamente los 0valores predeterminados en ciertas situaciones según un algoritmo misterioso. (Esto podría ser lo que llaman una intervención ). Como resultado, muchas personas están viendo que su diseño (especialmente las barras de desplazamiento deseadas) funciona como se espera en Chrome, pero no en Firefox / Edge. Este problema se trata con más detalle aquí: discrepancia de reducción flexible entre Firefox y Chrome
IE11
Como se señala en la especificación, el auto valor de las propiedades min-widthy min-heightes "nuevo". Esto significa que algunos navegadores aún pueden representar un 0valor por defecto, porque implementaron el diseño flexible antes de que el valor se actualizara y porque 0es el valor inicial para min-widthy min-heighten CSS 2.1 . Uno de esos navegadores es IE11. Otros navegadores se han actualizado al autovalor más nuevo como se define en la especificación de flexbox .
Demo revisada
.container {
display: flex;
}
.col {
min-height: 200px;
padding: 30px;
word-break: break-word
}
.col1 {
flex: 1;
background: orange;
font-size: 80px;
min-width: 0; /* NEW */
}
.col2 {
flex: 3;
background: yellow
}
.col3 {
flex: 4;
background: skyblue
}
.col4 {
flex: 4;
background: red
}
<div class="container">
<div class="col col1">Lorem ipsum dolor</div>
<div class="col col2">Lorem ipsum dolor</div>
<div class="col col3">Lorem ipsum dolor</div>
<div class="col col4">Lorem ipsum dolor</div>
</div>
jsFiddle