Encontré este hilo: ¿Cómo se estira una imagen para llenar un <div> mientras se mantiene la relación de aspecto de la imagen? - eso no es del todo lo que quiero.
Tengo un div con cierto tamaño y una imagen dentro de él. Quiero siempre llene el siguiente div con la imagen sin tener en cuenta si la imagen es horizontal o vertical. Y no importa si la imagen está cortada (el div en sí tiene un desbordamiento oculto).
Entonces, si la imagen es retrato, quiero widthque sea 100%y height:autoasí se mantiene en proporción. Si la imagen es apaisada quiero heightque sea 100%y width to beauto`. Suena complicado, ¿verdad?
<div class="container">
<img src="some-image.jpg" alt="Could be portrait or landscape"/>
</div>
Como no sé cómo hacerlo, simplemente creé una imagen rápida de lo que quiero decir. Ni siquiera puedo describirlo adecuadamente.

Entonces, supongo que no soy el primero en preguntar esto. Sin embargo, no pude encontrar una solución a esto. Tal vez haya alguna nueva forma CSS3 de hacer esto, estoy pensando en flex-box. ¿Alguna idea? ¿Quizás es incluso más fácil de lo que espero que sea?
fuente

Respuestas:
Si entiendo correctamente lo que quiere, puede dejar los atributos de ancho y alto fuera de la imagen para mantener la relación de aspecto y usar flexbox para centrarlo por usted.
JSFiddle aquí
Probé esto con éxito en IE9, Chrome 31 y Opera 18. Pero no se probó ningún otro navegador. Como siempre, debe considerar sus requisitos particulares de soporte.
fuente
.fill img { min-height:100%; min-width: 100%; object-fit: cover; }Es un poco tarde, pero tuve el mismo problema y finalmente lo resolví con la ayuda de otra publicación de stackoverflow ( https://stackoverflow.com/a/29103071 ).
Espero que esto todavía ayude a alguien.
Ps: también funciona junto con las propiedades css max-height , max-width , min-width y min-height . Es especialmente útil con el uso de unidades de longitud como 100% o 100vh / 100vw para llenar el contenedor o toda la ventana del navegador.
fuente
object-positionregla a esta clase será útil aquí. Solo una nota al margen.Una vieja pregunta pero merece una actualización ya que ahora hay una forma.
La respuesta correcta basada en CSS es usar
object-fit: cover, que funciona comobackground-size: cover. El posicionamiento se realizará porobject-positionatributo, que por defecto es centrado.Pero no hay soporte para él en ningún navegador IE / Edge, o Android <4.4.4. Además,
object-positionno es compatible con Safari, iOS u OSX. Los polyfills existen, las imágenes de ajuste de objetos parecen dar el mejor soporte.Para obtener más detalles sobre cómo funciona la propiedad, consulte el artículo Trucos de CSS sobre
object-fitpara obtener una explicación y una demostración.fuente
Esto debería hacerlo:
fuente
Todas las respuestas a continuación tienen un ancho y alto fijos, lo que hace que la solución "no responda".
Para lograr el resultado pero mantener la imagen receptiva, utilicé lo siguiente:
HTML:
fuente
Puede lograr esto usando las propiedades de css flex. Consulte el código a continuación
fuente
Considere usar
background-size: cover(IE9 +) junto conbackground-image. Para IE8-, hay un polyfill .fuente
background-sizetiene sentido únicamente conbackground-imageespecificar también (he actualizado mi respuesta en consecuencia). No se aplica a losIMGelementos.Prueba esto:
Espero que esto ayude
fuente
Puedes usar div para lograr esto. sin etiqueta img :) espero que esto ayude.
fuente
La única forma en que logré el escenario del "mejor caso" descrito fue poniendo la imagen como fondo:
fuente
Aquí hay una respuesta con soporte para IE usando
object-fitpara que no pierda la proporciónUsando un simple fragmento de código JS para detectar si
object-fites compatible y luego reemplazar elimgpor unsvgNota: también hay algunos
object-fitpolyfills que haránobject-fitfuncionarán.Aquí están algunos ejemplos:
fuente
Aquí tienes mi ejemplo de trabajo. He usado un truco que consiste en configurar la imagen como fondo del contenedor div con background-size: cover y background-position: center center
He colocado la imagen con ancho: 100% y opacidad: 0 haciéndola invisible. Tenga en cuenta que estoy mostrando mi imagen solo porque tengo un interés especial en llamar al evento de clic del niño.
Tenga en cuenta que aunque estoy usando angular, es completamente irrelevante.
El resultado es el que defines como óptimo en todos los casos
fuente
Los valores de propiedad
object-fit: covery CSSobject-position: left centerahora abordan este problema.fuente
fuente
Simplemente corrija la altura de la imagen y proporcione ancho = automático
fuente