Jak rozciągnąć obraz tła, aby wypełnić div

102

Chcę ustawić obraz tła na różne elementy div, ale moje problemy są następujące:

  1. Rozmiar obrazu jest stały (60 pikseli).
  2. Różny rozmiar div

Jak mogę rozciągnąć obraz tła, aby wypełnić całe tło elementu 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;
}

Sprawdź kod tutaj.

Muhammad Usman
źródło

Odpowiedzi:

154

Dodaj

background-size:100% 100%;

do twojego css pod obrazem tła.

Możesz również określić dokładne wymiary, tj .:

background-size: 30px 40px;

Tutaj: JSFiddle

hendos43
źródło
5
IE tego nie obsługuje. Co zrobić?
KarSho
9
to nie działa, poniżej znajdziesz lepszą odpowiedź: background-size: 100% 100%;
chriscatfr
Dlaczego mnoży się zamiast rozciągać obraz, aby dopasować go do kontenera: jsfiddle.net/qdzaw/424
SearchForKnowledge
Musisz dodaćbackground-repeat: no-repeat;
Rorrik
1
hendo, twój JSFiddle już nie działa (martwe linki do hootsuite), czy możesz go zaktualizować?
TylerH,
71

Możesz użyć:

background-size: cover;

Lub po prostu użyj dużego obrazu tła z:

background: url('../images/teaser.jpg') no-repeat center #eee;
Ouadie
źródło
3
okładka nie rozciąga się, może wyciąć zdjęcie
drdrej
Nie wiem, co próbujesz zrobić ze swoim obrazem tła, ale background-size: cover; background-position: centerdiv
wypełnię
1
Świetnie sprawdza się w przypadku zdjęć, na których rozciąganie mogłoby zniekształcić obraz!
Stijn Van Bael
45

Nowoczesny CSS3 (zalecany na przyszłość i prawdopodobnie najlepsze rozwiązanie)

.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. */
}

Maks. rozciąganie bez przycinania i deformacji (może nie wypełniać tła) : background-size: contain;
Wymuś rozciągnięcie bezwzględne (może powodować deformację, ale bez przycięcia) : background-size: 100% 100%;

„Stary” CSS „zawsze działający” sposób

Bezwzględne pozycjonowanie obrazu jako pierwszego dziecka (pozycjonowanego względnie) rodzica i rozciąganie go do rozmiaru rodzica.

HTML

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

Odpowiednik CSS3 background-size: cover;:

Aby osiągnąć to dynamicznie, musiałbyś użyć odwrotności metody zawierającej alternatywę (patrz poniżej), a jeśli chcesz wyśrodkować przycięty obraz, potrzebujesz JavaScript, aby zrobić to dynamicznie - np. Używając jQuery:

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

Praktyczny przykład:
css, jak przykład

Odpowiednik CSS3 background-size: contain;:

To może być trochę trudne - wymiar tła, który przepełniłby rodzica, będzie miał CSS ustawiony na 100%, drugi na auto. Praktyczny przykład: css rozciąganie tła jako obrazu

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

Odpowiednik CSS3 background-size: 100% 100%;:

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

PS: Aby wykonać odpowiedniki pokrycia / zawierania w „stary” sposób całkowicie dynamicznie (więc nie będziesz musiał przejmować się przepełnieniami / współczynnikami), musisz użyć javascript do wykrycia współczynników i ustawienia wymiarów zgodnie z opisem. ..

jave.web
źródło
2
O wiele pełniejsza odpowiedź niż druga odpowiedź „z okładki”. Niestety, utknęła daleko na dole ...
BillyNair
24

W tym celu możesz użyć background-sizewłaściwości CSS3 . Napisz tak:

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

Sprawdź to: http://jsfiddle.net/qdzaw/1/

Sandeep
źródło
1
IE tego nie obsługuje. Co zrobić?
KarSho
4
W przypadku IE użyj znacznika IMG, podając pozycję bezwzględną z wysokością i szerokością 100%.
Sandeep
20

Możesz dodać:

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

Możesz przeczytać więcej na ten temat tutaj: css3 background-size

Xella
źródło
3
Znacznie lepsze niż zaakceptowana odpowiedź, biorąc pod uwagę, że rozmiar tła akceptuje 2 wartości szerokości i wysokości.
krb686
background-size to plik css3, który nie jest obsługiwany we wszystkich przeglądarkach
Mahdi Jazini,
2
body{
  margin:0;
  background:url('image.png') no-repeat 50% 50% fixed;
  background-size: cover;
}
Kursat Turkay
źródło
1

korzystając z właściwości css:

background-size: cover;
MrBii
źródło
background-size to plik css3, który nie jest obsługiwany we wszystkich przeglądarkach
Mahdi Jazini,
1

Zastosowanie: rozmiar tła: 100% 100%; Aby dopasować obraz tła do rozmiaru div.

jagan reddy
źródło
To jest to, czego szukałem - rozciągnij, aby dopasować bez względu na proporcje oryginału. Dzięki.
dgig
0

Aby zachować proporcje, użyj background-size: 100% auto;

div {
    background-image: url('image.jpg');
    background-size: 100% auto;
    width: 150px;
    height: 300px;
}
Atul Yadav
źródło
0

Spróbuj czegoś takiego:

div {
    background-image: url(../img/picture1.jpg);
    height: 30em;
    background-repeat: no-repeat;
    width: 100%;
    background-position: center;
}
Deejay
źródło