Esto parece trivial, pero después de toda la investigación y la codificación no puedo hacer que funcione. Las condiciones son:
- Se desconoce el tamaño de la ventana del navegador. Por lo tanto, no proponga una solución que implique tamaños de píxeles absolutos.
- Se desconocen las dimensiones originales de la imagen y es posible que ya se ajusten o no a la ventana del navegador.
- La imagen está centrada vertical y horizontalmente.
- Deben conservarse las proporciones de la imagen.
- La imagen debe mostrarse en su totalidad en la ventana (sin recortar).
- No deseo que aparezcan las barras de desplazamiento (y no deberían hacerlo si la imagen encaja).
- La imagen cambia de tamaño automáticamente cuando cambian las dimensiones de la ventana, para ocupar todo el espacio disponible sin ser más grande que su tamaño original.
Básicamente lo que quiero es esto:
.fit {
max-width: 99%;
max-height: 99%;
}
<img class="fit" src="pic.png">
El problema con el código anterior es que no funciona: la imagen ocupa todo el espacio vertical que necesita al agregar una barra de desplazamiento vertical.
A mi disposición está PHP, Javascript, JQuery, pero mataría por una solución solo de CSS. No me importa si no funciona en IE.
Respuestas:
Actualización 2018-04-11
Aquí hay una solución sin Javascript y solo CSS . La imagen se centrará y cambiará de tamaño dinámicamente para adaptarse a la ventana.
La solución [otra, antigua], que usa JQuery, establece la altura del contenedor de la imagen (
body
en el ejemplo siguiente) para que lamax-height
propiedad de la imagen funcione como se esperaba. La imagen también cambiará de tamaño automáticamente cuando se cambie el tamaño de la ventana del cliente.Nota: El usuario gutierrezalex empaquetó una solución muy similar a un complemento de JQuery en esta página.
fuente
Aquí hay una solución simple de solo CSS ( JSFiddle ), funciona en todas partes, móviles e IE incluidos:
CSS 2.0:
HTML:
fuente
CSS3 introduce nuevas unidades que se miden en relación con la ventana gráfica, que es la ventana en este caso. Estos son
vh
yvw
, que miden la altura y el ancho de la ventana, respectivamente. Aquí hay una solución simple de CSS:La única advertencia a esto es que solo funciona si no hay otros elementos que contribuyan a la altura de la página.
fuente
100vh
que no deja que la imagen encaje pero97vh
funciona bien?vh
literalmente significa la altura de la vista, por lo que si cualquier otro elemento agrega altura a su página, la página completa será> 100vh. ¿Tiene sentido?.svg
archivo se procesa bien, pero cambiarle el nombre a.html
causa inexactitud): el navegador agrega automáticamente la<body>
etiqueta con el valor predeterminadomargin:8
incluso si el archivo no tiene<body>
etiqueta. Entonces la solución es agregar<style>body{margin:0}</style>
Si está dispuesto a poner un elemento contenedor alrededor de su imagen, una solución CSS pura es simple. Verá, el 99% de la altura no tiene significado cuando el elemento padre se extenderá verticalmente para contener sus hijos. El padre debe tener una altura fija, digamos ... la altura de la ventana gráfica.
HTML
CSS
Juega con el violín .
fuente
<div>
lugar de un<img>
?Cambiar el tamaño de la imagen para que se ajuste a la pantalla por el lado más largo manteniendo su relación de aspecto
width: 100vw
- el ancho de la imagen será el 100% del puerto de visualizaciónheight: auto
- la altura de la imagen se escalará proporcionalmentemax-height: 100vw
- si la altura de la imagen fuera mayor que el puerto de visualización, se reducirá para ajustarse a la pantalla, por lo que el ancho de la imagen se reducirá debido a la siguiente propiedadobject-fit: contain
- el contenido reemplazado se escala para mantener su relación de aspecto mientras se ajusta dentro del cuadro de contenido del elementoNota:
object-fit
es totalmente compatible solo desde IE 16.0fuente
object-fit
o podría usar explícitamenteobject-fit: fill;
cuál es el predeterminado .Mi regla general de CSS perezoso:
Esto puede acercar la imagen si es de baja resolución para empezar (eso tiene que ver con la calidad de la imagen y el tamaño en las dimensiones. Para centrar su imagen, también puede probar (en el CSS)
para centrar tu imagen
en tu HTML:
fuente
Sé que ya hay algunas respuestas aquí, pero esto es lo que usé:
fuente
Tenía un requisito similar y tenía que hacerlo con CSS y JavaScript básicos. No hay JQuery disponible.
Esto es lo que tengo trabajando.
Nota: No he usado el 100% para el ancho de la imagen, ya que siempre se debe considerar un poco de relleno.
fuente
img
etiquetas en elbody
de la página y establezcamax-height
en49vh
. La visualización de más de dos imágenes en el área visible se deja como ejercicio para el lector.Hazlo simple. Gracias
fuente
Creo que eso debería funcionar.
fuente
O tal vez vea esto: http://css-tricks.com/how-to-resizeable-background-image/
fuente
Sobre la base de la respuesta de @ Rohit, esto corrige los problemas marcados por Chrome, cambia el tamaño de las imágenes de manera confiable y también funciona para varias imágenes que están apiladas verticalmente, por ejemplo,
<img src="foo.jpg"><br><img src="bar.jpg"><br><img src="baz.jpg">
probablemente haya una forma más elegante de hacer esto.fuente
Use este código en su etiqueta de estilo
fuente