La mayoría de imágenes con dimensiones intrínsecas , es decir, un tamaño natural, como una jpegimagen. Si el tamaño especificado define tanto el ancho como el alto, el valor faltante se determina utilizando la relación intrínseca ... - ver MDN .
Pero eso no funciona como se esperaba si las imágenes que se configuran como elementos de flexión directa con el módulo de diseño de caja flexible actual Nivel 1 , hasta donde yo sé.
Vea estas discusiones y los informes de errores pueden estar relacionados:
- Flexbugs # 14 - El tamaño intrínseco de Chrome / Flexbox no se implementó correctamente.
- Error de Firefox 972595 : los contenedores flexibles deben usar "base flexible" en lugar de "ancho" para calcular los anchos intrínsecos de los elementos flexibles
- Chromium Issue 249112 : en Flexbox, permita relaciones de aspecto intrínsecas para informar el cálculo del tamaño principal.
Como solución alternativa, puede envolver cada uno <img>con a <div>o a <span>, o así.
jsFiddle
.slider {
display: flex;
}
.slider>div {
min-width: 0; /* why? see below. */
}
.slider>div>img {
max-width: 100%;
height: auto;
}
<div class="slider">
<div><img src="https://picsum.photos/400/300?image=0" /></div>
<div><img src="https://picsum.photos/400/300?image=1" /></div>
<div><img src="https://picsum.photos/400/300?image=2" /></div>
<div><img src="https://picsum.photos/400/300?image=3" /></div>
</div>
4.5 Tamaño mínimo implícito de los elementos flexibles
Para proporcionar un tamaño mínimo predeterminado más razonable para los elementos flexibles , esta especificación introduce un nuevo valor automático como el valor inicial de las propiedades min-width y min-height definidas en CSS 2.1.
Alternativamente, puede usar el tablediseño CSS en su lugar, que obtendrá resultados similares ya flexboxque funcionará en más navegadores, incluso para IE8.
jsFiddle
.slider {
display: table;
width: 100%;
table-layout: fixed;
border-collapse: collapse;
}
.slider>div {
display: table-cell;
vertical-align: top;
}
.slider>div>img {
max-width: 100%;
height: auto;
}
<div class="slider">
<div><img src="https://picsum.photos/400/300?image=0" /></div>
<div><img src="https://picsum.photos/400/300?image=1" /></div>
<div><img src="https://picsum.photos/400/300?image=2" /></div>
<div><img src="https://picsum.photos/400/300?image=3" /></div>
</div>
<div>con CSSbackground-image: url(...);background-size:contain; background-repeat:no-repeat