Cómo estirar la imagen de fondo para llenar un div

102

Quiero establecer una imagen de fondo para diferentes divs, pero mis problemas son:

  1. El tamaño de la imagen es fijo (60px).
  2. Variando el tamaño de div

¿Cómo puedo estirar la imagen de fondo para llenar todo el fondo del div?

#div2{
  background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
  height:180px;
  width:200px;
  border: 1px solid red;
}

Consulta el código aquí.

Muhammad Usman
fuente

Respuestas:

154

Añadir

background-size:100% 100%;

a su CSS debajo de la imagen de fondo.

También puede especificar dimensiones exactas, es decir:

background-size: 30px 40px;

Aquí: JSFiddle

hendos43
fuente
5
IE no es compatible con esto. ¿Qué hacer?
KarSho
9
no funciona, consulte a continuación para obtener una mejor respuesta: background-size: 100% 100%;
chriscatfr
¿Por qué se está multiplicando en lugar de estirar la imagen para que se ajuste al contenedor ?: jsfiddle.net/qdzaw/424
SearchForKnowledge
Necesitas agregarbackground-repeat: no-repeat;
Rorrik
1
hendo, tu JSFiddle ya no funciona (enlaces muertos a hootsuite), ¿puedes actualizarlo?
TylerH
71

Puedes usar:

background-size: cover;

O simplemente use una imagen de fondo grande con:

background: url('../images/teaser.jpg') no-repeat center #eee;
Ouadie
fuente
3
la cubierta no se estira, puede cortar la imagen
drdrej
No sé qué estás tratando de hacer con tu imagen de fondo, pero background-size: cover; background-position: centerllenaré el fondo divsin estirar la imagen
Ouadie
1
Funciona muy bien para imágenes en las que el estiramiento deformaría la imagen.
Stijn Van Bael
45

CSS3 moderno (recomendado para el futuro y probablemente la mejor solución)

.selector{
   background-size: cover;
   /* stretches background WITHOUT deformation so it would fill the background space,
      it may crop the image if the image's dimensions are in different ratio,
      than the element dimensions. */
}

Max. Estirar sin recortar ni deformar (puede que no llene el fondo) : background-size: contain;
Forzar estiramiento absoluto (puede causar deformación, pero no recortar) : background-size: 100% 100%;

Modo "antiguo" CSS "siempre funcionando"

Imagen de posicionamiento absoluto como primer hijo del padre (posicionado relativo) y estirarla al tamaño del padre.

HTML

<div class="selector">
   <img src="path.extension" alt="alt text">
   <!-- some other content -->
</div>

Equivalente de CSS3 background-size: cover;:

Para lograr esto dinámicamente, tendría que usar lo opuesto a la alternativa del método de contención (ver más abajo) y si necesita centrar la imagen recortada, necesitaría un JavaScript para hacerlo dinámicamente, por ejemplo, usando jQuery:

$('.selector img').each(function(){ 
   $(this).css({ 
      "left": "50%", 
      "margin-left": "-"+( $(this).width()/2 )+"px", 
      "top": "50%", 
      "margin-top": "-"+( $(this).height()/2 )+"px" 
   }); 
});

Ejemplo práctico:
css cultivo como ejemplo

Equivalente de CSS3 background-size: contain;:

Este puede ser un poco complicado: la dimensión de su fondo que desbordaría al padre tendrá CSS configurado en 100% y el otro en automático. Ejemplo práctico: CSS estirando el fondo como imagen

.selector img{
   position: absolute; top:0; left: 0;
   width: 100%;
   height: auto;
   /* -- OR -- */
   /* width: auto; 
      height: 100%; */
}

Equivalente de CSS3 background-size: 100% 100%;:

.selector img{
   position: absolute; top:0; left: 0;
   width: 100%;
   height: 100%;
}

PD: Para hacer los equivalentes de cubrir / contener de la manera "antigua" de forma completamente dinámica (por lo que no tendrá que preocuparse por los desbordamientos / proporciones), tendría que usar javascript para detectar las proporciones y establecer las dimensiones como se describe. ..

jave.web
fuente
2
Respuesta mucho más completa que la otra respuesta de "Portada". Desafortunadamente, está atascado aquí, cerca del fondo ...
BillyNair
24

Para ello, puede utilizar la background-sizepropiedad CSS3 . Escribe así:

#div2{
    background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
    -moz-background-size:100% 100%;
    -webkit-background-size:100% 100%;
    background-size:100% 100%;
    height:180px;
    width:200px;
    border: 1px solid red;
}

Compruebe esto: http://jsfiddle.net/qdzaw/1/

sandeep
fuente
1
IE no es compatible con esto. ¿Qué hacer?
KarSho
4
Para IE, use la etiqueta IMG para dar la posición absoluta con una altura y un ancho del 100%.
sandeep
20

Puedes añadir:

#div2{
    background-image:url(http://s7.static.hootsuite.com/3-0-48/images/themes/classic/streams/message-gradient.png);
    background-size: 100% 100%;
    height:180px;
    width:200px;
    border: 1px solid red;
}

Puede leer más sobre esto aquí: css3 background-size

Xella
fuente
3
Mucho mejor que la respuesta aceptada, dado que esto le muestra que background-size acepta 2 valores para ancho y alto.
krb686
background-size es un css3 y no es compatible con todos los navegadores
Mahdi Jazini
2
body{
  margin:0;
  background:url('image.png') no-repeat 50% 50% fixed;
  background-size: cover;
}
Kursat Turkay
fuente
1

usando la propiedad css:

background-size: cover;
MrBii
fuente
background-size es un css3 y no es compatible con todos los navegadores
Mahdi Jazini
1

Uso: tamaño de fondo: 100% 100%; Para hacer que la imagen de fondo se ajuste al tamaño div.

jagan reddy
fuente
Esto es lo que estaba buscando: estirar para encajar sin tener en cuenta la relación de aspecto del original. Gracias.
dgig
0

Para mantener la relación de aspecto, use background-size: 100% auto;

div {
    background-image: url('image.jpg');
    background-size: 100% auto;
    width: 150px;
    height: 300px;
}
Atul Yadav
fuente
0

Intente algo como esto:

div {
    background-image: url(../img/picture1.jpg);
    height: 30em;
    background-repeat: no-repeat;
    width: 100%;
    background-position: center;
}
Deejay
fuente