sunil kumar
Estoy usando una etiqueta img de HTML para mostrar una foto en nuestra aplicación. Establecí su atributo de alto y ancho en 64. Necesito mostrar cualquier resolución de imagen (por ejemplo, 256×256, 1024×768, 500×400, 205×246, etc.) como 64×64. Pero al establecer los atributos de alto y ancho de una etiqueta img en 64, no se mantiene la relación de aspecto, por lo que la imagen se ve distorsionada.
Para su referencia, mi código exacto es:
<img src="https://stackoverflow.com/questions/12912048/Runtime Path to photo" border="1" height="64" width="64">
Nabo
No establezca la altura Y el ancho. Use uno u otro y se mantendrá la relación de aspecto correcta.
.widthSet {
max-width: 64px;
}
.heightSet {
max-height: 64px;
}
<img src="https://picsum.photos/200/250?grayscale" />
<img src="https://picsum.photos/200/250?grayscale" width="64" />
<img src="https://picsum.photos/200/250?grayscale" height="64" />
<img src="https://picsum.photos/200/250?grayscale" class="widthSet" />
<img src="https://picsum.photos/200/250?grayscale" class="heightSet" />
Otra opción que le da más flexibilidad es usar object-fit
. Esto permite establecer dimensiones fijas para el img
mientras que la imagen en sí se puede presentar de varias maneras diferentes dentro de el área definida.
img {
width: 64px;
height: 64px;
border: 1px solid hotpink;
}
.fill {
object-fit: fill;
}
.contain {
object-fit: contain;
}
.cover {
object-fit: cover;
}
.scale-down {
object-fit: scale-down;
}
<img src="https://picsum.photos/200/500?grayscale" class="fill" />
<img src="https://picsum.photos/200/500?grayscale" class="contain" />
<img src="https://picsum.photos/200/500?grayscale" class="cover" />
<img src="https://picsum.photos/200/500?grayscale" class="scale-down" />
-
… pero ¿qué sucede si desea corregir tanto la altura como el ancho?
– fatuhoku
7 sep 2016 a las 15:41
-
Esto no tiene sentido para aplicaciones dinámicas. No se sabe si el ancho o el alto será de 64 px, ya que depende de la proporción de la imagen. ¿Por qué es esta la respuesta votada?
– Königsberg
31 de julio de 2018 a las 8:45
-
@Mär Esta pregunta era sobre imágenes de ancho y/o altura fijos. La capacidad de respuesta no era un requisito de la pregunta.
– Nabo
31 de julio de 2018 a las 8:48
-
El tamaño es fijo, la relación de aspecto no lo es, ya que la pregunta era específicamente sobre ningún imagen de ningún resolución. Incluyendo resoluciones inferiores a 64×64.
– Königsberg
31 de julio de 2018 a las 8:50
AKHIL P
aqui esta el de muestra
div{
width: 200px;
height:200px;
border:solid
}
img{
width: 100%;
height: 100%;
object-fit: contain;
}
<div>
<img src="https://upload.wikimedia.org/wikipedia/meta/0/08/Wikipedia-logo-v2_1x.png">
</div>
-
Solo una nota para las personas que quieran usar esta solución: el ajuste de objetos no es muy compatible con los navegadores. No es compatible con IE o Edge en absoluto. Fuente: caniuse.com/#feat=object-fit
– Sean Dawson
2 de marzo de 2016 a las 2:56
-
Ahora compatible con Edge 16+, consulte la tabla: w3schools.com/css/css3_object-fit.asp
–Eddy R.
2 de febrero de 2020 a las 7:01
Establecer width
y height
de las imágenes a auto
pero limite ambos max-width
y max-height
:
img {
max-width:64px;
max-height:64px;
width:auto;
height:auto;
}
Si desea mostrar imágenes de tamaño arbitrario en los “marcos” de 64x64px, puede usar envoltorios de bloques en línea y posicionamiento para ellos, como en este violín.
-
No se escalará más allá del tamaño original, solo por debajo del tamaño original.
– Königsberg
31 de julio de 2018 a las 9:17
-
Esto funcionó DESPUÉS de que cambié el padre a “alinear elementos: centro”. El valor predeterminado de “elementos de alineación: estirar” tenía prioridad sobre “altura máxima”.
– Trade-Ideas Felipe
6 de junio de 2021 a las 17:45
lucio fonseca
<img src="https://stackoverflow.com/questions/12912048/Runtime Path to photo"
style="border: 1px solid #000; max-width:64px; max-height:64px;">
Ankit Kumar Verma
Usar object-fit: contain
en css del elemento html img
.
ex:
img {
...
object-fit: contain
...
}
Cobarde anónimo
Ninguno de los métodos enumerados escala la imagen al tamaño más grande posible que quepa en un cuadro mientras conserva la relación de aspecto deseada.
Esto no se puede hacer con la etiqueta IMG (al menos no sin un poco de JavaScript), pero se puede hacer de la siguiente manera:
<div style="background:center no-repeat url(...);background-size:contain;width:...;height:..."></div>
Hay una nueva propiedad CSS aspect-ratio
. Establece una relación de aspecto preferida para la caja, que se utilizará en el cálculo de tamaños automáticos y algunas otras funciones de diseño.
img {
width: 100%;
aspect-ratio: 16/9;
}
Es compatible con todos los navegadores bien distribuidos.
Enlace MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio
Y https://web.dev/relación-de-aspecto/ contiene buenos ejemplos del uso de esta propiedad
-
Esto es lo que vine a buscar. ¡Bendito CSS moderno!
– Brad Turek
14 oct 2021 a las 5:21
-
Esta debería ser la nueva respuesta aceptada.
– lanzamiento
23 de febrero a las 17:30
posible duplicado de HTML/IE: estirar la imagen para ajustarla, conservar la relación de aspecto
– Jonathan Reinhart
19 de febrero de 2015 a las 5:37
En 2022, probablemente desee esta respuesta: stackoverflow.com/a/66618563/8806907 la relación de aspecto es compatible con todo excepto, por ejemplo: desarrollador.mozilla.org/en-US/docs/Web/CSS/…
– lanzamiento
23 de febrero a las 17:32