เป็นไปได้ไหมที่จะกำหนดขนาดของภาพพื้นหลังด้วย CSS?
ฉันต้องการทำสิ่งที่ชอบ:
background: url('bg.gif') top repeat-y;
background-size: 490px;
แต่ดูเหมือนว่าผิดทั้งหมดที่จะทำเช่นนั้น ...
เป็นไปได้ไหมที่จะกำหนดขนาดของภาพพื้นหลังด้วย CSS?
ฉันต้องการทำสิ่งที่ชอบ:
background: url('bg.gif') top repeat-y;
background-size: 490px;
แต่ดูเหมือนว่าผิดทั้งหมดที่จะทำเช่นนั้น ...
คำตอบ:
หากคุณต้องการทำให้ภาพใหญ่ขึ้นคุณต้องแก้ไขภาพเองในโปรแกรมแก้ไขภาพ
หากคุณใช้แท็ก img คุณสามารถเปลี่ยนขนาดได้ แต่จะไม่ให้ผลลัพธ์ที่ต้องการหากคุณต้องการให้ภาพพื้นหลังสำหรับเนื้อหาอื่น ๆ (และจะไม่ทำซ้ำตัวเองเหมือนที่คุณต้องการ) ...
นี้เป็นไปได้ที่จะทำใน 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;
}
วิธีนี้จะปรับความกว้างของภาพเพื่อให้เหมาะกับจำนวนครั้งในพื้นที่การวางตำแหน่งพื้นหลัง
หมายเหตุเพิ่มเติม
หากขนาดที่คุณต้องการคือขนาดพิกเซลคงที่ก็ยังคงฉลาดที่จะปรับขนาดภาพจริง นี่เป็นทั้งการปรับปรุงคุณภาพของการปรับขนาด (เนื่องจากซอฟต์แวร์ภาพของคุณทำงานได้ดีกว่าเบราว์เซอร์) และเพื่อประหยัดแบนด์วิดท์หากภาพต้นฉบับมีขนาดใหญ่กว่าที่จะแสดง
CSS 3 เท่านั้นที่รองรับ
background-size: 200px 50px;
แต่ฉันจะแก้ไขภาพเองเพื่อที่ผู้ใช้จะต้องโหลดน้อยลงและมันอาจดูดีกว่าภาพที่หดตัวโดยไม่ลดรอยหยัก
background: url('resized_image.png')\9;
สำหรับ IE lt 9
หากผู้ใช้ของคุณใช้เฉพาะ Opera 9.5+, Safari 3+, Internet Explorer 9+ และ Firefox 3.6+ คำตอบคือใช่ มิฉะนั้นจะไม่
พื้นหลังขนาดคุณสมบัติเป็นส่วนหนึ่งของ CSS 3 แต่มันจะไม่ทำงานบนเบราว์เซอร์ส่วนใหญ่
เพื่อจุดประสงค์ของคุณเพียงแค่ทำให้ภาพใหญ่ขึ้น
เป็นไปไม่ได้ พื้นหลังจะมีขนาดใหญ่ที่สุดเท่าที่จะทำได้ แต่คุณสามารถหยุดไม่ให้ทำซ้ำbackground-repeat
ได้
background-repeat: no-repeat;
ประการที่สองพื้นหลังไม่ได้อยู่ในพื้นที่ของกล่องดังนั้นถ้าคุณต้องการให้พื้นหลังอยู่บนเนื้อหาจริงของกล่องคุณสามารถใช้ระยะขอบแทนการแพ็ด
ประการที่สามคุณสามารถควบคุมตำแหน่งที่ภาพพื้นหลังเริ่มต้นได้ โดยค่าเริ่มต้นจะเป็นมุมซ้ายบนของกล่อง แต่คุณสามารถควบคุมได้ด้วยbackground-position
เช่น:
background-position: center top;
หรือบางที
background-position: 20px -14px;
ตำแหน่งติดลบใช้มากกับสไปรท์ CSS
มีข้อโต้แย้งหนึ่งที่ถูกลืม :
background-size: contain;
นี้จะไม่ยืดของคุณมันจะทำอย่างไรกับbackground-image
cover
มันจะยืดจนกระทั่งด้านที่ยาวขึ้นมาถึงความกว้างหรือความสูงของภาชนะด้านนอกและดังนั้นจึงรักษาภาพ
แก้ไข: นอกจากนี้ยังมีและ-webkit-background-size
-moz-background-size
คุณสมบัติขนาดพื้นหลังรองรับ IE9 +, Firefox 4+, Opera, Chrome และ Safari 5+
ขนาดพื้นหลัง: 200px 50px เปลี่ยนเป็น 100% 100% และจะขยายตามความต้องการของแท็กเนื้อหาเช่น ul li หรือ div ... ลองใช้
ในการสนับสนุนคำตอบที่ @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)
คุณสามารถใช้ 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/
เพียงแค่มี div ที่ซ้อนกันเพื่อเข้ากันได้กับเบราว์เซอร์
<div>
<div style="background: url('bg.gif') top repeat-y;min-width:490px;">
Put content here
</div>
</div>
คุณสามารถใช้สอง<div>
องค์ประกอบ:
หนึ่งคือคอนเทนเนอร์ (เป็นรูปภาพที่คุณต้องการให้รูปภาพพื้นหลังปรากฏขึ้นในตอนแรก)
ส่วนที่สองบรรจุอยู่ภายใน คุณตั้งค่าขนาดของภาพพื้นหลัง (หรือขนาดที่คุณต้องการให้ปรากฏ)
div absolute
ของที่มีอยู่แล้วมีการตั้งค่าที่จะได้รับตำแหน่ง วิธีนี้จะไม่รบกวนการไหลปกติของรายการใน div ที่มี
มันช่วยให้คุณใช้ภาพเทพดาได้อย่างมีประสิทธิภาพ
คุณไม่สามารถกำหนดขนาดของภาพพื้นหลังด้วย CSS เวอร์ชันปัจจุบัน (2.1)
คุณสามารถตั้งค่าเท่านั้น: position
, fix
, image-url
, และrepeat-mode
color
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;
คุณได้เขียน
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
background-size
ทำงานใน Chrome 4.1 แต่จนถึงตอนนี้ฉันไม่สามารถใช้งานได้ใน Firefox 3.6
ฉันใช้ภาพพื้นหลังสำหรับปุ่ม แต่มันจะแสดงเฉพาะภาพขนาดเดียวกับข้อความแม้ว่าฉันจะตั้งค่าความกว้างและความสูง ฉันใช้ข้อความแทน
ตัวอักษรแทนตัวอักษร (ช่องว่างแบบไม่แบ่งส่วน) ฉันตบมากเท่าที่จำเป็นโดยทั่วไปจนกระทั่งพื้นหลังปุ่มทั้งหมดปรากฏขึ้น ดังนั้นฉันอาจมีรหัสดังนี้:
ในสไตล์ชีท:
#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 </a>
</div><!-- v2menu -->
ตัวอย่างเช่น:
ภาพพื้นหลังจะพอดีกับขนาดภาชนะเสมอ (ความกว้าง 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;
}
สิ่งนี้สามารถทำได้ใน CSS3 ที่มีขนาดพื้นหลัง
.backgroungImage {
background: url('../imageS/background.jpg') no-repeat;
background-size: 32px 32px;
}
หากคุณต้องการตั้งค่าbackground-size
ในbackground
คุณสมบัติเดียวกันคุณสามารถใช้:
background:url(my-bg.png) no-repeat top center / 50px 50px;