Tengo un sitio con muchas páginas y diferentes imágenes de fondo, y las visualizo desde CSS como:
body.page-8 {
background: url("../img/pic.jpg") no-repeat scroll center top #000;
background-size: cover;
}
Sin embargo, quiero mostrar diferentes imágenes (pantalla completa) en una página usando <img>
elementos, y quiero que tengan las mismas propiedades que la background-image: cover;
propiedad anterior (las imágenes no pueden mostrarse desde CSS, deben mostrarse desde el documento HTML).
Normalmente uso:
div.mydiv img {
width: 100%;
}
O:
div.mydiv img {
width: auto;
}
para hacer que la imagen sea completa y receptiva. Sin embargo, la imagen se reduce demasiado ( width: 100%
) cuando la pantalla se estrecha demasiado y muestra el color de fondo del cuerpo en la pantalla inferior. El otro método, width: auto;
solo hace que la imagen sea de tamaño completo y no responde al tamaño de la pantalla.
¿Hay alguna manera de mostrar la imagen de la misma manera que lo background-size: cover
hace?
Respuestas:
Solución n. ° 1: la propiedad de ajuste de objeto ( carece de compatibilidad con IE )
Solo ponte
object-fit: cover;
en el img.Ver MDN - con respecto a
object-fit: cover
:Además, vea esta demostración de Codepen que compara
object-fit: cover
aplicado a una imagen conbackground-size: cover
aplicado a una imagen de fondoSolución # 2 - Reemplace el img con una imagen de fondo con css
fuente
En realidad, hay una solución css bastante simple que incluso funciona en IE8:
fuente
Suponiendo que puede hacer arreglos para tener un elemento contenedor que desea llenar, esto parece funcionar, pero se siente un poco difícil. En esencia, solo lo uso
min/max-width/height
en un área más grande y luego escalo esa área a las dimensiones originales.fuente
Encontré una solución simple para emular tanto la cubierta como la contención, que es CSS puro, y funciona para contenedores con dimensiones dinámicas, y tampoco hace ninguna restricción en la relación de imagen.
Tenga en cuenta que si no necesita admitir IE o Edge antes de las 16, es mejor que use el ajuste de objetos.
tamaño de fondo: cubierta
Aquí se usa el 1000% en caso de que el tamaño natural de la imagen sea mayor que el tamaño que se muestra. Por ejemplo, si la imagen es 500x500, pero el contenedor es solo 200x200. Con esta solución, la imagen se redimensionará a 2000x2000 (debido al ancho mínimo / alto mínimo), luego se reducirá a 200x200 (debido a
transform: scale(0.1)
).El factor x10 se puede reemplazar por x100 o x1000, pero generalmente no es ideal tener una imagen de 2000x2000 renderizada en un div de 20x20. :)
tamaño de fondo: contener
Siguiendo el mismo principio, también puede usarlo para emular
background-size: contain
:fuente
transform
en muchas de las respuestasNo , no puedes entenderlo bien,
background-size:cover
pero ...Este enfoque es bastante cercano: utiliza JavaScript para determinar si la imagen es horizontal o vertical, y aplica estilos en consecuencia.
JS
CSS
http://jsfiddle.net/b3PbT/
fuente
Necesitaba emular
background-size: contain
, pero no pude usarobject-fit
debido a la falta de soporte. Mis imágenes tenían contenedores con dimensiones definidas y esto terminó funcionando para mí:fuente
min-height: 100%; max-height:100%;
y obtener el equivalente a background-size: cover;min-height: 100%; max-height:100%;
no conservaría la relación de aspecto, por lo que no es exactamente un equivalente.Intente configurar ambos
min-height
ymin-width
, condisplay:block
:( violín )
Siempre que el elemento que contiene su imagen sea
position:relative
oposition:absolute
, la imagen cubrirá el contenedor. Sin embargo, no estará centrado.Puede centrar fácilmente la imagen si sabe si se desbordará horizontalmente (conjunto
margin-left:-50%
) o verticalmente (conjuntomargin-top:-50%
). Es posible utilizar consultas de medios CSS (y algunas matemáticas) para resolverlo.fuente
Con CSS puedes simular
object-fit: [cover|contain];
. Es usotransform
y[max|min]-[width|height]
. No es perfecto Eso no funciona en un caso: si la imagen es más ancha y más corta que el contenedor.fuente
Lo que podría hacer es usar el atributo 'estilo' para agregar la imagen de fondo al elemento, de esa manera aún llamará a la imagen en el HTML pero aún podrá usar el comportamiento de tamaño de fondo: cubierta css:
HTML:
CSS:
Así es como agrego el comportamiento background-size: cover a elementos que necesito cargar dinámicamente en HTML. A continuación, puede utilizar impresionantes clases de CSS como background-position: center. auge
fuente
Para IE también debe incluir la segunda línea - ancho: 100%;
fuente
no tengo permitido 'agregar un comentario' al hacerlo, pero sí, lo que hizo Eru Penkman es bastante acertado, para que quede como fondo, todo lo que necesitas hacer es cambiar
A
fuente
Sé que esto es antiguo, sin embargo, muchas soluciones que veo arriba tienen un problema con la imagen / video que es demasiado grande para el contenedor, por lo que en realidad no actúa como una cubierta de tamaño de fondo. Sin embargo, decidí hacer "clases de utilidad" para que funcionara con imágenes y videos. Simplemente le da al contenedor la clase .media-cover-wrapper y el elemento multimedia en sí mismo la clase .media-cover
Entonces tienes el siguiente jQuery:
Al llamarlo, asegúrese de cambiar el tamaño de la página:
Luego el siguiente CSS:
Sí, puede requerir jQuery pero responde bastante bien y actúa exactamente como el tamaño de fondo: cubierta y puede usarlo en imágenes y / o videos para obtener ese valor adicional de SEO.
fuente
Podemos adoptar el enfoque ZOOM. Podemos suponer que un máximo del 30% (o más hasta el 100%) puede ser el efecto de zoom si la altura o el ancho de la imagen de aspecto es menor que la altura O el ancho deseado. Podemos ocultar el resto del área no necesaria con desbordamiento: oculto.
Esto ajustará las imágenes con diferentes anchuras o alturas.
fuente
encontré los mismos symptops exactos. arriba funcionó para mí.
fuente