Estoy trabajando con imágenes y me encontré con un problema con las relaciones de aspecto.
<img src="big_image.jpg" width="900" height="600" alt="" />
Como puede ver, height
y width
ya están especificados. Agregué la regla CSS para las imágenes:
img {
max-width:500px;
}
Pero para big_image.jpg
, recibo width=500
y height=600
. Cómo puedo configurar las imágenes para cambiar su tamaño, manteniendo sus relaciones de aspecto.
css
image
aspect-ratio
Moonvader
fuente
fuente
<img>
que en sí misma incluye un ancho y un alto, y creo que eso significa que debe usar!important
para evitar la información de ancho / alto de la etiqueta.!important
no es necesario.He luchado bastante con este problema, y finalmente llegué a esta solución simple:
Puede ajustar el ancho y la altura para satisfacer sus necesidades, y la propiedad de ajuste de objetos hará el recorte por usted.
Salud.
fuente
object-fit
es fantástico, un gran consejo! Hay algunas buenas bibliotecas de polyfill si alguien se pregunta acerca de la compatibilidad con IE.object-fit: contain
y especificar un ancho o alto!Las soluciones a continuación permitirán ampliar y reducir la imagen , dependiendo del ancho del cuadro principal.
Todas las imágenes tienen un contenedor principal con un ancho fijo solo con fines de demostración . En producción, este será el ancho de la caja principal.
Mejores prácticas (2018):
Esta solución le dice al navegador que renderice la imagen con el ancho máximo disponible y ajuste la altura como un porcentaje de ese ancho.
Solución más elegante:
Con la solución más elegante, podrá recortar la imagen independientemente de su tamaño y agregar un color de fondo para compensar el recorte.
Para la línea que especifica el relleno, debe calcular la relación de aspecto de la imagen, por ejemplo:
Entonces, el relleno superior = 34.37%.
fuente
!important
sea necesario aquí.La propiedad de tamaño de fondo es, por ejemplo,> = 9 solamente, pero si eso está bien con usted, puede usar un div con
background-image
y establecerbackground-size: contain
:Ahora puede establecer el tamaño de su div en lo que desee y no solo la imagen mantendrá su relación de aspecto, sino que también se centralizará vertical y horizontalmente dentro del div. Simplemente no olvide establecer los tamaños en el CSS ya que los divs no tienen el atributo ancho / alto en la etiqueta.
Este enfoque es diferente a la respuesta de setecs, usando esto el área de la imagen será constante y definida por usted (dejando espacios vacíos, ya sea horizontal o verticalmente, dependiendo del tamaño div y la relación de aspecto de la imagen), mientras que la respuesta de setecs le dará un cuadro que exactamente tamaño de la imagen a escala (sin espacios vacíos).
Editar: de acuerdo con la documentación de tamaño de fondo de MDN , puede simular la propiedad de tamaño de fondo en IE8 utilizando una declaración de filtro patentada:
fuente
Muy similar a algunas respuestas aquí, pero en mi caso tenía imágenes que a veces eran más altas, a veces más grandes.
Este estilo funcionó de maravilla para asegurarse de que todas las imágenes usen todo el espacio disponible, mantengan la proporción y no los cortes:
fuente
object-fit
funciona para mí ¿funciona en todos los navegadores?.img
una clase sobre el padre o la imagen? ¿Podría hacer un jsfiddle con ejemplo para imágenes de retrato y paisaje?Elimine la propiedad "altura".
Al especificar ambos, está cambiando la relación de aspecto de la imagen. Solo configurando uno cambiará el tamaño pero conservará la relación de aspecto.
Opcionalmente, para restringir sobredimensionamientos:
fuente
height
atributo en laimg
etiqueta es que el navegador no puede calcular cuánto espacio ocupará la imagen antes de descargar la imagen. Esto hace que la página sea más lenta y puede generar más "saltos".Simplemente agregue esto a su CSS, se reducirá y expandirá automáticamente manteniendo la proporción original.
fuente
100%
lugar de un valor de píxel específico.display: block;
es innecesarioNo hay una forma estándar de preservar la relación de aspecto para imágenes con
width
,height
ymax-width
especificadas juntas.Por lo tanto, nos vemos obligados a especificar
width
yheight
evitar "saltos" en la página durante la carga de imágenes, o para usarmax-width
y no especificar dimensiones para las imágenes.Especificar solo
width
(sinheight
) generalmente no tiene mucho sentido, pero puede intentar anular elheight
atributo HTML agregando una regla comoIMG {height: auto; }
en su hoja de estilo.Ver también el error relacionado con Firefox 392261 .
fuente
!important
en CSS. Es un truco que eventualmente regresará para atormentarte.!important
aquí.Aquí hay una solución:
Esto asegurará que la imagen siempre cubra a todo el padre (escalando hacia arriba y hacia abajo) y mantenga la misma relación de aspecto.
fuente
Establezca la clase CSS de su etiqueta de contenedor de imagen en
image-class
:y agrega esto a tu hoja de estilo CSS.
fuente
Para mantener una imagen receptiva y al mismo tiempo hacer que la imagen tenga una determinada relación de aspecto, puede hacer lo siguiente:
HTML:
Y SCSS:
Esto se puede utilizar para aplicar una determinada relación de aspecto, independientemente del tamaño de la imagen que carguen los autores.
Gracias a @Kseso en http://codepen.io/Kseso/pen/bfdhg . Consulte esta URL para obtener más proporciones y un ejemplo de trabajo.
fuente
border-radius
. Pero desafortunadamente, recorta la imagen y no lo hace tan bien al hacer un borde para la imagen en el div por lo que he intentado.Para forzar una imagen que se ajuste a un tamaño exacto, no necesita escribir demasiados códigos. Es tan simple
fuente
https://jsfiddle.net/sot2qgj6/3/
Aquí está la respuesta si desea poner una imagen con un porcentaje fijo de ancho , pero no píxeles fijos de ancho .
Y esto será útil cuando se trata de diferentes tamaños de pantalla .
Los trucos son
padding-top
para establecer la altura desde el ancho.position: absolute
para poner la imagen en el espacio de relleno.max-height and max-width
para asegurarse de que la imagen no superará el elemento principal.display:block and margin: auto
para centrar la imagen.También he comentado la mayoría de los trucos dentro del violín.
También encuentro otras formas de hacer que esto suceda. No habrá una imagen real en html, por lo que personalmente busco la respuesta principal cuando necesito el elemento "img" en html.
CSS simple utilizando el fondo http://jsfiddle.net/4660s79h/2/
imagen de fondo con la palabra en la parte superior http://jsfiddle.net/4660s79h/1/
El concepto para utilizar la posición absoluta es de aquí http://www.w3schools.com/howto/howto_css_aspect_ratio.asp
fuente
Puedes usar esto:
fuente
Puedes crear un div como este:
Y usa este CSS para darle estilo:
fuente
Sugeriría un enfoque receptivo, la mejor práctica sería usar las unidades de Viewport y los atributos min / max de la siguiente manera:
fuente
Esto hará que la imagen se reduzca si es demasiado grande para el área especificada (como inconveniente, no agrandará la imagen).
La solución de setec está bien para "Shrink to Fit" en modo automático. Pero, para EXPANDIR de manera óptima para que se ajuste al modo 'automático', primero debe colocar la imagen recibida en una identificación temporal. Compruebe si se puede expandir en altura o en ancho (dependiendo de su relación de aspecto v / s la relación de aspecto de su bloque de pantalla),
Este enfoque es útil cuando las imágenes recibidas son más pequeñas que el cuadro de visualización. Debe guardarlos en su servidor en tamaño original pequeño en lugar de su versión ampliada para llenar su caja de visualización más grande para ahorrar en tamaño y ancho de banda.
fuente
fuente
¿Qué tal usar un pseudo elemento para la alineación vertical? Este código menos es para un carrusel, pero supongo que funciona en todos los contenedores de tamaño fijo. Mantendrá la relación de aspecto e insertará @ barras gris oscuro en la parte superior / inferior o izquierda / escritura para la dimensión más corta. Mientras tanto, la imagen está centrada horizontalmente por la alineación de texto y verticalmente por el pseudo elemento.
fuente
Presentación a pantalla completa:
Tenga en cuenta que si la altura del puerto de vista es mayor que la imagen, la imagen se degradará naturalmente en relación con la diferencia.
fuente
Creo, finalmente, que esta es la mejor solución, fácil y simple :
fuente