So dehnen Sie das Hintergrundbild, um ein Div zu füllen

102

Ich möchte ein Hintergrundbild für verschiedene Divs festlegen, aber meine Probleme sind:

  1. Die Größe des Bildes ist fest (60px).
  2. Unterschiedliche Größe des Div

Wie kann ich das Hintergrundbild dehnen, um den gesamten Hintergrund des Div auszufüllen?

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

Überprüfen Sie den Code hier.

Muhammad Usman
quelle

Antworten:

154

Hinzufügen

background-size:100% 100%;

zu Ihrem CSS unter Hintergrundbild.

Sie können auch genaue Abmessungen angeben, z.

background-size: 30px 40px;

Hier: JSFiddle

hendos43
quelle
5
IE unterstützt dies nicht. Was zu tun?
KarSho
9
es funktioniert nicht, siehe unten für eine bessere Antwort: Hintergrundgröße: 100% 100%;
Chriscatfr
Warum wird es multipliziert, anstatt das Bild so zu dehnen, dass es in den Container passt: jsfiddle.net/qdzaw/424
SearchForKnowledge
Sie müssen hinzufügenbackground-repeat: no-repeat;
Rorrik
1
hendo, deine JSFiddle funktioniert nicht mehr (tote Links zu hootsuite), kannst du sie bitte aktualisieren?
TylerH
71

Sie können verwenden:

background-size: cover;

Oder verwenden Sie einfach ein großes Hintergrundbild mit:

background: url('../images/teaser.jpg') no-repeat center #eee;
Ouadie
quelle
3
Cover streckt nicht, es kann Bild schneiden
drdrej
Ich weiß nicht, was Sie versuchen, mit Ihrem Hintergrund img zu tun, aber background-size: cover; background-position: centerich werde den Hintergrund des füllen, divohne das Bild zu strecken
Ouadie
1
Funktioniert hervorragend für Bilder, bei denen das Bild durch Dehnen verformt wird!
Stijn Van Bael
45

Modernes CSS3 (empfohlen für die Zukunft und wahrscheinlich die beste Lösung)

.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. Dehnung ohne Zuschnitt oder Verformung (füllt den Hintergrund möglicherweise nicht aus) : background-size: contain;
Absolute Dehnung erzwingen (kann Verformung verursachen, aber kein Zuschnitt) : background-size: 100% 100%;

"Altes" CSS "funktioniert immer"

Absolutes Positionierungsbild als erstes Kind der (relativ positionierten) Elternteils und Dehnen auf die übergeordnete Größe.

HTML

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

Äquivalent zu CSS3 background-size: cover; :

Um dies dynamisch zu erreichen, müssten Sie das Gegenteil der Alternative zur Contain-Methode verwenden (siehe unten). Wenn Sie das zugeschnittene Bild zentrieren müssen, benötigen Sie ein JavaScript, um dies dynamisch zu tun - z. B. mithilfe von jQuery:

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

Praktisches Beispiel:
CSS-Ernte wie Beispiel

Äquivalent zu CSS3 background-size: contain; :

Dieser kann etwas knifflig sein - für die Dimension Ihres Hintergrunds, die das übergeordnete Element überlaufen würde, ist CSS auf 100% festgelegt, für das andere auf Auto. Praktisches Beispiel: CSS-Streckhintergrund als Bild

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

Äquivalent zu CSS3background-size: 100% 100%; :

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

PS: Um die Äquivalente von Deckung / Enthalten auf die "alte" Weise vollständig dynamisch zu machen (damit Sie sich nicht um Überläufe / Verhältnisse kümmern müssen), müssten Sie Javascript verwenden, um die Verhältnisse für Sie zu erkennen und die Abmessungen wie beschrieben einzustellen. ..

jave.web
quelle
2
Weitaus umfassendere Antwort als die andere "Cover" -Antwort. Leider steckt es hier unten in der Nähe des Bodens fest ...
BillyNair
24

Hierfür können Sie die CSS3- background-sizeEigenschaft verwenden. Schreiben Sie so:

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

Überprüfen Sie dies: http://jsfiddle.net/qdzaw/1/

Sandeep
quelle
1
IE unterstützt dies nicht. Was zu tun?
KarSho
4
Verwenden Sie für den IE das IMG- Tag und geben Sie die absolute Position mit einer Höhe und Breite von 100% an.
Sandeep
20

Du kannst hinzufügen:

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

Sie können hier mehr darüber lesen: css3 Hintergrundgröße

Xella
quelle
3
Viel besser als die akzeptierte Antwort, da dies zeigt, dass die Hintergrundgröße 2 Werte für Breite und Höhe akzeptiert.
krb686
Hintergrundgröße ist ein CSS3 und wird nicht in allen Browsern unterstützt
Mahdi Jazini
2
body{
  margin:0;
  background:url('image.png') no-repeat 50% 50% fixed;
  background-size: cover;
}
Kursat Turkay
quelle
1

durch Verwendung der Eigenschaft CSS:

background-size: cover;
MrBii
quelle
Hintergrundgröße ist ein CSS3 und wird nicht in allen Browsern unterstützt
Mahdi Jazini
1

Verwendung: Hintergrundgröße: 100% 100%; Hintergrundbild an die Div-Größe anpassen.

jagan reddy
quelle
Dies ist, wonach ich gesucht habe - dehnen, um ohne Rücksicht auf das Seitenverhältnis des Originals zu passen. Vielen Dank.
Dgig
0

Verwenden Sie, um das Seitenverhältnis beizubehalten background-size: 100% auto;

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

Versuchen Sie so etwas:

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