Comment étirer l'image d'arrière-plan pour remplir un div

102

Je souhaite définir une image d'arrière-plan sur différentes divs, mais mes problèmes sont:

  1. La taille de l'image est fixe (60px).
  2. Varier la taille de div

Comment puis-je étirer l'image d'arrière-plan pour remplir tout l'arrière-plan du 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;
}

Vérifiez le code ici.

Muhammad Usman
la source

Réponses:

154

Ajouter

background-size:100% 100%;

à votre css sous background-image.

Vous pouvez également spécifier des dimensions exactes, c'est-à-dire:

background-size: 30px 40px;

Ici: JSFiddle

hendos43
la source
5
IE ne supporte pas cela. Que faire?
KarSho
9
cela ne fonctionne pas, voir ci-dessous pour une meilleure réponse: background-size: 100% 100%;
chriscatfr
Pourquoi multiplie-t-il au lieu d'étirer l'image pour l'adapter au conteneur: jsfiddle.net/qdzaw/424
SearchForKnowledge
Vous devez ajouterbackground-repeat: no-repeat;
Rorrik
1
hendo, votre JSFiddle ne fonctionne plus (liens morts vers hootsuite), pouvez-vous le mettre à jour?
TylerH
71

Vous pouvez utiliser:

background-size: cover;

Ou utilisez simplement une grande image de fond avec:

background: url('../images/teaser.jpg') no-repeat center #eee;
Ouadie
la source
3
la couverture ne s'étire pas, elle peut couper l'image
drdrej
Je ne sais pas ce que vous essayez de faire avec votre arrière-plan img mais background-size: cover; background-position: centerremplira l'arrière-plan du divsans étirer l'image
Ouadie
1
Fonctionne parfaitement pour les images où l'étirement déformerait l'image!
Stijn Van Bael
45

CSS3 moderne (recommandé pour le futur et probablement la meilleure solution)

.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. étirer sans recadrage ni déformation (peut ne pas remplir l'arrière-plan) : background-size: contain;
Force l'étirement absolu (peut provoquer une déformation, mais pas de recadrage) : background-size: 100% 100%;

"Ancien" CSS "toujours fonctionnel"

Image de positionnement absolu en tant que premier enfant du parent (positionné de manière relative) et en l'étirant à la taille du parent.

HTML

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

Equivalent de CSS3 background-size: cover;:

Pour y parvenir de manière dynamique, vous devrez utiliser l' opposé de l'alternative à la méthode contain (voir ci-dessous) et si vous avez besoin de centrer l'image recadrée, vous auriez besoin d'un JavaScript pour le faire de manière dynamique - par exemple en utilisant jQuery:

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

Exemple pratique:
css crop comme exemple

Equivalent de CSS3 background-size: contain;:

Celui-ci peut être un peu délicat - la dimension de votre arrière-plan qui déborderait le parent aura CSS défini à 100% et l'autre à auto. Exemple pratique: css étirant l'arrière-plan comme image

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

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

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

PS: Pour faire les équivalents de couverture / contenir de manière complètement dynamique (vous n'aurez donc pas à vous soucier des débordements / ratios), vous devrez utiliser javascript pour détecter les ratios pour vous et définir les dimensions comme décrit. ..

jave.web
la source
2
Réponse bien plus complète que l'autre réponse "Couverture". Malheureusement, il est coincé ici, près du bas ...
BillyNair
24

Pour cela, vous pouvez utiliser la background-sizepropriété CSS3 . Écrivez comme ceci:

#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;
}

Vérifiez ceci: http://jsfiddle.net/qdzaw/1/

sandeep
la source
1
IE ne supporte pas cela. Que faire?
KarSho
4
Pour IE, utilisez la balise IMG pour indiquer la position absolue avec une hauteur et une largeur de 100%.
sandeep
20

Vous pouvez ajouter:

#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;
}

Vous pouvez en savoir plus ici: css3 background-size

Xella
la source
3
Bien mieux que la réponse acceptée, étant donné que cela vous montre que background-size accepte 2 valeurs pour la largeur et la hauteur.
krb686
background-size est un css3 et n'est pas pris en charge par tous les navigateurs
Mahdi Jazini
2
body{
  margin:0;
  background:url('image.png') no-repeat 50% 50% fixed;
  background-size: cover;
}
Kursat Turkay
la source
1

en utilisant la propriété css:

background-size: cover;
MrBii
la source
background-size est un css3 et n'est pas pris en charge par tous les navigateurs
Mahdi Jazini
1

Utilisation: background-size: 100% 100%; Pour créer une image d'arrière-plan adaptée à la taille du div.

Jagan Reddy
la source
C'est ce que je recherchais - s'étirer pour s'adapter sans égard au rapport hauteur / largeur de l'original. Merci.
dgig le
0

Pour conserver le rapport hauteur / largeur, utilisez background-size: 100% auto;

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

Essayez quelque chose comme ceci:

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