Tengo una imagen y quiero establecer un ancho y alto específicos (en píxeles)
Pero si configuro el ancho y la altura usando css ( width:150px; height:100px
), la imagen se estirará y puede ser fea.
¿Cómo rellenar imágenes a un tamaño específico usando CSS y sin estirarlo ?
Ejemplo de imagen de relleno y estiramiento:
Imagen original:
Imagen estirada:
Imagen llena:
Tenga en cuenta que en el ejemplo de la imagen Rellena arriba: primero, la imagen se redimensiona a 150x255 (relación de aspecto mantenida), y luego, se recorta a 150x100.
width
yheight
debería ajustar en consecuenciaRespuestas:
Si desea utilizar la imagen como fondo CSS, existe una solución elegante. Simplemente use
cover
ocontain
en labackground-size
propiedad CSS3.Mientras que
cover
le dará una imagen ampliada,contain
le dará una imagen reducida. Ambos preservarán la relación de aspecto de píxeles.http://jsfiddle.net/uTHqs/ (usando portada)
http://jsfiddle.net/HZ2FT/ (usando contener)
Este enfoque tiene la ventaja de ser amigable con las pantallas Retina según la guía rápida de Thomas Fuchs.
Vale la pena mencionar que la compatibilidad del navegador para ambos atributos excluye IE6-8.
fuente
background-repeat: no-repeat;
para? Si la imagen cubre su contenedor, no se repetirá de todos modos.Puede usar la propiedad css
object-fit
.Ver ejemplo aquí
Hay un polyfill para IE: https://github.com/anselmh/object-fit
fuente
img
etiquetas (no solo con elbackground-image
método descrito en la respuesta anterior). Gracias :)object-fit
no es compatible con muchos navegadores .background-size
rara vez es una solución viable en mis proyectos. Es menos probable que reciba algún beneficio de SEO y no puede proporcionar una etiqueta ALT, título, etc. para acompañar la imagen donde desee proporcionar contexto adicional para lectores de pantalla.object-fit: cover;
hace. Muchas graciasMejora en la respuesta anterior por @afonsoduarte ( NO la aceptada) .
en caso de que estés usando bootstrap
Hay tres diferencias:
Proporcionando
width:100%
en el estilo.Esto es útil si está utilizando bootstrap y desea que la imagen estire todo el ancho disponible.
La especificación de la
height
propiedad es opcional. Puede eliminarla / conservarla según lo necesitePor cierto, NO es necesario proporcionar los atributos
height
ywidth
en elimage
elemento porque el estilo los anulará.entonces es suficiente escribir algo como esto.
fuente
La única forma real es tener un contenedor alrededor de su imagen y usar
overflow:hidden
:HTML
CSS
Es un dolor en CSS hacer lo que quieres y centrar la imagen, hay una solución rápida en jquery como:
http://jsfiddle.net/x86Q7/2/
fuente
margin-top
imagen por ejemplo50px
(ver esto: jsfiddle.net/x86Q7/1 ), pero ¿Cómo recortarla del centro real ? (¿Sin jQuery?)Solución CSS sin JS y sin imagen de fondo:
Método 1 "margen automático" (IE8 + - ¡NO FF!):
http://jsfiddle.net/5xjr05dt/
Método 2 "transformar" (IE9 +):
http://jsfiddle.net/5xjr05dt/1/
El método 2 puede usarse para centrar una imagen en un contenedor de ancho / alto fijo. Ambos pueden desbordarse, y si la imagen es más pequeña que el contenedor, seguirá estando centrada.
http://jsfiddle.net/5xjr05dt/3/
Método 3 "doble envoltura" (IE8 + - ¡NO FF!):
http://jsfiddle.net/5xjr05dt/5/
Método 4 "doble envoltura Y doble imagen" (IE8 +):
http://jsfiddle.net/5xjr05dt/26/
Los métodos 1 y 3 no parecen funcionar con Firefox
fuente
Otra solución es colocar la imagen en un contenedor con el ancho y la altura deseados. Con este método, no tendría que establecer la imagen como imagen de fondo de un elemento.
Luego puede hacer esto con una
img
etiqueta y simplemente establecer un ancho máximo y una altura máxima en el elemento.CSS:
HTML:
Ahora, cuando cambie el tamaño del contenedor, la imagen crecerá automáticamente tanto como sea posible sin salir de los límites o distorsionarse.
Si desea centrar la imagen vertical y horizontalmente, puede cambiar el contenedor css a:
Aquí hay un JS Fiddle http://jsfiddle.net/9kUYC/2/
fuente
Partiendo de la respuesta de @Dominic Green usando jQuery, aquí hay una solución que debería funcionar para imágenes que son más anchas que altas o más altas que anchas.
http://jsfiddle.net/grZLR/4/
Probablemente haya una forma más elegante de hacer JavaScript, pero esto funciona.
fuente
Tenga cuidado si está usando un tema o algo, a menudo declaran img max-width al 100%. Tienes que hacer ninguno. Pruébalo :)
https://jsfiddle.net/o63u8sh4/
fuente
Ayudé a construir un complemento jQuery llamado Fillmore , que maneja los
background-size: cover
navegadores que lo admiten, y tiene una cuña para aquellos que no lo hacen. ¡Dale un vistazo!fuente
Creo que es bastante tarde para esta respuesta. De todos modos espero que esto ayude a alguien en el futuro. Me enfrenté al problema de posicionar las tarjetas en angular. Se muestran tarjetas para una variedad de eventos. Si el ancho de la imagen del evento es grande para la tarjeta, la imagen debe mostrarse recortando desde dos lados y una altura del 100%. Si la altura de la imagen es larga, la parte inferior de las imágenes se recorta y el ancho es del 100%. Aquí está mi solución css pura para esto:
HTML:
CSS
fuente
Intenta algo como esto: http://jsfiddle.net/D7E3E/4/
Usar un contenedor con desbordamiento: oculto
EDITAR: @Dominic Green me ganó.
fuente
Esto llenará las imágenes a un tamaño específico, sin estirarlo o sin recortarlo
fuente
Para ajustar la imagen en pantalla completa, intente esto:
repetición de fondo: redondo;
fuente
fuente