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.


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>

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


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.


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 :)


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

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

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

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

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;

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.


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%; 

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.


-1

Für mich geht das

.page-bg {
  background: url("res://background");
  background-position: center center;
  background-repeat: no-repeat;
  background-size: 100% 100%;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.