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 width
que sea 100%
y height:auto
así se mantiene en proporción. Si la imagen es apaisada quiero height
que sea 100%
y width to be
auto`. 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-position
regla 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-position
atributo, 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-position
no 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-fit
para 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-size
tiene sentido únicamente conbackground-image
especificar también (he actualizado mi respuesta en consecuencia). No se aplica a losIMG
elementos.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-fit
para que no pierda la proporciónUsando un simple fragmento de código JS para detectar si
object-fit
es compatible y luego reemplazar elimg
por unsvg
Nota: también hay algunos
object-fit
polyfills que haránobject-fit
funcionará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: cover
y CSSobject-position: left center
ahora abordan este problema.fuente
fuente
Simplemente corrija la altura de la imagen y proporcione ancho = automático
fuente