Necesito hacer que esta imagen se estire al máximo tamaño posible sin desbordarla <div>
ni torcerla.
No puedo predecir la relación de aspecto de la imagen, por lo que no hay forma de saber si usarla:
<img src="url" style="width: 100%;">
o
<img src="url" style="height: 100%;">
No puedo usar ambos (es decir, estilo = "ancho: 100%; altura: 100%;") porque eso estirará la imagen para que se ajuste al <div>
.
El <div>
tiene un conjunto tamaño por porcentaje de la pantalla, que también es impredecible.
Respuestas:
Actualización 2016:
El navegador moderno se comporta mucho mejor. Todo lo que debe hacer es establecer el ancho de la imagen al 100% ( demo )
Como no conoce la relación de aspecto, tendrá que usar algunas secuencias de comandos. Así es como lo haría con jQuery ( demo ):
CSS
HTML
Guión
fuente
width:auto
oheight:auto
no afecta la visualización de sus imágenes. De hecho, de todas las propiedades que está aplicando a la imagen, solomax-width: 100%
tiene algún efecto y solo afecta la imagen del paisaje. Pero lo más importante, su respuesta no ayuda a estirar una imagen pequeña para llenar un recipiente más grande.Hay una manera mucho más fácil de hacer esto usando solo
CSS
yHTML
:HTML:
CSS:
Esto colocará su imagen como fondo y la estirará para que se ajuste al
div
tamaño sin distorsión.fuente
background-size: cover;
es la verdadera magia aquí, y es CSS3 pero tiene un soporte de navegador razonable en las versiones más recientes (ver: w3schools.com/cssref/css3_pr_background-size.asp )<div style="background-image: url('path/to/image.jpg');" class="fill"></div>
background-size: cover
no mantiene la relación de aspecto, se recortan partes de la imagen que no son proporcionales al elemento. Consulte aquíNo es una solución perfecta, pero este CSS podría ayudar. El zoom es lo que hace que este código funcione, y el factor en teoría debería ser infinito para funcionar idealmente para imágenes pequeñas, pero 2, 4 u 8 funcionan bien en la mayoría de los casos.
fuente
zoom
amor de Firefox?zoom
implementado, pero aquí está el enlace de error para referencia futura: bugzilla.mozilla.org/show_bug.cgi?id=390936Si puede, use imágenes de fondo y establezca
background-size: cover
. Esto hará que el fondo cubra todo el elemento.CSS
Si está atascado con el uso de imágenes en línea, hay algunas opciones. Primero hay
ajuste de objeto
Esta propiedad actúa sobre imágenes, videos y otros objetos similares a
background-size: cover
.CSS
Lamentablemente, el soporte del navegador no es tan bueno con IE hasta la versión 11 que no lo admite en absoluto. La siguiente opción usa jQuery
CSS + jQuery
HTML
CSS
Complemento jQuery personalizado
Usa el complemento como este
Tomará una imagen, la configurará como imagen de fondo en el elemento contenedor de la imagen y eliminará la
img
etiqueta del documento. Por último, podrías usarCSS puro
Puede usar esto como una alternativa. La imagen se escalará para cubrir su contenedor, pero no se reducirá.
CSS
Espero que esto pueda ayudar a alguien, ¡feliz codificación!
fuente
min-
y cambié awidth: 100%; height: 100%;
y trabajo! ¡Una solución increíble! +1 ¡Gracias!background-size: contain
También es útil si no desea que ninguna de las imágenes se recorte.zoom:0.001
a la solución CSS puro para reducir la escala.Gracias a CSS3
https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
IE y EDGE como siempre externos: http://caniuse.com/#feat=object-fit
fuente
Actualización 2019.
Ahora puede usar la
object-fit
propiedad css que acepta los siguientes valores:fill | contain | cover | none | scale-down
https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
Como ejemplo, podría tener un contenedor que contenga una imagen.
fuente
Eso es imposible con solo HTML y CSS, o al menos salvajemente exótico y complicado. Si está dispuesto a incluir JavaScript, aquí hay una solución con jQuery:
Eso cambiará el tamaño de la imagen para que siempre se ajuste al elemento principal, independientemente de su tamaño. Y a medida que se vincula al
$(window).resize()
evento, cuando el usuario cambia el tamaño de la ventana, la imagen se ajustará.Esto no intenta centrar la imagen en el contenedor, eso sería posible, pero supongo que eso no es lo que buscas.
fuente
Establece el ancho y la altura del
container
div externo . Luego use el siguiente estilo en img:Esto te ayudará a mantener una relación de aspecto de tu img
fuente
Si desea establecer un ancho o alto máximo (para que no sea muy grande) mientras mantiene la relación de aspecto de las imágenes, puede hacer esto:
fuente
Encontré esta pregunta buscando un problema similar. Estoy creando una página web con un diseño receptivo y el ancho de los elementos colocados en la página se establece en un porcentaje del ancho de la pantalla. La altura se establece con un valor vw.
Como estoy agregando publicaciones con PHP y un backend de base de datos, CSS puro estaba fuera de discusión. Sin embargo, encontré la solución jQuery / javascript un poco problemática, así que se me ocurrió una solución ordenada (al menos eso creo).
HTML (o php)
Al usar style = "" es posible que PHP actualice mi página dinámicamente y el estilo CSS junto con style = "" terminará en una imagen perfectamente cubierta, escalada para cubrir la etiqueta div dinámica.
fuente
Puede usar
object-fit: cover;
en el div padre.https://css-tricks.com/almanac/properties/o/object-fit/
fuente
Para hacer que esta imagen se extienda al máximo tamaño posible sin desbordarse ni torcerla.
Aplicar...
estilos a la imagen.
fuente
Usando este método, puede completar su div con la proporción variable de divs e imágenes.
jQuery:
HTML:
CSS:
fuente
Esto hizo el truco para mí
fuente
Si trabaja con la etiqueta IMG, es fácil.
Yo hice esto:
pero no encontré cómo hacerlo funcionar con #pic {background: url (img / menu.png)} Enyone? Gracias
fuente
Tuve un problema similar. Lo resolví solo con CSS .
Básicamente
Object-fit: cover
ayuda a lograr la tarea de mantener la relación de aspecto mientras coloca una imagen dentro de un div.Pero el problema era que
Object-fit: cover
no funcionaba en IE y estaba tomando 100% de ancho y 100% de altura y la relación de aspecto estaba distorsionada. En otras palabras, el efecto de zoom de la imagen no estaba allí, lo que estaba viendo en cromo.El enfoque que tomé fue colocar la imagen dentro del contenedor con absoluta y luego colocarla justo en el centro usando la combinación:
Una vez que está en el centro, le doy a la imagen,
Esto hace que la imagen obtenga el efecto de Object-fit: cover.
Aquí hay una demostración de la lógica anterior.
https://jsfiddle.net/furqan_694/s3xLe1gp/
Esta lógica funciona en todos los navegadores.
fuente
HTML:
JSFiddle
... Y si desea establecer o cambiar la imagen (usando #foo como ejemplo):
jQuery:
JavaScript:
fuente
Muchas de las soluciones que se encuentran aquí tienen algunas limitaciones: algunas no funcionan en IE (ajuste de objeto) o navegadores más antiguos, otras soluciones no escalan las imágenes (solo lo reducen), muchas soluciones no admiten el cambio de tamaño de la ventana y muchas son no genérico, espere una resolución o diseño fijo (vertical u horizontal)
Si usar javascript y jquery no es un problema, tengo esta solución basada en el código de @Tatu Ulmanen. Solucioné algunos problemas y agregué código en caso de que la imagen se cargara dinámicamente y no estuviera disponible al principio. Básicamente, la idea es tener dos reglas CSS diferentes y aplicarlas cuando sea necesario: una cuando la limitación es la altura, por lo que debemos mostrar barras negras a los lados, y la regla CSS cuando la limitación es el ancho, por lo que debemos mostrar barras negras en la parte superior / inferior.
Para un elemento HTML como:
fuente