กำหนดขนาดภาพพื้นหลังด้วย CSS หรือไม่


386

เป็นไปได้ไหมที่จะกำหนดขนาดของภาพพื้นหลังด้วย CSS?

ฉันต้องการทำสิ่งที่ชอบ:

background: url('bg.gif') top repeat-y;
background-size: 490px;

แต่ดูเหมือนว่าผิดทั้งหมดที่จะทำเช่นนั้น ...


อาจจะเป็นไปได้ ดูวิธีการ: ภาพพื้นหลังที่ปรับขนาดได้
Ricardo de la Vega

คำตอบ:


621

CSS2

หากคุณต้องการทำให้ภาพใหญ่ขึ้นคุณต้องแก้ไขภาพเองในโปรแกรมแก้ไขภาพ

หากคุณใช้แท็ก img คุณสามารถเปลี่ยนขนาดได้ แต่จะไม่ให้ผลลัพธ์ที่ต้องการหากคุณต้องการให้ภาพพื้นหลังสำหรับเนื้อหาอื่น ๆ (และจะไม่ทำซ้ำตัวเองเหมือนที่คุณต้องการ) ...

CSS3 ปลดปล่อยพลัง

นี้เป็นไปได้ที่จะทำใน CSS3 background-sizeกับ

เบราว์เซอร์สมัยใหม่ทั้งหมดรองรับสิ่งนี้ดังนั้นหากคุณไม่จำเป็นต้องสนับสนุนเบราว์เซอร์รุ่นเก่านี่เป็นวิธีที่ทำได้
เบราว์เซอร์ที่รองรับ:
Mozilla Firefox 4.0+ (Gecko 2.0+), Microsoft Internet Explorer 9.0+, Opera 10.0+, Safari 4.1+ (webkit 532) และ Chrome 3.0+

.stretch{
/* Will stretch to specified width/height */
  background-size: 200px 150px;
}
.stretch-content{
/* Will stretch to width/height of element */
  background-size: 100% 100%;
}

.resize-width{
/* width: 150px, height: auto to retain aspect ratio */
  background-size: 150px Auto;
}
.resize-height{
/* height: 150px, width: auto to retain aspect ratio */
  background-size: Auto 150px;
}
.resize-fill-and-clip{ 
  /* Resize to fill and retain aspect ratio.
     Will cause clipping if aspect ratio of box is different from image. */ 
  background-size: cover;
}
.resize-best-fit{
/* Resize to best fit and retain aspect ratio.
   Will cause gap if aspect ratio of box is different from image. */ 
  background-size: contain;
}

โดยเฉพาะอย่างยิ่งฉันชอบcoverและcontainค่านิยมที่ให้พลังการควบคุมแบบใหม่ที่เราไม่เคยมีมาก่อน

รอบ

คุณยังสามารถใช้background-size: roundที่มีความหมายร่วมกับการทำซ้ำ:

.resize-best-fit-in-repeat{
/* Resize to best fit in a whole number of times in x-direction */ 
  background-size: round auto; /* Height: auto is to keep aspect ratio */
  background-repeat: repeat;
}

วิธีนี้จะปรับความกว้างของภาพเพื่อให้เหมาะกับจำนวนครั้งในพื้นที่การวางตำแหน่งพื้นหลัง


หมายเหตุเพิ่มเติม
หากขนาดที่คุณต้องการคือขนาดพิกเซลคงที่ก็ยังคงฉลาดที่จะปรับขนาดภาพจริง นี่เป็นทั้งการปรับปรุงคุณภาพของการปรับขนาด (เนื่องจากซอฟต์แวร์ภาพของคุณทำงานได้ดีกว่าเบราว์เซอร์) และเพื่อประหยัดแบนด์วิดท์หากภาพต้นฉบับมีขนาดใหญ่กว่าที่จะแสดง


7
โปรดทราบว่ามีคำถามว่าจอประสาทตาจะปรากฏบน iPad และ iPhone และอาจเป็นอุปกรณ์ความละเอียดสูงอื่น ๆ ซึ่งหมายความว่าอาจเป็นการปรับขนาดภาพให้ใหญ่ขึ้นโดยใช้ CSS และการใช้ไฟล์ CSS หลายไฟล์และลูกเล่นอื่น ๆ เพื่อแสดงภาพที่เฉพาะเจาะจง ขอแนะนำให้รู้จักกับที่นี่: webmonkey.com/2012/03/…
Leo

นี่เป็นทางออกที่เลวร้ายที่สุดในตอนนี้เนื่องจากไม่ใช่ร้านค้าอีคอมเมิร์ซทุกแห่งที่จะปรับขนาดภาพตามที่แนะนำ ในปี 2009 เป็นไปได้ว่าใกล้เคียงกับตัวเลือกที่ดีที่สุดตอนนี้เพียงใช้คุณลักษณะขนาดเช่นด้านล่าง
ShaunOReilly

332

CSS 3 เท่านั้นที่รองรับ

background-size: 200px 50px;

แต่ฉันจะแก้ไขภาพเองเพื่อที่ผู้ใช้จะต้องโหลดน้อยลงและมันอาจดูดีกว่าภาพที่หดตัวโดยไม่ลดรอยหยัก


32
น่าเสียดายที่ผู้คนยังคงใช้ ie8
Dean_Wilson

16
อัปยศใน Microsoft สำหรับเบราว์เซอร์ที่น่ากลัว
Mahmoodvcs

สิ้นสุด 2013, ยังคงต้องเพิ่มbackground: url('resized_image.png')\9;สำหรับ IE lt 9
skobaljic

นี่คือวิธีที่จะไปแม้ในปี 2017!
Francisco Ochoa

ฉันมาจากปี 2560 และนี่คือวิธีที่เราทำ
สกา

23

หากผู้ใช้ของคุณใช้เฉพาะ Opera 9.5+, Safari 3+, Internet Explorer 9+ และ Firefox 3.6+ คำตอบคือใช่ มิฉะนั้นจะไม่

พื้นหลังขนาดคุณสมบัติเป็นส่วนหนึ่งของ CSS 3 แต่มันจะไม่ทำงานบนเบราว์เซอร์ส่วนใหญ่

เพื่อจุดประสงค์ของคุณเพียงแค่ทำให้ภาพใหญ่ขึ้น


1
ขนาดพื้นหลัง: 100%; พื้นหลังตำแหน่ง: ศูนย์; - ใช้งานได้ใน IE6 ที่ทำงานบน Virtual Machine บน XP Home
InnateDev

7
IE 6,7,8 ไม่ใช่ 'เบราว์เซอร์ส่วนใหญ่'
Mahmoodvcs

1
แม้ในปี 2013 - ในขณะที่ความคิดเห็น "IE6,7,8 ไม่ใช่" เบราว์เซอร์ส่วนใหญ่ "" อาจเป็นจริงบางส่วนเกี่ยวกับ IE6; IE7 และ IE8 ยังคงมีส่วนแบ่งการตลาดค่อนข้างน่าเสียดาย วิธีที่ดีที่สุดที่ฉันได้พบคือการใช้ Javascript ร่วมกับ modernizr (หรือวิธีการติดแท็ก 'OLDIE')
AndrewPK

19

เป็นไปไม่ได้ พื้นหลังจะมีขนาดใหญ่ที่สุดเท่าที่จะทำได้ แต่คุณสามารถหยุดไม่ให้ทำซ้ำbackground-repeatได้

background-repeat: no-repeat;

ประการที่สองพื้นหลังไม่ได้อยู่ในพื้นที่ของกล่องดังนั้นถ้าคุณต้องการให้พื้นหลังอยู่บนเนื้อหาจริงของกล่องคุณสามารถใช้ระยะขอบแทนการแพ็ด

ประการที่สามคุณสามารถควบคุมตำแหน่งที่ภาพพื้นหลังเริ่มต้นได้ โดยค่าเริ่มต้นจะเป็นมุมซ้ายบนของกล่อง แต่คุณสามารถควบคุมได้ด้วยbackground-positionเช่น:

background-position: center top;

หรือบางที

background-position: 20px -14px;

ตำแหน่งติดลบใช้มากกับสไปรท์ CSS


ไม่มันไม่ใหญ่เท่าที่ฉันจะเป็นได้ มันมีขนาดเท่ากันเสมอ แต่ฉันต้องทำให้ใหญ่ขึ้น
Johan

นั่นมันเป็นไปไม่ได้ อาจมีตัวเลือกสำหรับการทำเช่นนั้นในรุ่นอนาคตของ CSS แต่นั่นเป็นวิธีที่ไกล
mikl

คำตอบนี้ผิด CSS3 มีคุณสมบัติขนาดพื้นหลังซึ่งรองรับใน IE9 +
Downpour046

3
ลองดูที่การประทับเวลา ในปี 2009 ขนาดพื้นหลังเป็นเพียงแววตาของ WebKit อย่าลังเลที่จะอัปเดตหากคุณต้องการ แต่มีคำตอบอื่น ๆ อีกมากมายที่อธิบายขนาดพื้นหลัง
mikl

12

ไม่ยากเกินไปถ้าคุณไม่กลัวที่จะลงลึกไปอีกสักพัก :)

มีข้อโต้แย้งหนึ่งที่ถูกลืม :

background-size: contain;

นี้จะไม่ยืดของคุณมันจะทำอย่างไรกับbackground-image coverมันจะยืดจนกระทั่งด้านที่ยาวขึ้นมาถึงความกว้างหรือความสูงของภาชนะด้านนอกและดังนั้นจึงรักษาภาพ

แก้ไข: นอกจากนี้ยังมีและ-webkit-background-size-moz-background-size

คุณสมบัติขนาดพื้นหลังรองรับ IE9 +, Firefox 4+, Opera, Chrome และ Safari 5+

- ที่มา: โรงเรียน W3


3

ขนาดพื้นหลัง: 200px 50px เปลี่ยนเป็น 100% 100% และจะขยายตามความต้องการของแท็กเนื้อหาเช่น ul li หรือ div ... ลองใช้


3

ในการสนับสนุนคำตอบที่ @tetra ให้มาฉันต้องการชี้ให้เห็นว่าหากภาพเป็น SVG ดังนั้นการปรับขนาดภาพจริงไม่จำเป็น

เนื่องจากไฟล์ SVG เป็นเพียง XML คุณสามารถระบุขนาดที่คุณต้องการให้ปรากฏภายใน XML

อย่างไรก็ตามหากคุณใช้ภาพ SVG เดียวกันในที่ต่าง ๆ และต้องการให้มีขนาดแตกต่างกันการใช้งานbackground-sizeจะมีประโยชน์มาก ไฟล์ SVG นั้นมีขนาดเล็กกว่าภาพแรสเตอร์และการปรับขนาดได้อย่างรวดเร็วด้วย CSS จะมีประโยชน์อย่างมากโดยไม่ต้องเสียค่าใช้จ่ายด้านประสิทธิภาพใด ๆ ที่ฉันรับรู้

นี่คือตัวอย่างรวดเร็ว:

<div class="hasBackgroundImage">content</div>

.hasBackgroundImage
{
    background: transparent url('/image/background.svg') no-repeat 10px 5px;
    background-size: 1.4em;
}

(หมายเหตุ: ใช้ได้กับฉันใน OS X 10.7 กับ Firefox 8, Safari 5.1 และ Chrome 16.0.912.63)


3

คุณสามารถใช้ CSS3 ได้ทั้งหมด:

body {
    background-image: url(images/bg-body.png); 
    background-size: 100%; /* size the background image at 100% like any responsive img tag */
    background-position: top center;
    background-repeat:no-repeat;
 }

สิ่งนี้จะปรับขนาดภาพพื้นหลังให้เป็น 100% ของความกว้างขององค์ประกอบร่างกายแล้วจะปรับขนาดพื้นหลังตามขนาดองค์ประกอบของร่างกายอีกครั้งเพื่อความละเอียดที่น้อยลง

นี่คือตัวอย่าง: http://www.sccc.premiumdw.com/examples/resize-background-images-with-css/



2

คุณสามารถใช้สอง<div>องค์ประกอบ:

  • หนึ่งคือคอนเทนเนอร์ (เป็นรูปภาพที่คุณต้องการให้รูปภาพพื้นหลังปรากฏขึ้นในตอนแรก)

  • ส่วนที่สองบรรจุอยู่ภายใน คุณตั้งค่าขนาดของภาพพื้นหลัง (หรือขนาดที่คุณต้องการให้ปรากฏ)

div absoluteของที่มีอยู่แล้วมีการตั้งค่าที่จะได้รับตำแหน่ง วิธีนี้จะไม่รบกวนการไหลปกติของรายการใน div ที่มี

มันช่วยให้คุณใช้ภาพเทพดาได้อย่างมีประสิทธิภาพ


1

คุณไม่สามารถกำหนดขนาดของภาพพื้นหลังด้วย CSS เวอร์ชันปัจจุบัน (2.1)

คุณสามารถตั้งค่าเท่านั้น: position, fix, image-url, และrepeat-modecolor


1
put the below code in the body of you css file

background-image: URL('../images/wave-green-plain-colour.jpg') ;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
width:100px;

1

คุณได้เขียน

background: url('bg.gif') top repeat-y;    
background-size: 490px;

แต่คุณจะเห็นพื้นหลังขึ้นอยู่กับขนาดของคอนเทนเนอร์

หากคุณมีคอนเทนเนอร์เปล่าที่มี URL พื้นหลังและขนาดพื้นหลังใดก็ตามคุณจะไม่เห็น bg.gif

หากคุณตั้งค่าขนาดของทวีปเป็น

background: url('bg.gif') top repeat-y;    
background-size: 490px;
height: 490px;
width: 490px;

เมื่อรวมกับรหัสที่คุณเขียนด้านบนคุณจะเห็นไฟล์ bg.gif


0

background-size ทำงานใน Chrome 4.1 แต่จนถึงตอนนี้ฉันไม่สามารถใช้งานได้ใน Firefox 3.6


0

ฉันใช้ภาพพื้นหลังสำหรับปุ่ม แต่มันจะแสดงเฉพาะภาพขนาดเดียวกับข้อความแม้ว่าฉันจะตั้งค่าความกว้างและความสูง ฉันใช้ข้อความแทน&nbsp;ตัวอักษรแทนตัวอักษร (ช่องว่างแบบไม่แบ่งส่วน) ฉันตบมากเท่าที่จำเป็นโดยทั่วไปจนกระทั่งพื้นหลังปุ่มทั้งหมดปรากฏขึ้น ดังนั้นฉันอาจมีรหัสดังนี้:

ในสไตล์ชีท:

#v2menu-home {
    background-image:url(../v2-siteimages/button.png);
    background-repeat:no-repeat;
}

ในเอกสาร HTML:

<div id="v2menu">
    <a id="v2menu-home" href="/index.php">home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div><!-- v2menu -->

2
อีกวิธีหนึ่งคือการกำหนดขนาดของลิงก์ไปยังขนาดของภาพพื้นหลัง ในสไตล์ชีท (ใต้ # v2menu-home ในตัวอย่างด้านบน) ใช้ display: block และตั้งค่าความสูงและความกว้างที่นั่น มันใช้งานได้จริง ไม่ต้องใช้อักขระเว้นวรรคแบบไม่ทำลาย
Martin Thompson

0

ตัวอย่างเช่น:
ภาพพื้นหลังจะพอดีกับขนาดภาชนะเสมอ (ความกว้าง 100% และความสูง 100px)
CSS ข้ามเบราว์เซอร์:

.app-header {
background: url("themes/default/images/background.jpg") no-repeat;
-moz-background-size: 100% 100px;
-webkit-background-size: 100% 100px;
-o-background-size: 100% 100px;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src = "themes/default/images/background.jpg", sizingMethod = 'scale');
background-size: 100% 100px;

}


0

สิ่งนี้สามารถทำได้ใน CSS3 ที่มีขนาดพื้นหลัง

.backgroungImage {
    background: url('../imageS/background.jpg') no-repeat;
    background-size: 32px 32px;
}

0

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

background:url(my-bg.png) no-repeat top center / 50px 50px;

ฉันทดสอบไม่ได้ แต่อาจเป็นไปได้
Ratata Tata

ฉันคิดว่าไอแพดไม่รู้จักพื้นหลังชวเลข @ orlando-leite
DGRFDSGN
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.