CSS: 100% de ancho o alto manteniendo la relación de aspecto?
174
Actualmente, con ESTILO, puedo usar width: 100%y autoen la altura (o viceversa), pero todavía no puedo restringir la imagen a una posición específica, ya sea demasiado ancha o demasiado alta, respectivamente.
¿Puedes publicar un enlace o una captura de pantalla para mostrar un ejemplo del problema?
Mauro
Respuestas:
138
Si solo define una dimensión en una imagen, la relación de aspecto de la imagen siempre se conservará.
¿El problema es que la imagen es más grande / más alta de lo que prefieres?
Puede ponerlo dentro de un DIV que esté configurado a la altura / anchura máxima que desea para la imagen, y luego configurar el desbordamiento: oculto. Eso recortaría cualquier cosa más allá de lo que quieres.
Si una imagen es 100% ancha y alta: automática y cree que es demasiado alta, eso se debe específicamente a que se conserva la relación de aspecto. Tendrá que recortar o cambiar la relación de aspecto.
¡Proporcione más información sobre lo que está tratando de lograr específicamente y trataré de ayudarlo más!
--- EDICION BASADA EN COMENTARIOS ---
¿Está familiarizado con las propiedades max-width y max-height ? Siempre puedes establecerlos en su lugar. Si no establece ningún mínimo y establece una altura y un ancho máximos, su imagen no se verá distorsionada (se conservará la relación de aspecto) y no será más grande que la dimensión que sea más larga y alcance su máximo.
si la imagen es más alta que ancha, usaría height = 100% y width = auto, si la imagen es más ancha que tall, usaría width = 100%, height = auto. simplemente nunca sé cuál es el caso? recortar por altura / ancho máximo funcionaría, pero si hay una manera de no hacerlo, prefiero usar eso ...
Weston Watson
2
Bueno, ¿estás diseñando un diseño fluido o de ancho fijo? Si está en un diseño de ancho fijo, siempre puede establecer su ancho al 100% y la imagen se escalará adecuadamente, pero puede ser muy alta. ¿Está tratando de colocar una imagen en un bloque de texto, o usarla como un banner o como fondo? Si pudieras mostrar la página donde planeas usarla o describir el contexto, podría ayudarte más. Ver ediciones arriba también.
Andrew
El uso de max-height en mi img me permitió restringir las imágenes manteniendo su relación de aspecto
norteamericano
2
object-fit¿es inútil?
LeeGee
77
Algunos años más tarde, buscando el mismo requisito, encontré una opción de CSS usando background-size.
Se supone que funciona en navegadores modernos (IE9 +).
#container{
width:100px;/*or 70%, or what you want*/
height:200px;/*or 70%, or what you want*/
background-size: cover;
background-position: center;
background-repeat:no-repeat;}
la solución ideal, que lamentablemente no es compatible con IE8 :(
japrescott
Esta es la solución ideal, pero si lo hace en carruseles, hace que las imágenes estén en blanco por un segundo después de cada diapositiva.
kloddant
58
Al establecer la max-widthpropiedad CSS en 100%, una imagen llenará el ancho de su elemento primario, pero no se hará más grande que su tamaño real, preservando así la resolución.
Al establecer la heightpropiedad para automantener la relación de aspecto de la imagen, el uso de esta técnica permite anular la altura estática y permite que la imagen se flexione proporcionalmente en todas las direcciones.
Gracias por recordarme object-fit. Exactamente lo que necesitaba.
Ash Clarke
55
Esta es una solución ideal, pero desafortunadamente object-fitno es compatible con ninguna versión de IE ni Edge a partir del 28 de marzo de 2017.
Simon G
2
A partir de marzo de 2019, esta característica tiene un 90% de soporte, por lo que esta realmente debería considerarse la respuesta correcta.
Hampus Ahlgren
Además, tenga en cuenta que object-fit: containy object-fit: coverno le gusta widthal 100%: debe usar unidades de concreto comopx
FlameStorm el
Traté object-fitcon max-widthy max-heightcomo se usa en otras respuestas, pero eso no funcionó. esto funciona perfectamente para tamaños de imagen aleatorios incluso con widthyheight 100%
Halfacht
27
Tuve el mismo problema. El problema para mí fue que la propiedad de altura también ya estaba definida en otra parte, la arreglé así:
Exactamente lo que estaba buscando. Un millón de gracias.
London Smith
Perfecto donde el tamaño de la imagen puede ser más pequeño o más grande que el div principal, y se redimensionará al centro perfecto con el ancho máximo O la altura máxima. No tiene que usar la imagen como fondo, ya que solo se sobrecargará al padre si se establece en "cubrir".
votó por la primera parte. la segunda parte no funcionó para mí ... :(
Vikas Bansal
Solo un problema: si la imagen es más grande que el 100% del contenedor, se derramará y requerirá barras de desplazamiento o recorte. No estoy seguro de cómo lograr lo mismo y seguir limitando el tamaño máximo al contenedor. Si establece max-width y height, ya no conserva la relación de aspecto.
JustAMartin
5
Una de las respuestas incluye el tamaño de fondo: contener declaración css que me gusta mucho porque es una declaración directa de lo que desea hacer y el navegador simplemente lo hace.
Desafortunadamente, tarde o temprano necesitarás aplicar una sombra que desafortunadamente no funcionará bien con las soluciones de imágenes de fondo.
Entonces, digamos que tiene un contenedor que responde pero tiene límites bien definidos para el ancho y la altura mínima y máxima.
Y el contenedor tiene una imagen que debe tener en cuenta los píxeles de la altura del contenedor para evitar obtener una imagen muy alta que se desborde o se recorte.
El img también debe definir un ancho máximo del 100% para primero permitir que se representen anchos más pequeños y, en segundo lugar, basarse en un porcentaje, lo que lo hace paramétrico.
Gracias por estas soluciones y enlace jsdfiddle. En realidad, esto funcionó para mi galería de imágenes de reacción, donde uso ambas: imágenes con mayor altura e imágenes con mayor ancho. :)
Eugenijus S.
4
Lo uso para un contenedor rectangular con altura y ancho fijos, pero con imágenes de diferentes tamaños.
Es mejor usar auto en la dimensión que debe respetar la relación de aspecto. Si no configura la otra propiedad en auto, la mayoría de los navegadores en la actualidad supondrán que desea respetar la relación de aspecto, pero no todos (IE10 en Windows Phone 8 no lo hace, por ejemplo)
Esta es una solución muy sencilla que se me ocurrió después de seguir el enlace de conca y mirar el tamaño del fondo. Explota la imagen y luego la coloca centrada en el contenedor exterior sin escalarla.
Aunque esto no es correcto, ya que utiliza la anulación importante en la altura, si está utilizando un CMS como WordPress que establece la altura y el ancho para usted, esto funciona bien.
Use JQuery más o menos, ya que CSS es un concepto erróneo general (las innumerables preguntas y discusiones aquí sobre objetivos de diseño simples lo demuestran).
Con CSS no es posible hacer lo que parece desear: la imagen tendrá un ancho del 100%, pero si este ancho resulta en una altura que es demasiado grande, se aplicará una altura máxima, y por supuesto, las proporciones correctas serán Preservado.
Respuestas:
Si solo define una dimensión en una imagen, la relación de aspecto de la imagen siempre se conservará.
¿El problema es que la imagen es más grande / más alta de lo que prefieres?
Puede ponerlo dentro de un DIV que esté configurado a la altura / anchura máxima que desea para la imagen, y luego configurar el desbordamiento: oculto. Eso recortaría cualquier cosa más allá de lo que quieres.
Si una imagen es 100% ancha y alta: automática y cree que es demasiado alta, eso se debe específicamente a que se conserva la relación de aspecto. Tendrá que recortar o cambiar la relación de aspecto.
¡Proporcione más información sobre lo que está tratando de lograr específicamente y trataré de ayudarlo más!
--- EDICION BASADA EN COMENTARIOS ---
¿Está familiarizado con las propiedades max-width y max-height ? Siempre puedes establecerlos en su lugar. Si no establece ningún mínimo y establece una altura y un ancho máximos, su imagen no se verá distorsionada (se conservará la relación de aspecto) y no será más grande que la dimensión que sea más larga y alcance su máximo.
fuente
object-fit
¿es inútil?Algunos años más tarde, buscando el mismo requisito, encontré una opción de CSS usando background-size.
Se supone que funciona en navegadores modernos (IE9 +).
Y el estilo:
La referencia: http://www.w3schools.com/cssref/css3_pr_background-size.asp
Y la demostración: http://www.w3schools.com/cssref/playit.asp?filename=playcss_background-size
fuente
Al establecer la
max-width
propiedad CSS en100%
, una imagen llenará el ancho de su elemento primario, pero no se hará más grande que su tamaño real, preservando así la resolución.Al establecer la
height
propiedad paraauto
mantener la relación de aspecto de la imagen, el uso de esta técnica permite anular la altura estática y permite que la imagen se flexione proporcionalmente en todas las direcciones.fuente
height
deauto
causa el reflujo cuando la imagen flotaSolución de trabajo simple y elegante:
fuente
object-fit
. Exactamente lo que necesitaba.object-fit
no es compatible con ninguna versión de IE ni Edge a partir del 28 de marzo de 2017.object-fit: contain
yobject-fit: cover
no le gustawidth
al 100%: debe usar unidades de concreto comopx
object-fit
conmax-width
ymax-height
como se usa en otras respuestas, pero eso no funcionó. esto funciona perfectamente para tamaños de imagen aleatorios incluso conwidth
yheight 100%
Tuve el mismo problema. El problema para mí fue que la propiedad de altura también ya estaba definida en otra parte, la arreglé así:
fuente
Solución simple:
Por cierto, si desea centrarlo en un contenedor div principal, puede agregar esas propiedades css:
Realmente debería funcionar como se esperaba :)
fuente
Una de las respuestas incluye el tamaño de fondo: contener declaración css que me gusta mucho porque es una declaración directa de lo que desea hacer y el navegador simplemente lo hace.
Desafortunadamente, tarde o temprano necesitarás aplicar una sombra que desafortunadamente no funcionará bien con las soluciones de imágenes de fondo.
Entonces, digamos que tiene un contenedor que responde pero tiene límites bien definidos para el ancho y la altura mínima y máxima.
Y el contenedor tiene una imagen que debe tener en cuenta los píxeles de la altura del contenedor para evitar obtener una imagen muy alta que se desborde o se recorte.
El img también debe definir un ancho máximo del 100% para primero permitir que se representen anchos más pequeños y, en segundo lugar, basarse en un porcentaje, lo que lo hace paramétrico.
Tenga en cuenta que tiene una bonita sombra;)
Disfruta de un ejemplo en vivo en este violín: http://jsfiddle.net/pligor/gx8qthqL/2/
fuente
Lo uso para un contenedor rectangular con altura y ancho fijos, pero con imágenes de diferentes tamaños.
fuente
Es mejor usar auto en la dimensión que debe respetar la relación de aspecto. Si no configura la otra propiedad en auto, la mayoría de los navegadores en la actualidad supondrán que desea respetar la relación de aspecto, pero no todos (IE10 en Windows Phone 8 no lo hace, por ejemplo)
fuente
Esta es una solución muy sencilla que se me ocurrió después de seguir el enlace de conca y mirar el tamaño del fondo. Explota la imagen y luego la coloca centrada en el contenedor exterior sin escalarla.
fuente
background-size: contain;
para ajustar la imagen en un fondo.No para saltar a un viejo problema, pero ...
Aunque esto no es correcto, ya que utiliza la anulación importante en la altura, si está utilizando un CMS como WordPress que establece la altura y el ancho para usted, esto funciona bien.
fuente
Hoy en día se puede utilizar
vw
yvh
unidades, que representan 1% del v iewport es w idth y h ocho respectivamente.https://css-tricks.com/fun-viewport-units/
Así por ejemplo:
... hará que la imagen sea lo más ancha posible, manteniendo la relación de aspecto, pero sin ser más ancha o superior al 100% de la ventana gráfica.
fuente
Use JQuery más o menos, ya que CSS es un concepto erróneo general (las innumerables preguntas y discusiones aquí sobre objetivos de diseño simples lo demuestran).
Con CSS no es posible hacer lo que parece desear: la imagen tendrá un ancho del 100%, pero si este ancho resulta en una altura que es demasiado grande, se aplicará una altura máxima, y por supuesto, las proporciones correctas serán Preservado.
fuente
Creo que esto es lo que estabas buscando, lo estaba buscando yo mismo, pero luego lo recordé nuevamente porque encontré el código.
La evolución digital está en camino.
fuente