วิธียืดภาพพื้นหลังเพื่อเติม div


102

ฉันต้องการตั้งค่าภาพพื้นหลังเป็น div ต่างๆ แต่ปัญหาของฉันคือ:

  1. ขนาดของภาพคงที่ (60px)
  2. ขนาดของ div ที่แตกต่างกันไป

ฉันจะยืดภาพพื้นหลังให้เต็มพื้นหลังทั้งหมดของ 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;
}

ตรวจสอบรหัสที่นี่

คำตอบ:


156

เพิ่ม

background-size:100% 100%;

ไปยัง css ของคุณใต้ภาพพื้นหลัง

คุณยังสามารถระบุขนาดที่แน่นอนได้เช่น:

background-size: 30px 40px;

ที่นี่: JSFiddle


5
IE ไม่รองรับสิ่งนี้ จะทำอย่างไร?
KarSho

9
ไม่ได้ผลโปรดดูคำตอบที่ดีกว่า: background-size: 100% 100%;
chriscatfr

ทำไมต้องคูณแทนการยืดรูปภาพให้พอดีกับคอนเทนเนอร์: jsfiddle.net/qdzaw/424
SearchForKnowledge

คุณต้องเพิ่มbackground-repeat: no-repeat;
Rorrik

1
hendo, JSFiddle ของคุณใช้งานไม่ได้อีกต่อไป (ลิงก์ตายไปยัง hootsuite) โปรดอัปเดตได้ไหม
TylerH

71

คุณสามารถใช้ได้:

background-size: cover;

หรือใช้ภาพพื้นหลังขนาดใหญ่กับ:

background: url('../images/teaser.jpg') no-repeat center #eee;

3
ปกไม่สตรีทก็ตัดภาพได้
drdrej

ฉันไม่รู้ว่าคุณกำลังพยายามทำอะไรกับพื้นหลังของคุณ img แต่background-size: cover; background-position: centerจะเติมพื้นหลังของภาพdivโดยไม่ยืดภาพ
Ouadie

1
ใช้งานได้ดีกับภาพที่การยืดจะทำให้ภาพเสียรูป!
Stijn Van Bael

45

Modern CSS3 (แนะนำสำหรับอนาคตและอาจเป็นทางออกที่ดีที่สุด)

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

สูงสุด ยืดโดยไม่มีการครอบตัดหรือการผิดรูป(อาจไม่เต็มพื้นหลัง) : background-size: contain;
ออกแรงยืดแบบสัมบูรณ์(อาจทำให้เสียรูปทรง แต่ไม่มีการครอบตัด) : background-size: 100% 100%;

"CSS" แบบเก่าใช้งานได้เสมอ "

รูปภาพการกำหนดตำแหน่งที่แน่นอนเป็นลูกคนแรกของแม่(ตำแหน่งสัมพัทธ์)และยืดให้เท่ากับขนาดแม่

HTML

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

เทียบเท่ากับ CSS3 background-size: cover;:

เพื่อให้บรรลุสิ่งนี้แบบไดนามิกคุณจะต้องใช้วิธีการที่ตรงกันข้ามกับวิธีการมีทางเลือก (ดูด้านล่าง) และหากคุณต้องการจัดกึ่งกลางภาพที่ครอบตัดคุณจะต้องใช้ JavaScript เพื่อทำสิ่งนั้นแบบไดนามิกเช่นการใช้ jQuery:

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

ตัวอย่างการปฏิบัติ:
css crop เหมือนตัวอย่าง

เทียบเท่ากับ CSS3 background-size: contain;:

อันนี้อาจเป็นเรื่องยากเล็กน้อย - ขนาดของพื้นหลังของคุณที่จะล้นออกมาผู้ปกครองจะมีการตั้งค่า CSS เป็น 100% เมื่ออีกอันหนึ่งเป็นอัตโนมัติ ตัวอย่างการปฏิบัติ: css ยืดพื้นหลังเป็นภาพ

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

เทียบเท่ากับ CSS3 background-size: 100% 100%;:

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

ป.ล. : ในการทำสิ่งที่เทียบเท่าปก / บรรจุในแบบ "เก่า" อย่างสมบูรณ์แบบไดนามิก (ดังนั้นคุณจะไม่ต้องสนใจเรื่องล้น / อัตราส่วน) คุณจะต้องใช้จาวาสคริปต์เพื่อตรวจหาอัตราส่วนสำหรับคุณและตั้งค่าขนาดตามที่อธิบายไว้ ..


2
คำตอบที่สมบูรณ์มากกว่าคำตอบ "ปก" อื่น ๆ น่าเสียดายที่มันติดอยู่ที่นี่ใกล้ด้านล่าง ...
BillyNair

24

สำหรับสิ่งนี้คุณสามารถใช้background-sizeคุณสมบัติCSS3 เขียนดังนี้:

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

ตรวจสอบสิ่งนี้: http://jsfiddle.net/qdzaw/1/


1
IE ไม่รองรับสิ่งนี้ จะทำอย่างไร?
KarSho

4
สำหรับ IE ใช้แท็กIMGให้ตำแหน่งที่แน่นอนด้วยความสูงและความกว้าง 100%
sandeep

20

คุณสามารถเพิ่ม:

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

คุณสามารถอ่านเพิ่มเติมได้ที่นี่: css3 background-size


3
ดีกว่าคำตอบที่ยอมรับมากเนื่องจากสิ่งนี้แสดงให้คุณเห็นว่าขนาดพื้นหลังยอมรับ 2 ค่าสำหรับความกว้างและความสูง
krb686

background-size เป็น css3 และไม่รองรับในทุกเบราว์เซอร์
Mahdi Jazini


1

โดยใช้คุณสมบัติ css:

background-size: cover;

background-size เป็น css3 และไม่รองรับในทุกเบราว์เซอร์
Mahdi Jazini

1

ใช้: พื้นหลังขนาด: 100% 100%; เพื่อสร้างภาพพื้นหลังให้พอดีกับขนาด div


นี่คือสิ่งที่ฉันกำลังมองหา - ยืดให้พอดีโดยไม่คำนึงถึงอัตราส่วนภาพของต้นฉบับ ขอบคุณ.
dgig

0

หากต้องการรักษาอัตราส่วนให้ใช้ background-size: 100% auto;

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

0

ลองทำสิ่งนี้:

div {
    background-image: url(../img/picture1.jpg);
    height: 30em;
    background-repeat: no-repeat;
    width: 100%;
    background-position: center;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.