ความละเอียดของจอภาพเพิ่มขึ้นอย่างต่อเนื่องและเมื่อจัดวางหน้าเว็บเราต้องคำนึงถึงมากที่สุด หลากหลายสิทธิ์ นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อใช้ ภาพพื้นหลังซึ่งถูกตัดออกที่ความละเอียดจอภาพต่ำ หรือในทางกลับกัน ไม่เหมาะกับความละเอียดสูงทั้งหมด วิธีแก้ไขประการหนึ่งสำหรับสถานการณ์นี้คือการปรับขนาดพื้นหลัง แน่นอนว่าสิ่งนี้สัญญาว่าจะเกิดปัญหาบางอย่าง เช่น การปรากฏของการบิดเบี้ยวและสิ่งแปลกปลอมในภาพ แต่ยังขยายคลังแสงของเครื่องมือเลย์เอาต์อีกด้วย
ขนาดถูกควบคุมโดยคุณสมบัติขนาดพื้นหลัง สามารถระบุค่าได้ คำหลัก cover จากนั้นขนาดภาพจะเป็นไปตามความกว้างและความสูงที่พอดีกับพื้นที่ที่ระบุ (เช่น หน้าต่างหน้าเว็บ) คำสำคัญมีจะปรับขนาดรูปภาพเพื่อให้ด้านหนึ่งของรูปภาพพอดีกับพื้นที่ที่ระบุทั้งหมด นอกจากนี้ การระบุขนาดแนวนอนหรือแนวตั้งที่ชัดเจนเป็นเปอร์เซ็นต์หรืออื่นๆ เป็นที่ยอมรับได้ หน่วย CSS- ในรูป 1 แสดงการเปลี่ยนแปลงขนาดภาพเมื่อ ความหมายที่แตกต่างกันขนาดพื้นหลัง สีเทาเลือกบล็อกขนาด 280x200 พิกเซลซึ่งภายในมีการตั้งค่าพื้นหลัง
ข้าว. 1. ประเภทของภาพพื้นหลังขึ้นอยู่กับค่าขนาดพื้นหลัง
หากระบุค่าขนาดสองค่าโดยคั่นด้วยช่องว่าง ค่าแรกจะกำหนดความกว้างแนวนอน และค่าที่สองจะกำหนดความกว้างในแนวตั้ง ในกรณีนี้ สัดส่วนจะถูกละเว้น ซึ่งมองเห็นได้ชัดเจนในรูปที่ 1 1 ปี แทนที่จะใช้ขนาดใดขนาดหนึ่ง อนุญาตให้ใช้คำหลักได้ อัตโนมัติ จากนั้นเบราว์เซอร์จะคำนวณโดยอัตโนมัติตามสัดส่วนของภาพ
ตัวอย่างที่ 1 ตั้งค่าภาพพื้นหลังที่ครอบคลุมหน้าต่างเบราว์เซอร์ทั้งหมด
ตัวอย่างที่ 1 ภาพพื้นหลัง
ผลลัพธ์ ตัวอย่างนี้แสดงในรูป 2. เมื่อคุณปรับขนาดหน้าต่าง รูปภาพจะขยายหรือย่อจนเต็มหน้าเว็บ
จากผู้เขียน:ในบทช่วยสอนนี้เราจะดู เทคนิคง่ายๆการสร้างภาพพื้นหลังที่จะขยายจนเต็มความกว้างของวิวพอร์ตของเบราว์เซอร์ ในการทำเช่นนี้ เราจำเป็นต้องมีคุณสมบัติ CSS ขนาดพื้นหลัง ไม่จำเป็นต้องใช้จาวาสคริปต์
ตัวอย่างภาพพื้นหลังจำนวนเต็มตอบสนอง
ในปัจจุบันการใช้รูปภาพขนาดใหญ่เป็นพื้นหลังค่อนข้างเป็นที่นิยมซึ่งกินพื้นที่ทั้งหน้าเว็บ ต่อไปนี้เป็นตัวอย่างของไซต์หลายแห่งที่มีภาพพื้นหลังทั้งหมดที่ตอบสนอง:
หากคุณต้องการบรรลุผลลัพธ์ที่คล้ายกันในโครงการเว็บถัดไปของคุณ บทความนี้คือสิ่งที่คุณต้องการ
หลักการพื้นฐาน
นี่คือแผนปฏิบัติการของเรา
ใช้คุณสมบัติขนาดพื้นหลังเพื่อเติมเต็มวิวพอร์ต
คุณสมบัติ CSS ขนาดพื้นหลังถูกตั้งค่าให้ครอบคลุม ค่าหน้าปกจะบอกเบราว์เซอร์ให้ปรับขนาดความกว้างและความสูงของภาพพื้นหลังโดยอัตโนมัติตามสัดส่วน เพื่อให้เท่ากับหรือมากกว่าความกว้าง/ความสูงของวิวพอร์ตเสมอ
ใช้คิวรีสื่อเพื่อจัดการภาพพื้นหลังขนาดเล็กสำหรับอุปกรณ์มือถือ
เพื่อปรับปรุงความเร็วในการโหลดหน้าเว็บบนหน้าจอขนาดเล็ก เราจะใช้คิวรีสื่อเพื่อประมวลผลภาพพื้นหลังเวอร์ชันที่เล็กลง นี่เป็นทางเลือก เทคนิคนี้จะได้ผลหากไม่มีมัน แต่เหตุใดการใช้ภาพพื้นหลังขนาดเล็กสำหรับอุปกรณ์มือถือจึงเป็นความคิดที่ดี
รูปภาพที่ฉันใช้ในการสาธิตมีความละเอียด 5500x3600px ความละเอียดนี้เพียงพอสำหรับจอไวด์สกรีนส่วนใหญ่ จอคอมพิวเตอร์, ปัจจุบันมีวางจำหน่ายแล้ว. แต่สำหรับสิ่งนี้ คุณจะต้องประมวลผลไฟล์ขนาด 1.7MB
ภาระเพิ่มเติมมหาศาลเพียงเพื่อประโยชน์ในการจัดวาง การถ่ายภาพพื้นหลังมันก็จะไม่เกิดผลดีแต่อย่างใด และแน่นอนว่าสิ่งนี้จะส่งผลเสียอย่างยิ่งต่อการเชื่อมต่อที่ใช้ อินเทอร์เน็ตบนมือถือ- ความละเอียดนี้ยังมากเกินไปสำหรับอุปกรณ์ที่มีหน้าจอขนาดเล็ก (เราจะดูรายละเอียดเพิ่มเติมในภายหลัง) มาดูกระบวนการทั้งหมดกัน
HTML
สิ่งที่คุณต้องการสำหรับมาร์กอัปคือ:
เราจะแต่งตั้ง ภาพพื้นหลังสำหรับองค์ประกอบเนื้อหาเพื่อให้รูปภาพเต็มวิวพอร์ตของเบราว์เซอร์เสมอ
อย่างไรก็ตาม เทคนิคนี้ใช้ได้กับทุกคนเช่นกัน องค์ประกอบบล็อก(เช่น div หรือแบบฟอร์ม) หากความกว้างและความสูงขององค์ประกอบบล็อกของคุณเป็นแบบไหลลื่น ภาพพื้นหลังจะปรับขนาดให้เต็มคอนเทนเนอร์เสมอ
ซีเอสเอส
ตั้งค่าสไตล์ต่อไปนี้สำหรับองค์ประกอบเนื้อหา:
body ( /* เส้นทางไปยังรูปภาพ */ background-image: url(images/พื้นหลัง-photo.jpg); /* ภาพพื้นหลังจะจัดกึ่งกลางแนวตั้งและแนวนอนเสมอ */ ตำแหน่งพื้นหลัง: กึ่งกลางกึ่งกลาง; /* ภาพพื้นหลัง ไม่ซ้ำกัน * / background-repeat: no-repeat; /* ภาพพื้นหลังได้รับการแก้ไขในวิวพอร์ต ดังนั้นจึงไม่เคลื่อนไหวเมื่อความสูงของเนื้อหามากกว่าความสูงของรูปภาพ */ การแนบพื้นหลัง: แก้ไขแล้ว; นี่คือสิ่งที่ทำให้ภาพพื้นหลังสามารถปรับให้เข้ากับขนาดของคอนเทนเนอร์ได้ */ background-size: cover; /* Set สีพื้นหลังซึ่งจะแสดงในขณะที่กำลังโหลดภาพพื้นหลัง */ background-color: #464646; -
ร่างกาย( /* เส้นทางไปยังรูปภาพ */ พื้นหลัง - รูปภาพ : url (รูปภาพ / พื้นหลัง - รูปภาพ .jpg ) ; /* ภาพพื้นหลังจะจัดกึ่งกลางแนวตั้งและแนวนอนเสมอ */ /* ภาพพื้นหลังไม่ซ้ำกัน */ พื้นหลัง - ทำซ้ำ : ไม่ - ทำซ้ำ ; /* ภาพพื้นหลังได้รับการแก้ไขในวิวพอร์ตแล้ว จึงไม่เลื่อนเมื่อความสูงของเนื้อหามากกว่าความสูงของภาพ */ /* นี่คือสิ่งที่ทำให้ภาพพื้นหลังปรับขนาดคอนเทนเนอร์ได้ */ พื้นหลัง - ขนาด : ปก ; /* กำหนดสีพื้นหลังที่จะแสดงขณะกำลังโหลดภาพพื้นหลัง */ พื้นหลัง - สี : #464646; |
คู่ทรัพย์สิน/มูลค่าที่สำคัญที่สุดที่ควรคำนึงถึงคือ:
ขนาดพื้นหลัง: ปก;
พื้นหลัง - ขนาด : ปก ; |
นี่คือจุดเริ่มต้นของความมหัศจรรย์ คู่คุณสมบัติ/ค่านี้บอกให้เบราว์เซอร์ปรับขนาดภาพพื้นหลังตามสัดส่วน เช่น เพื่อให้ความกว้างและความสูงเท่ากับหรือมากกว่าความกว้าง/ความสูงขององค์ประกอบ (ในกรณีของเราคือองค์ประกอบเนื้อหา)
อย่างไรก็ตาม มีปัญหาอย่างหนึ่งกับคู่คุณสมบัติ/ค่านี้: หากภาพพื้นหลังมีขนาดเล็กกว่าองค์ประกอบเนื้อหา จะเกิดอะไรขึ้นบนหน้าจอด้วย ความละเอียดสูงและ/หรือเมื่อคุณมีเนื้อหาจำนวนมากบนหน้าเว็บ เบราว์เซอร์จะซูมเข้าที่รูปภาพอย่างหลีกเลี่ยงไม่ได้ และอย่างที่เราทราบเมื่อเราเพิ่มขนาด บิตแมปคุณภาพของภาพจะลดลง (หรืออีกนัยหนึ่งคือเกิดพิกเซล)
การเพิ่มขนาดภาพจากขนาดดั้งเดิมจะส่งผลต่อคุณภาพของภาพ จำสิ่งนี้ไว้เมื่อคุณเลือก ภาพที่เหมาะสม- การสาธิตใช้รูปภาพขนาดใหญ่ 5500x3600px เพื่อ จอภาพไวด์สกรีนดังนั้นจึงต้องใช้เวลามาก หน้าจอขนาดใหญ่จึงเกิดการบิดเบือนคุณภาพ เดินหน้าต่อไป เพื่อให้แน่ใจว่าภาพพื้นหลังจะอยู่ตรงกลางวิวพอร์ตเสมอ เราจะเขียน:
ตำแหน่งพื้นหลัง: กึ่งกลาง;
พื้นหลัง - ตำแหน่ง : ศูนย์กลาง ศูนย์กลาง ; |
รายการนี้วางพื้นหลังบนแกนพิกัดที่กึ่งกลางของวิวพอร์ต ต่อไป เราต้องกำหนดว่าจะเกิดอะไรขึ้นเมื่อความสูงของเนื้อหาเกินความสูงของวิวพอร์ตที่มองเห็นได้ เมื่อสิ่งนี้เกิดขึ้น แถบเลื่อนจะปรากฏขึ้น
ใน ในกรณีนี้เราจำเป็นต้องตรวจสอบให้แน่ใจว่าภาพพื้นหลังยังคงอยู่ในตำแหน่งเดิมแม้ว่าผู้ใช้จะเลื่อนหน้าลงก็ตาม ในสถานการณ์นี้ รูปภาพจะสิ้นสุดเมื่อเลื่อน หรือจะเลื่อนเมื่อเลื่อนไปเรื่อย ๆ (ซึ่งอาจรบกวนผู้ใช้อย่างมาก) เพื่อแก้ไขพื้นหลัง เราตั้งค่าคุณสมบัติการแนบพื้นหลังเป็นแก้ไข
สิ่งที่แนบมากับพื้นหลัง: แก้ไขแล้ว;
พื้นหลัง - ไฟล์แนบ: แก้ไขแล้ว; |
ในการสาธิต ฉันได้เพิ่มตัวเลือก "โหลดเนื้อหา" เพื่อให้คุณสามารถดูว่าจะเกิดอะไรขึ้นเมื่อแถบเลื่อนปรากฏในเบราว์เซอร์เมื่อตั้งค่าคุณสมบัติการแนบพื้นหลังเป็นคงที่ คุณยังสามารถดาวน์โหลดการสาธิตและเล่นกับค่าคุณสมบัติการวางตำแหน่ง (เช่น การแนบพื้นหลังและตำแหน่งพื้นหลัง) เพื่อดูว่ามันส่งผลต่อการเลื่อนหน้าและภาพพื้นหลังอย่างไร ค่าทรัพย์สินที่เหลือค่อนข้างอธิบายได้ในตัว
ชวเลข CSS
ฉันได้ให้รายละเอียดคุณสมบัติพื้นหลังเพื่อให้อธิบายได้ง่ายขึ้น แบบฟอร์มย่อจะเทียบเท่า:
ร่างกาย ( พื้นหลัง: url (พื้นหลัง - ภาพถ่าย.jpg) ฝาครอบตรงกลาง ไม่ทำซ้ำ; )
ร่างกาย( พื้นหลัง : url (พื้นหลัง - ภาพถ่าย .jpg ) ฝาครอบตรงกลาง ไม่ - แก้ไขซ้ำ; |
สิ่งที่คุณต้องทำคือเปลี่ยนค่า URL ให้ชี้ไปที่ภาพพื้นหลังของคุณ
ทางเลือก: คิวรีสื่อสำหรับหน้าจอขนาดเล็ก
สำหรับหน้าจอขนาดเล็กที่ผมใช้ โปรแกรมโฟโต้ชอปเพื่อย่อขนาดภาพพื้นหลังดั้งเดิมตามสัดส่วนเป็น 768x505px และฉันก็ใช้ Smush.it เพื่อลดขนาดอีกเล็กน้อย ด้วยเหตุนี้ ขนาดไฟล์จึงลดลงจาก 1741KB เป็น 114KB เหล่านั้น. ขนาดภาพลดลง 93%
โปรดอย่าเข้าใจฉันผิด ขนาด 114KB ยังมีอีกมากสำหรับองค์ประกอบการออกแบบที่สวยงามล้วนๆ เมื่อพิจารณาถึงการโหลดเพิ่มเติมที่ 114KB ฉันจะใช้ไฟล์ดังกล่าวก็ต่อเมื่อฉันเห็นโอกาสในการปรับปรุงประสบการณ์ผู้ใช้ (UX) ของไซต์ได้อย่างมาก เนื่องจาก... วี ช่วงเวลาปัจจุบันส่วนแบ่งสำคัญของการรับส่งข้อมูลอินเทอร์เน็ตมาจากรูปภาพของอุปกรณ์มือถือ: url (images/พื้นหลัง-photo-mobile-devices.jpg);
คิวรีสื่อมีขีดจำกัดความกว้างที่ความกว้างสูงสุด: 767px ซึ่งหมายความว่าหากวิวพอร์ตของเบราว์เซอร์มีขนาดใหญ่กว่า 767px ภาพพื้นหลังขนาดใหญ่จะถูกโหลด
ข้อเสียของการใช้คิวรีสื่อนี้คือ หากคุณเปลี่ยนความกว้างของหน้าต่างเบราว์เซอร์ เช่น จาก 1200px เป็น 640px (หรือกลับกัน) คุณจะเห็นทันทีที่รูปภาพพื้นหลังขนาดเล็กหรือใหญ่โหลดขึ้นมา
นอกจากนี้เนื่องจากอุปกรณ์หน้าจอขนาดเล็กบางรุ่นอาจแสดงผลได้ มากกว่าพิกเซล เช่น iPhone 5 c จอแสดงผลเรตินาสามารถแสดงความละเอียด 1136x640px - ภาพพื้นหลังขนาดเล็กจะเป็นพิกเซล
เพื่อสรุปมันขึ้นมา
คุณสามารถดูเพิ่มเติม รุ่นปัจจุบัน ซอร์สโค้ดจากบทความบทช่วยสอนนี้บน GitHub ฉันเตือนคุณได้เพียงสิ่งเดียว: โปรดใช้เทคนิคนี้ด้วยความระมัดระวัง เนื่องจากไฟล์ขนาดใหญ่สามารถสร้างความเสียหายร้ายแรงให้กับ UX ได้ โดยเฉพาะอย่างยิ่งหากผู้ใช้ใช้การเชื่อมต่ออินเทอร์เน็ตที่ช้าและไม่น่าเชื่อถือ นี่เป็นอีกเหตุผลหนึ่งว่าทำไมคุณควรเลือกสีพื้นหลังที่เหมาะสมเพื่อให้ผู้ใช้สามารถอ่านเนื้อหาในขณะที่กำลังโหลดภาพพื้นหลังได้
หนึ่งในภารกิจหลักเมื่อ รูปแบบที่ปรับเปลี่ยนได้- นี่คือการปรับขนาดรูปภาพ (รวมถึงพื้นหลัง) เพื่อให้แสดงบนอุปกรณ์ได้อย่างถูกต้อง ความละเอียดที่แตกต่างกันหน้าจอ
พร้อมรูปภาพในแท็ก รูปภาพง่ายมาก: เมื่อคุณตั้งค่าความกว้างเป็นเปอร์เซ็นต์ ความสูงจะถูกปรับขนาดโดยอัตโนมัติ วิธีการนี้ไม่สามารถใช้กับภาพพื้นหลังได้
เคล็ดลับนี้คือการตั้งค่าเปอร์เซ็นต์การเติม ( ช่องว่างภายใน) องค์ประกอบ. วิธีการนี้ได้รับการเผยแพร่ครั้งแรกในบทความบล็อกเก่า A List Apart แต่ก็ยังใช้งานได้ดี
สมมติว่าคุณมีภาพพื้นหลังขนาด 800 x 450 พิกเซล และคุณต้องการทำให้เป็นพื้นหลังด้วยอัตราส่วนคงที่ที่ 16:9 รหัสด้านล่างใช้สำหรับการเยื้อง พิกเซลแต่ทุกอย่างจะได้ผลด้วย em- นอกจากนี้ยังมีองค์ประกอบรูป HTML5 สำหรับ การดำเนินการที่ถูกต้องในเบราว์เซอร์รุ่นเก่าคุณสามารถใช้ HTML5 shiv ได้
Div.column ( ความกว้างสูงสุด: 800px; ) รูป.อัตราส่วนคงที่ ( padding-top: 56.25%; /* 450px/800px = 0.5625 */ )
การเพิ่มพื้นหลัง
องค์ประกอบที่ได้จะปรับขนาดตามที่คาดไว้ แต่ถ้าคุณเพิ่มภาพพื้นหลัง ผลลัพธ์จะไม่ดีนัก การใช้แอตทริบิวต์ ขนาดพื้นหลัง: ปก- น่าเสียดาย อิน อินเทอร์เน็ตเอ็กซ์พลอเรอร์ 8 วิธีนี้ใช้ไม่ได้ผล เพื่อแก้ปัญหานี้ เราวางตำแหน่งพื้นหลังโดยใช้ ตำแหน่งพื้นหลัง- ภาพพื้นหลังต้องมีความกว้างอย่างน้อยเท่ากับ ความกว้างสูงสุดองค์ประกอบ. มิฉะนั้นภาพจะถูกครอบตัด
Div.column ( /* The ภาพพื้นหลังต้องมีความกว้าง 800px */ ความกว้างสูงสุด: 800px; ) รูป.อัตราส่วนคงที่ ( padding-top: 56.25%; /* 450px/800px = 0.5625 */ background-image: url(http://voormedia.com/examples/north-sea-regatta.jpg); ขนาดพื้นหลัง: ปก; -moz-พื้นหลัง-ขนาด: ปก; /* Firefox 3.6 */ ตำแหน่งพื้นหลัง: กึ่งกลาง;
สมมติว่าคุณมีภาพพื้นหลังขนาดใหญ่ที่ดูสวยงามบนเดสก์ท็อป แต่ต่อไป อุปกรณ์เคลื่อนที่มันจะเล็กเกินไป ดังนั้นวิธีแก้ปัญหาที่ถูกต้องคือลดความกว้างของพื้นหลัง
ตัวอย่างเช่น รูปภาพที่มีความกว้าง 800 x 200 พิกเซล (4:1) หน้าจอขนาดเล็กที่มีความกว้าง 300 พิกเซล ควรลดลงเหลือ 150 พิกเซล (2:1) มานับคุณสมบัติกันดีกว่า ความสูงและ ช่องว่างด้านบน:
รูปภาพแสดงอัตราส่วนภาพของภาพพื้นหลังเมื่อ ความกว้างที่แตกต่างกัน- ความชันของกราฟสอดคล้องกับคุณลักษณะ ช่องว่างด้านบน, ความสูงเริ่มต้น - ถึงแอตทริบิวต์ ความสูง- รหัสผลลัพธ์คือ:
Div.column ( /* ภาพพื้นหลังต้องมีความกว้าง 800px */ ความกว้างสูงสุด: 800px; ) รูป.fluidratio ( padding-top: 10%; /* ความชัน */ ความสูง: 120px; /* ความสูงเริ่มต้น */ พื้นหลัง- รูปภาพ: url(http://voormedia.com/examples/amsterdam.jpg); ขนาดพื้นหลัง: ปก; -moz-พื้นหลัง-ขนาด: ปก; /* Firefox 3.6 */ ตำแหน่งพื้นหลัง: กึ่งกลาง /* Internet Explorer 7 /8 */ )
การใช้ SCSS ในการคำนวณ
คุณสมบัติ ช่องว่างด้านบนและ ความสูงสามารถคำนวณได้โดยอัตโนมัติโดยใช้ตัวประมวลผลล่วงหน้าเช่น SCSS ตัวอย่างของสิ่งนี้:/* คำนวณอัตราส่วนของเหลวตามสองมิติ (ความกว้าง/ความสูง) */ @mixin Fluid-ratio($large-size, $small-size) ( $width-large: nth($large-size, 1); $width -ขนาดเล็ก: nth($ขนาดเล็ก, 1); $height-large: nth($ขนาดใหญ่, 2); $height-small: nth($ขนาดเล็ก, 2); / ($width-large - $width-small); $height-small - $width-small * $slope; 100%; ; /* Firefox 3.6 */ background-position: center; /* Internet Explorer 7/8 */ ) รูป.fluidratio ( /* องค์ประกอบนี้จะมีอัตราส่วนของเหลวจาก 4:1 ที่ 800px ถึง 2:1 ที่ 300px. */ @ รวมอัตราส่วนของเหลว (800px 200px, 300px 150px); ภาพพื้นหลัง: url (http://voormedia.com/examples/amsterdam.jpg);
เทคโนโลยีเว็บ เช่นเดียวกับเทรนด์การออกแบบต่างๆ ไม่ได้หยุดนิ่ง ดังนั้นทุกครั้งที่มีคุณลักษณะดั้งเดิมและความแตกต่างสำหรับเว็บไซต์ปรากฏขึ้น หนึ่งใน “ทิศทาง” เหล่านี้คือการใช้พื้นหลัง (แบ็คกราวด์) ซึ่งขยายทั่วทั้งหน้าจอทั้งด้านความกว้างและความสูง ฉันบอกประมาณประมาณหนึ่งปีที่แล้ว - รูปภาพถูกวางไว้ในส่วนหัวของบล็อกและ "เปลี่ยน" เป็นสีพื้นหลังหลักของหน้าเว็บอย่างราบรื่น หากต้องการคุณสามารถเพิ่มได้
การวางรูปภาพขนาดใหญ่ที่ปรับขนาดได้เป็นพื้นหลังถือเป็นวิธีใหม่และซับซ้อนยิ่งขึ้น ซึ่งเป็นวิธีแก้ปัญหาที่ฉันพบในบทความนี้
เป้า บทเรียนนี้วางภาพพื้นหลังบนเว็บไซต์ซึ่งจะครอบคลุมพื้นหลังทั้งหมดของหน้าต่างเบราว์เซอร์อย่างต่อเนื่อง สิ่งที่ต้องทำจริงๆ:
- เติมทั้งหน้าด้วยรูปภาพเดียวโดยไม่มีช่องว่าง
- ปรับขนาดภาพหากจำเป็น (ลดขนาดหน้าต่างเบราว์เซอร์)
- รักษาสัดส่วนของภาพ
- วางตำแหน่งรูปภาพไว้ตรงกลางหน้า
- ไม่มีแถบเลื่อนบนหน้า;
- โซลูชันข้ามเบราว์เซอร์ที่เหมาะสำหรับเบราว์เซอร์ที่แตกต่างกัน
- การใช้งานโดยไม่มีเทคโนโลยีของบุคคลที่สาม เช่น แฟลช
ดังนั้นจึงมีวิธีแก้ปัญหาที่เหมาะสมสำหรับพื้นหลังเว็บไซต์แบบเต็มหน้าจอหลายประการ
โซลูชันที่ยอดเยี่ยม เรียบง่าย และก้าวหน้าโดยใช้ CSS3
เพื่อให้งานนี้สำเร็จ เราสามารถใช้คุณสมบัติขนาดพื้นหลังใน CSS3 เราจะใช้องค์ประกอบ html ที่ดีกว่าเนื้อหา มาตั้งค่าพื้นหลังให้คงที่และอยู่กึ่งกลาง จากนั้นใช้ค่าปกในขนาดพื้นหลัง
html ( พื้นหลัง : url (images/bg.jpg ) ไม่ทำซ้ำจุดกึ่งกลาง ศูนย์กลางคงที่ ; -webkit-พื้นหลังขนาด: cover; -moz-พื้นหลังขนาด: cover; -o-พื้นหลังขนาด: ฝาครอบ; ขนาดพื้นหลัง: ปิดบัง) |
html ( พื้นหลัง: url (รูปภาพ/bg.jpg) ไม่ทำซ้ำจุดกึ่งกลางตรงกลาง -webkit-พื้นหลังขนาด: ปก; -moz-พื้นหลังขนาด: ปก; -o-พื้นหลังขนาด: ปก; ขนาดพื้นหลัง: ปิดบัง)
โซลูชันนี้รองรับโดยโซลูชันยอดนิยมเกือบทั้งหมดบนเครือข่าย:
- Firefox 3.6+ (Firefox 4 รองรับเวอร์ชันนำหน้าที่ไม่ใช่ผู้ขาย)
- Opera 10+ (Opera 9.5 รองรับขนาดพื้นหลัง แต่ไม่มีค่าปก)
- Chrome อะไรก็ได้+
- ไออี 9+
- ซาฟารี 3+
Goltzman คนหนึ่งพบวิธีแก้ปัญหาที่ช่วยให้แฮ็กทำงานใน IE ได้
ตัวกรอง : progid: DXImageTransform.Microsoft .AlphaImageLoader(src= ".myBackground.jpg" , sizingMethod= "scale" ) ; -ms-ตัวกรอง:; |
"progid:DXImageTransform.Microsoft.AlphaImageLoader(src="myBackground.jpg", sizingMethod="scale")"
ตัวกรอง: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=".myBackground.jpg", sizingMethod="scale"); -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src="myBackground.jpg", sizingMethod="scale""); แต่ใส่ใจ!!! นี่อาจทำให้เกิดปัญหากับลิงก์บนเพจได้ อย่างไรก็ตาม หลังจากนั้นไม่นาน Matt Litherland ก็เสริมว่า โดยหลักการแล้วโค้ดสามารถใช้ได้แต่ไม่สามารถใช้กับสิ่งนี้ได้องค์ประกอบ HTML
หรือเนื้อหา แต่คุณต้องใช้งานทุกอย่างผ่าน div ที่มีความสูงและความกว้าง 100%ซีเอสเอส
- แฮ็คหมายเลข 1 เวอร์ชันทางเลือกนำเสนอโดย Doug Neiner ในกรณีนี้ จะใช้องค์ประกอบที่ฝังอยู่ในเพจ
ซึ่งสามารถปรับขนาดได้ในเบราว์เซอร์ใดก็ได้ เราตั้งค่าความสูงขั้นต่ำซึ่งเติมเต็มหน้าต่างเบราว์เซอร์ในแนวตั้ง และตั้งค่าความกว้างเป็น 100% ซึ่งเติมเต็มหน้าในแนวนอน นอกจากนี้เรายังตั้งค่าความกว้างขั้นต่ำเพื่อให้รูปภาพไม่เล็กไปกว่าความเป็นจริง img.bg (/* ตั้งกฎให้เติมพื้นหลัง */ ความสูงขั้นต่ำ: 100%;ความกว้างขั้นต่ำ: 1024px; /* ตั้งค่าสัดส่วนตามสัดส่วน */ความกว้าง: 100%; |
img.bg ( /* ตั้งกฎให้เติมพื้นหลัง */ min-height: 100%; min-width: 1024px; /* ตั้งค่าสัดส่วนสัดส่วน */ ความกว้าง: 100%; ความสูง: auto; /* ตั้งค่าตำแหน่ง */ ตำแหน่ง: คงที่ด้านบน: 0; ซ้าย: 0; ) @media หน้าจอและ (ความกว้างสูงสุด: 1024px) ( /* เฉพาะภาพนี้ */ img.bg ( ซ้าย: 50%; ขอบซ้าย: -512px; / * 50% */ ) )
ใช้งานได้กับเบราว์เซอร์คุณภาพสูงทุกเวอร์ชัน - Safari / Opera / Firefox และ Chrome เช่นเคย IE มีความแตกต่างของตัวเอง:
- IE 9 - ใช้งานได้;
- IE 7/8 - ส่วนใหญ่มักจะทำงานได้อย่างถูกต้อง แต่ไม่จัดรูปภาพให้เล็กกว่าหน้าต่างเบราว์เซอร์
- IE 6 - สามารถปรับแต่งได้ แต่ใครจะต้องการเบราว์เซอร์นี้ล่ะ
หรือเนื้อหา แต่คุณต้องใช้งานทุกอย่างผ่าน div ที่มีความสูงและความกว้าง 100%- แฮ็คตัวเลือกที่ 2
อีกทางเลือกหนึ่งในการแก้ปัญหาด้วย ใช้ CSSสไตล์คือการวางรูปภาพอินไลน์บนเพจโดยมีตำแหน่งคงที่ทางด้านซ้าย มุมบนจากนั้นตั้งค่าความกว้างขั้นต่ำและความสูงขั้นต่ำเป็น 100% โดยที่ยังคงสัดส่วนไว้
#bg ( ตำแหน่ง : คงที่ ; บน : -50% ; ซ้าย : -50% ; ความกว้าง : 200% ; ความสูง : 200% ; ) #bg img ( ตำแหน่ง : สัมบูรณ์ ; บน : 0 ; ซ้าย : 0 ; ขวา : 0 ; ด้านล่าง : 0 ; ระยะขอบ : อัตโนมัติ ; |
#bg ( ตำแหน่ง:คงที่; บน:-50%; ซ้าย:-50%; ความกว้าง:200%; ความสูง:200%; ) #bg img ( ตำแหน่ง:สัมบูรณ์; บน:0; ซ้าย:0; ขวา:0; ด้านล่าง:0; ระยะขอบ:อัตโนมัติ; ความกว้างขั้นต่ำ:50%;
แฮ็คใช้งานได้ใน:
- Safari / Chrome / Firefox (ด้วย รุ่นแรกๆไม่ได้ทดสอบ แต่ทำงานได้ดีในอันล่าสุด)
- ไออี 8+
- Opera (เวอร์ชันใดก็ได้) และเมื่อใช้ร่วมกับ IE ทั้งคู่จะมีปัญหาในลักษณะเดียวกันโดยมีข้อผิดพลาดในการกำหนดตำแหน่ง
วิธีการด้วย jQuery
ตัวเลือกนี้จะง่ายกว่ามาก (จากมุมมอง CSS) หากเรารู้ว่าอัตราส่วนภาพของรูปภาพ (img ที่ใช้เป็นพื้นหลัง) มีขนาดใหญ่กว่าหรือเล็กกว่าอัตราส่วนปัจจุบันของหน้าต่างเบราว์เซอร์ หากน้อยกว่านั้นเราก็สามารถใช้ได้เพียง width = 100% เท่านั้น และหน้าต่างก็จะมีความกว้างและความสูงเท่ากัน หากมากกว่านั้น คุณสามารถระบุได้เฉพาะความสูง = 100% ให้เต็มหน้าต่างทั้งหมด
ข้อมูลทั้งหมดเข้าถึงได้ผ่าน JavaScript รหัสที่ใช้มีดังนี้:
#bg ( ตำแหน่ง : แก้ไข ; บน : 0 ; ซ้าย : 0 ; ) .bgwidth ( กว้าง : 100% ; ) .bgheight ( สูง : 100% ; ) |
#bg ( ตำแหน่ง: คงที่; บน: 0; ซ้าย: 0; ) .bgwidth ( กว้าง: 100%; ) .bgheight ( สูง: 100%; )
< aspectRatio) { $bg .removeClass() .addClass("bgheight"); } else { $bg .removeClass() .addClass("bgwidth"); } } theWindow.resize(function() { resizeBg(); }).trigger("resize"); }); |
$(window).load(function() ( var theWindow = $(window), $bg = $("#bg"),spectRatio = $bg.width() / $bg.height(); function resizeBg() ( ถ้า ((theWindow.width() / theWindow.height())< aspectRatio) { $bg .removeClass() .addClass("bgheight"); } else { $bg .removeClass() .addClass("bgwidth"); } } theWindow.resize(function() { resizeBg(); }).trigger("resize"); });
ในความคิดของฉัน ในกรณีนี้ไม่ได้ทำการจัดกึ่งกลาง (เท่าที่ฉันเข้าใจ) แต่ก็สามารถทำได้ รองรับเบราว์เซอร์เดสก์ท็อปส่วนใหญ่ รวมถึง IE7+ ในที่สุดผู้เขียนบทความเกี่ยวกับแฮ็กได้เตรียมชุดไฟล์ตัวอย่างซึ่งมีการใช้งานทั้งหมดนี้ - คุณสามารถดาวน์โหลดได้ ความคิดเห็นต่อบทความต้นฉบับยังมีข้อมูลและการอภิปรายอยู่บ้าง แม้ว่าส่วนใหญ่แล้วก็ตาม รายละเอียดที่สำคัญผู้เขียนได้เพิ่มแบบเสาลงในโพสต์ และข้าพเจ้าได้แปลและระบุให้ด้วย แน่นอนว่าตัวอย่างจะช่วยให้คุณเข้าใจทั้งหมดนี้ โดยทั่วไป หากไม่ใช่เพราะ "มุขตลก" คงที่จาก IE7 การแฮ็กที่กล่าวมาทั้งหมดก็ถือว่าเหมาะสม
ป.ล. ต้องการซื้อหนังสือ? - คุณไม่จำเป็นต้องไปที่ร้านเพราะตอนนี้ร้านหนังสือออนไลน์ให้คุณทำทุกอย่างทางออนไลน์ได้ - เลือก ชำระเงิน และจัดส่งถึงบ้าน
การแปล: วลาด เมอร์เซวิช
ใน CSS 2.1 ภาพพื้นหลังที่ใช้กับคอนเทนเนอร์จะยังคงอยู่ ขนาดคงที่- โชคดีที่ CSS3 ได้แนะนำคุณสมบัติขนาดพื้นหลังซึ่งช่วยให้สามารถขยายหรือบีบอัดพื้นหลังได้ เหมาะอย่างยิ่งหากคุณกำลังสร้างเทมเพลตการออกแบบเว็บไซต์แบบตอบสนอง
มีหลายวิธีในการกำหนดขนาด - ดูที่หน้าสาธิตขนาดพื้นหลัง
การปรับขนาดแบบสัมบูรณ์
อาจใช้หน่วยวัด
ขนาดพื้นหลัง: กว้าง-สูง;
ตามค่าเริ่มต้น ความกว้างและความสูงจะถูกตั้งค่าเป็น auto ซึ่งจะออกไป ขนาดดั้งเดิมภาพ
คุณสามารถถามได้ ขนาดใหม่รูปภาพโดยใช้หน่วยวัดสัมบูรณ์ เช่น px, em, cm ฯลฯ สัดส่วนจะเปลี่ยนไปหากจำเป็น ตัวอย่างเช่น หากภาพพื้นหลังของเรามีขนาด 200x200 พิกเซล โค้ดต่อไปนี้จะคงความสูงนี้ไว้ แต่จะทำให้ความกว้างใหญ่ขึ้นครึ่งหนึ่ง:
ขนาดพื้นหลัง: 100px 200px;
หากระบุเพียงค่าเดียวจะถือเป็นความกว้าง ความสูงถูกตั้งค่าเป็นอัตโนมัติและสัดส่วนจะยังคงอยู่:
ขนาดพื้นหลัง: 100px;
/* คล้ายกัน */ ขนาดพื้นหลัง: อัตโนมัติ 100px;
รหัสนี้ปรับขนาดภาพจาก 200x200 ถึง 100x100 พิกเซล
การเปลี่ยนแปลงขนาดสัมพัทธ์เป็นเปอร์เซ็นต์
หากใช้เปอร์เซ็นต์ ขนาดจะขึ้นอยู่กับองค์ประกอบ ไม่ใช่รูปภาพ:
ขนาดพื้นหลัง: อัตโนมัติ 50%;
ความกว้างของภาพพื้นหลังจึงขึ้นอยู่กับขนาดของคอนเทนเนอร์ หากคอนเทนเนอร์มีความกว้าง 500px ขนาดรูปภาพของเราจะลดลงเหลือ 250x250 การใช้เปอร์เซ็นต์จะมีประโยชน์สำหรับการออกแบบที่ปรับเปลี่ยนได้
- เปลี่ยนความกว้างของหน้าสาธิตเพื่อดูว่าขนาดเปลี่ยนแปลงไปอย่างไร
คุณสมบัติขนาดพื้นหลังยังเข้าใจคำสำคัญมี มันปรับขนาดภาพให้เต็มคอนเทนเนอร์ กล่าวอีกนัยหนึ่ง รูปภาพจะขยายหรือย่อตามสัดส่วน แต่ความกว้างและความสูงจะไม่เกินขนาดของคอนเทนเนอร์:
ขนาดพื้นหลัง: ประกอบด้วย;
เติมพื้นหลัง
คุณสมบัติขนาดพื้นหลังยังเข้าใจคำสำคัญปกด้วย รูปภาพจะถูกปรับขนาดให้เต็มคอนเทนเนอร์ แต่หากอัตราส่วนแตกต่างกัน รูปภาพจะถูกครอบตัด
ขนาดพื้นหลัง: ปก;
การปรับขนาดพื้นหลังหลายแบบ
สามารถปรับขนาดพื้นหลังได้หลายแบบโดยใช้รายการค่าที่คั่นด้วยเครื่องหมายจุลภาคในลำดับเดียวกัน
พื้นหลัง: url("sheep.png") 60% 90% ไม่ซ้ำ, url("sheep.png") 40% 50% ไม่ซ้ำ, url("sheep.png") 10% 20% ไม่ซ้ำ # 393;
ขนาดพื้นหลัง: 240px 210px, อัตโนมัติ, 150px;
ทำงานในเบราว์เซอร์
เบราว์เซอร์เวอร์ชันล่าสุดทั้งหมดรองรับขนาดพื้นหลังโดยไม่มีคำนำหน้า IE8 และต่ำกว่าไม่รองรับคุณสมบัตินี้ คุณสามารถใช้ตัวกรอง IE เพื่อจำลองเนื้อหาและค่าปกได้ แต่ไม่มีวิธีเปลี่ยนขนาดภาพพื้นหลัง