Wie strecke ich ein Hintergrundbild, um das gesamte HTML-Element abzudecken?

88

Ich versuche, ein Hintergrundbild eines HTML-Elements (body, div usw.) zu erhalten, um dessen gesamte Breite und Höhe zu strecken.

Ich habe nicht viel Glück. Ist es überhaupt möglich oder muss ich es anders machen, als als Hintergrundbild?

Mein aktuelles CSS ist:

body {
    background-position: left top;
    background-image: url(_images/home.jpg);
    background-repeat: no-repeat;
}

Danke im Voraus.

Bearbeiten: Ich bin nicht daran interessiert, das CSS in Gabriels Vorschlag beizubehalten, also ändere ich stattdessen das Layout der Seite. Aber das scheint die beste Antwort zu sein, also markiere ich es als solche.

Fung
quelle
Natürlich könnten Sie JavaScript verwenden, um dies dynamisch zu tun, aber das wäre wahrscheinlich schlimmer als die von gabriel1836 vorgeschlagenen CSS-Hacks.
Jason Bunting
Um das Seitenverhältnis des Bildes beizubehalten, sollten Sie "Hintergrundgröße: Cover" verwenden. oder "Hintergrundgröße: enthalten;". Ich habe eine Polyfüllung erstellt, die diese Werte in IE8 implementiert: github.com/louisremi/background-size-polyfill
Louis-Rémi

Antworten:

192
<style>
    { margin: 0; padding: 0; }

    html { 
        background: url('images/yourimage.jpg') no-repeat center center fixed; 
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
    }
</style>
Nathan
quelle
Dies funktioniert auch als Stil-Tags in HTML-Elementen oder in CSS-Dateien.
Nathan
2
Dies ist die beste Lösung aller Zeiten.
AFD
1
Was ist der Unterschied zwischen Deckung und 100% 100%?
Pacerier
4
100% 100% behält das Seitenverhältnis des Originalbilds nicht bei. 'cover' skaliert das Bild unter Beibehaltung seines intrinsischen Seitenverhältnisses (falls vorhanden) auf die kleinste Größe, sodass sowohl seine Breite als auch seine Höhe den Hintergrundpositionierungsbereich vollständig abdecken können. Sie können auch "Enthalten" verwenden, um das Bild unter Beibehaltung seines intrinsischen Seitenverhältnisses (falls vorhanden) auf die größte Größe zu skalieren, sodass sowohl seine Breite als auch seine Höhe in den Hintergrundpositionierungsbereich passen.
Mike737
"-webkit-background-size: cover;" ist keine gültige CSS3-Eigenschaft.
VoidKing
14

Verwenden Sie die background-sizeEigenschaft: http://www.w3.org/TR/css3-background/#the-background-size

Kornel
quelle
1
Genial, das ist die richtige Antwort. Es funktioniert wahrscheinlich nicht im IE, aber ich ziele nur auf das Webkit für mein Projekt ab, also ist das perfekt :)
aehlke
8

Kurz gesagt, Sie können dies versuchen ....

<div data-role="page" style="background:url('backgrnd.png'); background-repeat: no-repeat; background-size: 100% 100%;" >

Wo ich ein paar CSS und JS verwendet habe ...

<link rel="stylesheet" href="css/jquery.mobile-1.0.1.min.css" />
<script src="js/jquery-1.7.1.min.js"></script>
<script src="js/jquery.mobile-1.0.1.min.js"></script>

Und es funktioniert gut für mich.

Tamal Samui
quelle
Für diejenigen, die das Seitenverhältnis NICHT beibehalten möchten!
BillyNair
6

Ich bin mir nicht sicher, ob das Strecken eines Hintergrundbilds möglich ist. Wenn Sie feststellen, dass dies nicht in allen Zielbrowsern möglich oder nicht zuverlässig ist, können Sie versuchen, ein gestrecktes img-Tag mit niedrigerem Z-Index und absoluter Position zu verwenden, damit andere Inhalte darüber angezeigt werden.

Lassen Sie uns wissen, was Sie am Ende tun.

Bearbeiten: Was ich vorgeschlagen habe, ist im Grunde, was in Gabriels Link ist. Also versuch das :)

Travis Collins
quelle
1
Ich habe diese Technik vor mindestens einem Jahrzehnt in Aktion gesehen. Ich kann mir nicht vorstellen, dass es jetzt noch nicht funktionieren würde.
Augenlidlosigkeit
5

Um die @ PhiLho-Antwort zu erweitern, können Sie ein sehr großes Bild (oder ein Bild beliebiger Größe) auf einer Seite zentrieren mit:

{ 
background-image: url(_images/home.jpg);
background-repeat:no-repeat;
background-position:center; 
}

Oder Sie können ein kleineres Bild mit einer Hintergrundfarbe verwenden, die dem Hintergrund des Bildes entspricht (wenn es einfarbig ist). Dies kann Ihren Zwecken entsprechen oder nicht.

{ 
background-color: green;
background-image: url(_images/home.jpg);
background-repeat:no-repeat;
background-position:center; 
}
Traingamer
quelle
4

Wenn Sie Ihr Hintergrundbild beim Ändern der Bildschirmgröße dehnen müssen und keine Kompatibilität mit älteren Browserversionen benötigen, ist dies die folgende Aufgabe:

body {
    background-image: url('../images/image.jpg');
    background-repeat: no-repeat;
    background-size: cover;
}
leocborges
quelle
3

Wenn Sie ein großes Querformat haben, wird in diesem Beispiel die Größe des Hintergrunds im Hochformat so geändert, dass er oben angezeigt wird und unten leer bleibt:

html, body {
    margin: 0;
    padding: 0;
    min-height: 100%;
}

body {
    background-image: url('myimage.jpg');
    background-position-x: center;
    background-position-y: bottom;
    background-repeat: no-repeat;
    background-attachment: scroll;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
}

@media screen and (orientation:portrait) {
    body {
        background-position-y: top;
        -webkit-background-size: contain;
        -moz-background-size: contain;
        -o-background-size: contain;
        background-size: contain;
    }
}
Live-Liebe
quelle
3

Den folgenden Code verwende ich hauptsächlich, um den gewünschten Effekt zu erzielen:

body {
    background-image: url('../images/bg.jpg');
    background-repeat: no-repeat;
    background-size: 100%;
}
Badar
quelle
3
Sie brauchenbackground-size: 100% 100%;
Sablefoste
Ich weiß nicht, welchen Browser Sie verwenden, aber was ich gesagt habe, funktioniert in Firefox und Chrome für mich.
Badar
2
background: url(images/bg.jpg) no-repeat center center fixed; 
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
Behnam Mohammadi
quelle
0

Sie können nicht in reinem CSS. Ein Bild, das die gesamte Seite hinter allen anderen Komponenten abdeckt, ist wahrscheinlich die beste Wahl (anscheinend ist dies die oben angegebene Lösung). Wie auch immer, die Chancen stehen gut, dass es sowieso schrecklich aussehen wird. Ich würde entweder versuchen, ein Bild zu erstellen, das groß genug ist, um die meisten Bildschirmauflösungen abzudecken (z. B. bis zu 1600 x 1200, darüber ist es knapper), die Breite der Seite zu begrenzen oder einfach ein Bild zu verwenden, das Kacheln enthält.

PhiLho
quelle
0

Bild{

background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  padding: 0 3em 0 3em; 
margin: -1.5em -0.5em -0.5em -1em; 
  width: absolute;
  max-width: 100%; 
Ebele Nwaelene
quelle
2
Willkommen bei SO! Um eine bessere Antwort zu schreiben, fügen Sie einige Gründe hinzu, warum dies funktioniert, und zeigen Sie den Code in Aktion. Sie können auch lesen , wie Sie eine gute Antwort schreiben .
Vertriebene
0

Machen Sie einfach ein div zum direkten Kind des Körpers (zum Beispiel mit dem Klassennamen bg), der alle anderen Elemente im Körper umfasst, und fügen Sie dies der CSS-Datei hinzu:

.bg {
    background-image: url('_images/home.jpg');//Put your appropriate image URL here
    background-size: 100% 100%; //You need to put 100% twice here to stretch width and height
}

Siehe diesen Link: https://www.w3schools.com/css/css_rwd_images.asp Scrollen Sie nach unten zu dem Teil, der sagt:

  1. Wenn die Eigenschaft für die Hintergrundgröße auf "100% 100%" festgelegt ist, wird das Hintergrundbild so ausgedehnt, dass es den gesamten Inhaltsbereich abdeckt

Dort wird die 'img_flowers.jpg' angezeigt, die sich auf die Größe des Bildschirms oder Browsers erstreckt, unabhängig davon, wie Sie die Größe ändern.

Salah Ayman
quelle
-1

Für mich geht das

.page-bg {
  background: url("res://background");
  background-position: center center;
  background-repeat: no-repeat;
  background-size: 100% 100%;
}
msk_sureshkumar
quelle