เว็บไซต์จำนวนมากขอทรัพยากรจำนวนมาก เช่น รูปภาพ ซึ่งไม่ได้รับการเพิ่มประสิทธิภาพสำหรับบางหน้าจอ และส่งไฟล์ CSS ขนาดใหญ่ซึ่งมีสไตล์ที่อุปกรณ์บางชนิดจะไม่ใช้เลย การใช้คิวรี่สื่อเป็นเทคนิคที่นิยมใช้ในการส่งสไตล์ชีตและองค์ประกอบที่ได้รับการปรับแต่งไปยังหน้าจอต่างๆ เพื่อลดปริมาณข้อมูลที่โอนไปยังผู้ใช้ และปรับปรุงประสิทธิภาพการโหลดหน้าเว็บ คู่มือนี้แสดงวิธีใช้คิวรี่สื่อเพื่อส่งรูปภาพที่มีขนาดใหญ่เท่าที่จำเป็นเท่านั้น ซึ่งเป็นเทคนิคที่เรียกกันโดยทั่วไปว่ารูปภาพที่ปรับเปลี่ยนตามอุปกรณ์
ข้อกำหนดเบื้องต้น
คู่มือนี้จะถือว่าคุณคุ้นเคยกับเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome คุณสามารถใช้เครื่องมือสำหรับนักพัฒนาเว็บของเบราว์เซอร์อื่นแทนได้หากต้องการ คุณเพียงแค่ต้องจับคู่ภาพหน้าจอของ Chrome DevTools ในคู่มือนี้กลับไปยังฟีเจอร์ที่เกี่ยวข้องในเบราว์เซอร์ที่คุณเลือก
ทำความเข้าใจภาพพื้นหลังที่ปรับเปลี่ยนตามอุปกรณ์
ก่อนอื่น ให้วิเคราะห์การจราจรของข้อมูลในเครือข่ายของการสาธิตที่ยังไม่ได้เพิ่มประสิทธิภาพ
- เปิดเดโมที่ไม่ได้เพิ่มประสิทธิภาพในแท็บ Chrome ใหม่
- กด "Control+Shift+J" (หรือ "Command+Option+J" ใน Mac) เพื่อเปิดเครื่องมือสำหรับนักพัฒนาเว็บ
- คลิกแท็บเครือข่าย
- โหลดหน้าเว็บซ้ำ
คุณจะเห็นได้ว่ารูปภาพเดียวที่มีการร้องขอคือ background-desktop.jpg
ซึ่งมีขนาด 1006KB
ปรับขนาดหน้าต่างเบราว์เซอร์และสังเกตเห็นว่าบันทึกเครือข่ายไม่แสดงคำขอใหม่ใดๆ ที่หน้าเว็บนั้นสร้างขึ้น ซึ่งหมายความว่าจะมีการใช้พื้นหลังรูปภาพเดียวกันสำหรับหน้าจอทุกขนาด
คุณสามารถดูสไตล์ที่ควบคุมภาพพื้นหลังได้ใน style.css ดังนี้
body {
background-position: center center;
background-attachment: fixed;
background-repeat: no-repeat; background-size: cover;
background-image: url(images/background-desktop.jpg);
}
ต่อไปนี้เป็นความหมายของแต่ละพร็อพเพอร์ตี้ที่ใช้
background-position: center center
: จัดรูปภาพให้อยู่กึ่งกลางในแนวตั้งและแนวนอนbackground-repeat: no-repeat
: แสดงรูปภาพเพียงครั้งเดียวbackground-attachment: fixed
: ระวังอย่าให้ภาพพื้นหลังต้องเลื่อนbackground-size: cover
: ปรับขนาดรูปภาพให้ครอบคลุมทั้งคอนเทนเนอร์background-image: url(images/background-desktop.jpg)
: URL ของรูปภาพ
เมื่อนำมารวมกัน รูปแบบเหล่านี้จะบอกให้เบราว์เซอร์ปรับภาพพื้นหลังตามความสูงและความกว้างของหน้าจอที่แตกต่างกัน ซึ่งเป็นขั้นตอนแรกในการสร้างพื้นหลังที่ตอบสนองตามอุปกรณ์
การใช้ภาพพื้นหลังภาพเดียวสำหรับหน้าจอทุกขนาดมีข้อจำกัดบางประการดังนี้
- ไบต์ที่ส่งในจำนวนเท่ากันโดยไม่คำนึงถึงขนาดของหน้าจอ แม้ว่าในอุปกรณ์บางเครื่อง เช่น โทรศัพท์ พื้นหลังรูปภาพที่มีขนาดเล็กกว่าและน้ำหนักเบากว่าก็ดูดีพอๆ กัน โดยทั่วไป คุณควรส่งรูปภาพที่มีขนาดเล็กที่สุดซึ่งยังคงดูดีบนหน้าจอของผู้ใช้เพื่อปรับปรุงประสิทธิภาพและบันทึกข้อมูลผู้ใช้
- ในอุปกรณ์ขนาดเล็ก รูปภาพจะถูกยืดหรือตัดออกเพื่อให้ครอบคลุมทั้งหน้าจอ ซึ่งอาจซ่อนส่วนที่เกี่ยวข้องของพื้นหลังไว้ให้ผู้ใช้เห็น
ในส่วนถัดไป คุณจะได้เรียนรู้วิธีใช้การเพิ่มประสิทธิภาพเพื่อโหลดภาพพื้นหลังต่างๆ ตามอุปกรณ์ของผู้ใช้
ใช้คิวรี่สื่อ
การใช้คิวรี่สื่อเป็นเทคนิคทั่วไปในการประกาศสไตล์ชีตที่จะนำไปใช้กับสื่อหรืออุปกรณ์บางประเภทเท่านั้น โดยใช้งานโดยใช้กฎ@media ซึ่งจะช่วยให้คุณกำหนดชุดเบรกพอยท์ที่มีการระบุรูปแบบเฉพาะ
เมื่อเป็นไปตามเงื่อนไขที่กฎ @media
กำหนด (เช่น ความกว้างหน้าจอที่กำหนด) ระบบจะใช้กลุ่มรูปแบบที่กำหนดไว้ภายในเบรกพอยท์
ขั้นตอนต่อไปนี้สามารถใช้กับการนำข้อความค้นหาสื่อไปใช้กับเว็บไซต์เพื่อให้มีการใช้รูปภาพที่ต่างกัน โดยขึ้นอยู่กับความกว้างสูงสุดของอุปกรณ์ที่ขอหน้าเว็บ
- ใน
style.css
นำบรรทัดที่มี URL ของภาพพื้นหลังออก:
body {
background-position: center center;
background-attachment: fixed;
background-repeat: no-repeat; background-size: cover;
background-image: url(images/background-desktop.jpg);
}
- ถัดไป ให้สร้างเบรกพอยท์สำหรับความกว้างของหน้าจอแต่ละหน้าจอ โดยอิงตามขนาดพิกเซลทั่วไปที่หน้าจออุปกรณ์เคลื่อนที่ แท็บเล็ต และเดสก์ท็อปมักมีขนาดดังนี้
สำหรับอุปกรณ์เคลื่อนที่
@media (max-width: 480px) {
body {
background-image: url(images/background-mobile.jpg);
}
}
สำหรับแท็บเล็ต:
@media (min-width: 481px) and (max-width: 1024px) {
body {
background-image: url(images/background-tablet.jpg);
}
}
สำหรับอุปกรณ์เดสก์ท็อป
@media (min-width: 1025px) {
body {
background-image: url(images/background-desktop.jpg);
}
}
เปิด style.css เวอร์ชันที่ได้รับการเพิ่มประสิทธิภาพในเบราว์เซอร์เพื่อดูการเปลี่ยนแปลงที่เกิดขึ้น
วัดผลสำหรับอุปกรณ์ต่างๆ
จากนั้น ให้เห็นภาพเว็บไซต์ที่เป็นผลลัพธ์ในขนาดหน้าจอที่แตกต่างกันและในอุปกรณ์เคลื่อนที่จำลอง ดังนี้
- เปิดเว็บไซต์ที่เพิ่มประสิทธิภาพในแท็บ Chrome ใหม่
- ทำให้วิวพอร์ตแคบ (น้อยกว่า
480px
) - กด "Control+Shift+J" (หรือ "Command+Option+J" ใน Mac) เพื่อเปิดเครื่องมือสำหรับนักพัฒนาเว็บ
- คลิกแท็บเครือข่าย
- โหลดหน้าเว็บซ้ำ
สังเกตวิธีการขอรูปภาพ
background-mobile.jpg
- ทำให้วิวพอร์ตกว้างขึ้น เมื่อกว้างกว่า
480px
ให้สังเกตวิธีการขอbackground-tablet.jpg
เมื่อกว้างกว่า1025px
ให้สังเกตวิธีการขอbackground-desktop.jpg
เมื่อเปลี่ยนความกว้างของหน้าจอเบราว์เซอร์ ระบบจะขอรูปภาพใหม่
โดยเฉพาะอย่างยิ่งเมื่อความกว้างต่ำกว่าค่าที่กำหนดไว้ในเบรกพอยท์สำหรับอุปกรณ์เคลื่อนที่ (480 พิกเซล) คุณจะเห็นบันทึกเครือข่ายต่อไปนี้
พื้นหลังของอุปกรณ์เคลื่อนที่ใหม่จะเล็กกว่าบนเดสก์ท็อป 67%
ผลกระทบต่อการแสดงผลเนื้อหาขนาดใหญ่ที่สุด (LCP)
องค์ประกอบที่มีภาพพื้นหลัง CSS ถือว่าเป็นตัวเลือกที่เหมาะสำหรับ Largest Contentful Paint (LCP) อย่างไรก็ตาม โปรแกรมสแกนการโหลดล่วงหน้าของเบราว์เซอร์จะค้นพบภาพพื้นหลัง CSS ไม่ได้ ซึ่งหมายความว่าคุณอาจล่าช้า LCP ของเว็บไซต์หากไม่ระมัดระวัง
ตัวเลือกแรกที่คุณควรพิจารณาคือ ว่าจะให้รูปภาพตัวเลือก LCP ทำงานในองค์ประกอบ <img>
ที่มีแอตทริบิวต์ srcset
และ sizes
สำหรับการตอบสนองหรือไม่ ตัวสแกนการโหลดล่วงหน้าของเบราว์เซอร์จะค้นพบองค์ประกอบ <img>
และส่งคำขอสำหรับองค์ประกอบเหล่านั้นในขณะที่โปรแกรมแยกวิเคราะห์ถูกบล็อกเมื่อแสดงผล
หากคุณไม่สามารถ (หรือไม่ต้องการ) หลีกเลี่ยงการใช้ภาพพื้นหลัง CSS ตัวเลือกที่ 2 คือโหลดรูปภาพที่ตอบสนองตามอุปกรณ์ล่วงหน้าเพื่อให้แน่ใจว่าคุณได้โหลดรูปภาพที่ถูกต้องสำหรับขนาดวิวพอร์ตที่เหมาะสมไว้ล่วงหน้า แอตทริบิวต์ <link>
องค์ประกอบ media
, imagesrcset
และ imagesizes
บอกเบราว์เซอร์ว่าคำแนะนำทรัพยากรที่ระบุมีผลเฉพาะในเงื่อนไขวิวพอร์ตบางเงื่อนไข เพื่อหลีกเลี่ยงการโหลดล่วงหน้าที่สูญเปล่าหลายครั้งเมื่อคุณต้องการโหลดทรัพยากรเพียงทรัพยากรเดียวที่เหมาะสมกับวิวพอร์ตปัจจุบันเท่านั้น
สรุป
ในคู่มือนี้คุณจะได้เรียนรู้การใช้การค้นหาสื่อเพื่อขอภาพพื้นหลังที่ปรับแต่งให้เข้ากับขนาดหน้าจอที่เฉพาะเจาะจงและประหยัดไบต์เมื่อเข้าถึงเว็บไซต์บนอุปกรณ์ขนาดเล็ก เช่น โทรศัพท์มือถือ
คุณใช้กฎ @media
เพื่อใช้พื้นหลังที่ปรับเปลี่ยนตามอุปกรณ์ ทุกเบราว์เซอร์รองรับเทคนิคนี้อย่างกว้างขวาง
ฟีเจอร์ CSS ใหม่: image-set() ซึ่งสามารถใช้เพื่อวัตถุประสงค์เดียวกันแต่มีบรรทัดโค้ดน้อยลง ในขณะที่เขียนบทความนี้ คุณลักษณะนี้ไม่ได้รับการสนับสนุนในเบราว์เซอร์ทั้งหมด แต่คุณอาจต้องการติดตามการเปลี่ยนแปลงของการรับไปใช้งาน เนื่องจากฟีเจอร์นี้เป็นทางเลือกที่น่าสนใจแทนเทคนิคนี้