¿Hay alguna manera de obtener un fondo en CSS para estirar o escalar para llenar su contenedor?
653
Para los navegadores modernos, puede lograr esto usando background-size
:
body {
background-image: url(bg.jpg);
background-size: cover;
}
cover
significa estirar la imagen vertical u horizontalmente para que nunca se repita.
Eso funcionaría para Safari 3 (o posterior), Chrome, Opera 10+, Firefox 3.6+ e Internet Explorer 9 (o posterior).
Para que funcione con versiones inferiores de Internet Explorer, pruebe estos CSS:
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale');
-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";
Use la propiedad CSS 3
background-size
:Está disponible para navegadores modernos, desde 2012.
fuente
background-size: 100% 100%;
para obtener el efecto deseado que buscaba, si eso ayuda a alguien más.cover
ycontain
en MDNNo es posible escalar una imagen con CSS, pero se puede lograr un efecto similar de la siguiente manera.
Use este marcado:
con el siguiente CSS:
y deberías haber terminado!
Para escalar la imagen para que tenga "sangrado completo" y mantener la relación de aspecto, puede hacer esto en su lugar:
¡Funciona bastante bien! Sin embargo, si se recorta una dimensión, se recortará en un solo lado de la imagen, en lugar de recortarse de manera uniforme en ambos lados (y centrada). Lo probé en Firefox, Webkit e Internet Explorer 8.
fuente
margin: 0 auto
activado.stretch
. Solo configurandowidth
oheight
, la relación de aspecto permanece igual. Intente usarmax-width
ymax-height
para limitar el factor de zoom ...Utilice el atributo de tamaño de fondo en CSS3:
EDITAR: Modernizr admite la detección de soporte de tamaño de fondo . Puede usar una solución de JavaScript escrita para trabajar, sin embargo, la necesita y cargarla dinámicamente cuando no hay soporte. Esto mantendrá el código mantenible sin recurrir a intrusivos hacks CSS para ciertos navegadores.
Personalmente utilizo un script para tratarlo usando jQuery, es una adaptación de imgsizer . Como la mayoría de los diseños que uso ahora usan ancho% 's para diseños de fluidos a través de dispositivos, hay una ligera adaptación a uno de los bucles (teniendo en cuenta los tamaños que no siempre son del 100%):
EDITAR: También te puede interesar jQuery CSS3 Finaliz [s] e .
fuente
Prueba el tamaño de fondo del artículo . Si usa todo lo siguiente, funcionará en la mayoría de los navegadores, excepto Internet Explorer.
fuente
preserveAspectRatio="none"
dentro del SVG. Más información sobre esto aquí . Demostración aquí .No actualmente. Estará disponible en CSS 3 , pero llevará algún tiempo hasta que se implemente en la mayoría de los navegadores.
fuente
Trabaja en:
Además, puede probar esto para una solución ie
Crédito a este artículo por Chris Coyier http://css-tricks.com/perfect-full-page-background-image/
fuente
background-size: cover
, excepto con prefixeds navegador y una solución IEEn una palabra: no. La única forma de estirar una imagen es con el<img>
etiqueta. Tendrás que ser creativo.Esto solía ser cierto en 2008, cuando se escribió la respuesta. Hoy en día, los navegadores modernos admiten lo
background-size
que resuelve este problema. Tenga en cuenta que IE8 no lo admite.fuente
Definir "estirar y escalar" ...
Si tiene un formato de mapa de bits, generalmente no es bueno (gráficamente hablando) estirarlo y tirar de él. Puede usar patrones repetibles para dar la ilusión del mismo efecto. Por ejemplo, si tiene un degradado que se aclara hacia la parte inferior de la página, usaría un gráfico de un solo píxel de ancho y la misma altura que su contenedor (o preferiblemente más grande para tener en cuenta la escala) y luego lo colocará en mosaico página. Del mismo modo, si el gradiente corriera por la página, tendría un píxel de alto y más ancho que su contenedor y se repetiría por la página.
Normalmente, para dar la ilusión de que se estira para llenar el contenedor cuando el contenedor crece o se contrae, hace que la imagen sea más grande que el contenedor. Cualquier superposición no se mostraría fuera de los límites del contenedor.
Si desea un efecto que se base en algo así como una caja con bordes curvos, entonces pegaría el lado izquierdo de su caja al lado izquierdo de su contenedor con suficiente superposición que (dentro de lo razonable) no importa cuán grande sea el contenedor, nunca se queda sin fondo y luego coloca una imagen del lado derecho de la caja con bordes curvos y la coloca a la derecha del contenedor. Por lo tanto, a medida que el contenedor se encoge o crece, el efecto de caja curva parece encogerse o crecer con él, de hecho no lo hace, pero da la ilusión de que es lo que está sucediendo.
En cuanto a hacer que la imagen se reduzca y crezca con el contenedor, necesitará usar algunos trucos de capas para que la imagen parezca funcionar como fondo y algunos JavaScript para cambiar su tamaño con el contenedor. No hay una forma actual de hacer esto con CSS ...
Si está utilizando gráficos vectoriales, me temo que está fuera de mi ámbito de especialización.
fuente
Esto es lo que he hecho de eso. En la clase de estiramiento, simplemente cambié la altura a
auto
. De esta manera, la imagen de fondo siempre tiene el mismo tamaño que el ancho de la pantalla y la altura siempre tendrá el tamaño correcto.fuente
Agrega una
background-attachment
línea:fuente
Me gustaría señalar que esto es equivalente a hacer:
fuente
Otra gran solución para esto es el Backstretch de Srobbin que se puede aplicar al cuerpo o a cualquier elemento de la página: http://srobbin.com/jquery-plugins/backstretch/
fuente
Prueba esto
http://jsfiddle.net/5LZ55/4/
fuente
Un consejo adicional para el truco de SolidSmile es escalar (el cambio de tamaño proporcional) estableciendo un ancho y usando auto para la altura.
Ex:
fuente
Use la
border-image : yourimage
propiedad para configurar su imagen y escalarla a todo el borde de su pantalla o ventana.fuente