Cara meregangkan gambar latar belakang untuk mengisi div

102

Saya ingin mengatur gambar latar belakang ke div yang berbeda, tetapi masalah saya adalah:

  1. Ukuran gambar tetap (60px).
  2. Memvariasikan ukuran div

Bagaimana saya bisa meregangkan gambar latar belakang untuk mengisi seluruh latar belakang 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;
}

Cek kodenya di sini.

Muhammad Usman
sumber

Jawaban:

154

Menambahkan

background-size:100% 100%;

ke css Anda di bawah gambar latar belakang.

Anda juga dapat menentukan dimensi yang tepat, yaitu:

background-size: 30px 40px;

Di sini: JSFiddle

Hendos43
sumber
5
IE tidak mendukung ini. Apa yang harus dilakukan?
KarSho
9
tidak berhasil, lihat di bawah untuk jawaban yang lebih baik: background-size: 100% 100%;
chriscatfr
Mengapa mengalikan alih-alih meregangkan gambar agar sesuai dengan wadah: jsfiddle.net/qdzaw/424
SearchForKnowledge
Anda perlu menambahkanbackground-repeat: no-repeat;
Rorrik
1
hendo, JSFiddle Anda tidak lagi berfungsi (tautan mati ke hootsuite), bisakah Anda memperbaruinya?
TylerH
71

Kamu bisa memakai:

background-size: cover;

Atau gunakan saja gambar latar yang besar dengan:

background: url('../images/teaser.jpg') no-repeat center #eee;
Ouadie
sumber
3
cover doesnt strech, it can cut picture
drdrej
Saya tidak tahu apa yang Anda coba lakukan dengan img latar belakang Anda tetapi background-size: cover; background-position: centerakan mengisi latar belakang divtanpa meregangkan gambar
Ouadie
1
Sangat cocok untuk gambar di mana peregangan akan merusak gambar!
Stijn Van Bael
45

CSS3 modern (direkomendasikan untuk masa depan & mungkin solusi terbaik)

.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. meregang tanpa pemangkasan atau deformasi (mungkin tidak memenuhi latar belakang) : background-size: contain;
Peregangan mutlak paksa (dapat menyebabkan deformasi, tetapi tidak ada pemangkasan) : background-size: 100% 100%;

"Old" CSS "selalu berfungsi"

Gambar pemosisian absolut sebagai anak pertama dari induk (posisi relatif) dan membentangkannya ke ukuran induk.

HTML

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

Setara dengan CSS3 background-size: cover;:

Untuk mencapai ini secara dinamis, Anda harus menggunakan kebalikan dari alternatif metode berisi (lihat di bawah) dan jika Anda perlu memusatkan gambar yang dipotong, Anda akan memerlukan JavaScript untuk melakukannya secara dinamis - misalnya menggunakan jQuery:

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

Contoh praktis:
css crop seperti contoh

Setara dengan CSS3 background-size: contain;:

Yang ini bisa sedikit rumit - dimensi latar belakang Anda yang akan meluap-luap induknya akan memiliki CSS yang disetel ke 100% yang lainnya ke otomatis. Contoh praktis: css peregangan background sebagai gambar

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

Setara dengan CSS3 background-size: 100% 100%;:

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

NB: Untuk melakukan persamaan sampul / penampung dengan cara "lama" sepenuhnya secara dinamis (sehingga Anda tidak perlu peduli dengan luapan / rasio), Anda harus menggunakan javascript untuk mendeteksi rasio untuk Anda dan menyetel dimensi seperti yang dijelaskan. ..

jave.web
sumber
2
Jawaban yang jauh lebih lengkap daripada jawaban "Sampul" lainnya. Sayangnya, itu terjebak jauh di sini dekat bagian bawah ...
BillyNair
24

Untuk ini, Anda dapat menggunakan background-sizeproperti CSS3 . Tulis seperti ini:

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

Periksa ini: http://jsfiddle.net/qdzaw/1/

sandeep
sumber
1
IE tidak mendukung ini. Apa yang harus dilakukan?
KarSho
4
Untuk IE gunakan tag IMG berikan posisi absolut dengan tinggi & lebar 100%.
sandeep
20

Anda dapat menambahkan:

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

Anda dapat membaca lebih lanjut tentang itu di sini: css3 background-size

Xella
sumber
3
Jauh lebih baik daripada jawaban yang diterima, karena ini menunjukkan kepada Anda bahwa ukuran latar belakang menerima 2 nilai untuk lebar dan tinggi.
krb686
ukuran latar belakang adalah css3 dan tidak didukung di semua browser
Mahdi Jazini
2
body{
  margin:0;
  background:url('image.png') no-repeat 50% 50% fixed;
  background-size: cover;
}
Kursat Turkay
sumber
1

dengan menggunakan properti css:

background-size: cover;
MrBii
sumber
ukuran latar belakang adalah css3 dan tidak didukung di semua browser
Mahdi Jazini
1

Gunakan: background-size: 100% 100%; Untuk membuat gambar latar belakang agar sesuai dengan ukuran div.

jagan reddy
sumber
Inilah yang saya cari - kelenturan agar pas tanpa memperhatikan rasio aspek aslinya. Terima kasih.
dgig
0

Untuk menjaga rasio aspek, gunakan background-size: 100% auto;

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

Coba sesuatu seperti ini:

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