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 auto
valor como el valor inicial de las propiedades min-width
y min-height
definidas en CSS 2.1.
Con respecto al auto
valor ...
En un elemento flexible que overflow
está visible
en 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: auto
y min-height: auto
solo se aplican cuando overflow
es visible
.
- Si el
overflow
valor no es visible
, el valor de la propiedad de tamaño mínimo es 0
.
- Por lo tanto,
overflow: hidden
puede ser un sustituto de min-width: 0
y 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: auto
de 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: auto
activados en niveles superiores.
Básicamente, un elemento flexible de nivel superior con min-width: auto
puede 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: 0
o (2) aplicando automáticamente los 0
valores 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-width
y min-height
es "nuevo". Esto significa que algunos navegadores aún pueden representar un 0
valor por defecto, porque implementaron el diseño flexible antes de que el valor se actualizara y porque 0
es el valor inicial para min-width
y min-height
en CSS 2.1 . Uno de esos navegadores es IE11. Otros navegadores se han actualizado al auto
valor 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