รูปภาพแบบตอบสนองและองค์ประกอบ Picture
ให้บริการรูปภาพขนาดเหมาะสมด้วย srcset, sizes และองค์ประกอบ picture ของ HTML
รูปภาพแบบตอบสนองและองค์ประกอบ Picture เป็นบทเรียน CSS Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CSS Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CSS Academy มีบทเรียนทั้งหมด 4 บทเรียน
ความท้าทายของรูปภาพที่ปรับตามหน้าจอ
การดาวน์โหลดรูปภาพความละเอียดเต็มสำหรับเดสก์ท็อปบนอุปกรณ์เคลื่อนที่ทำให้สิ้นเปลืองแบนด์วิดท์และทำให้เวลาโหลดช้าลง รูปภาพที่ปรับตามหน้าจอจะส่งรูปภาพที่มีขนาดเหมาะสมกับอุปกรณ์นั้น ๆ
พื้นฐาน max-width: 100%
กฎขั้นต่ำสำหรับรูปภาพที่ปรับตามหน้าจอคือ ป้องกันไม่ให้รูปภาพล้นคอนเทนเนอร์พร้อมรักษาอัตราส่วนภาพไว้
<img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1200' height='700'><rect width='1200' height='700' fill='%234f8cff'/><circle cx='600' cy='350' r='260' fill='%23ffb84d'/></svg>" alt="wide landscape" />ใช้ srcset สำหรับความละเอียดต่างกัน
แอตทริบิวต์ srcset ระบุแหล่งที่มาของรูปภาพได้หลายแหล่ง เบราว์เซอร์จะเลือกแหล่งที่เหมาะสมที่สุดโดยอิงจากอัตราส่วนพิกเซลของอุปกรณ์ (DPR):
<img
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='500'><rect width='800' height='500' fill='%234f8cff'/><circle cx='400' cy='250' r='180' fill='%237ee787'/></svg>"
srcset="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='500'><rect width='800' height='500' fill='%234f8cff'/><circle cx='400' cy='250' r='180' fill='%237ee787'/></svg> 1x, data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1600' height='1000'><rect width='1600' height='1000' fill='%234f8cff'/><circle cx='800' cy='500' r='360' fill='%237ee787'/></svg> 2x"
alt="A beautiful landscape"
style="max-width:100%;height:auto;display:block;"
>srcset พร้อมตัวระบุความกว้าง
ใช้ตัวระบุ w เพื่อบอกเบราว์เซอร์ถึงความกว้างจริงเป็นพิกเซลของไฟล์รูปภาพแต่ละไฟล์:
<img
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='500'><rect width='800' height='500' fill='%23ffb84d'/></svg>"
srcset="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='400' height='250'><rect width='400' height='250' fill='%23ffb84d'/></svg> 400w,
data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='500'><rect width='800' height='500' fill='%23ffb84d'/></svg> 800w,
data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1600' height='1000'><rect width='1600' height='1000' fill='%23ffb84d'/></svg> 1600w"
alt="Hero image"
style="max-width:100%;height:auto;display:block;"
>แอตทริบิวต์ sizes
แอตทริบิวต์ sizes บอกเบราว์เซอร์ว่ารูปภาพจะแสดงด้วยความกว้างเท่าใดในขนาดวิวพอร์ตต่าง ๆ ซึ่งช่วยให้เลือกแหล่งที่เหมาะสมจาก srcset ได้
<img
srcset="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='400' height='250'><rect width='400' height='250' fill='%23ffb84d'/></svg> 400w, data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='500'><rect width='800' height='500' fill='%23ffb84d'/></svg> 800w"
sizes="(max-width: 600px) 100vw, 50vw"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='500'><rect width='800' height='500' fill='%23ffb84d'/></svg>"
alt="Product photo"
style="max-width:100%;height:auto;display:block;"
>องค์ประกอบ picture
องค์ประกอบ <picture> ช่วยให้ควบคุมได้อย่างเต็มที่ว่าจะส่งไฟล์รูปภาพใด โดยใช้แหล่งที่มา <source> พร้อมเงื่อนไขของสื่อ เบราว์เซอร์จะใช้แหล่งที่มาตรงตามเงื่อนไขรายการแรก
<picture>
<source media="(min-width: 1024px)" srcset="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1200' height='400'><rect width='1200' height='400' fill='%234f8cff'/><text x='30' y='220' font-size='40' fill='white'>hero-large</text></svg>">
<source media="(min-width: 600px)" srcset="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='400'><rect width='800' height='400' fill='%237ee787'/><text x='30' y='220' font-size='36' fill='white'>hero-medium</text></svg>">
<img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='500' height='500'><rect width='500' height='500' fill='%23ffb84d'/><text x='20' y='260' font-size='30' fill='white'>hero-small</text></svg>" alt="Hero image" style="max-width:100%;height:auto;display:block;">
</picture>การจัดองค์ประกอบภาพด้วย picture
การจัดองค์ประกอบภาพจะส่งภาพที่ครอบตัดหรือจัดองค์ประกอบแตกต่างกันสำหรับหน้าจอแต่ละขนาด ไม่ใช่เพียงภาพเดียวกันในเวอร์ชันที่เล็กลง
<picture>
<!-- Wide crop for desktop -->
<source media="(min-width: 768px)" srcset="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='1200' height='300'><rect width='1200' height='300' fill='%23b57bff'/><text x='30' y='170' font-size='34' fill='white'>banner-wide (desktop crop)</text></svg>">
<!-- Square crop for mobile (this preview is narrow, so this is what renders) -->
<img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='500' height='500'><rect width='500' height='500' fill='%23b57bff'/><text x='20' y='260' font-size='26' fill='white'>banner-square (mobile crop)</text></svg>" alt="Banner" style="max-width:100%;height:auto;display:block;">
</picture>รูปแบบรูปภาพสมัยใหม่: WebP และ AVIF
องค์ประกอบ <picture> ช่วยให้เลือก รูปแบบได้ ควรส่งรูปแบบสมัยใหม่พร้อมรูปแบบสำรอง:
<picture>
<source type="image/avif" srcset="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='600' height='400'><rect width='600' height='400' fill='%233fd0c9'/><text x='20' y='210' font-size='28' fill='white'>photo</text></svg>">
<source type="image/webp" srcset="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='600' height='400'><rect width='600' height='400' fill='%233fd0c9'/><text x='20' y='210' font-size='28' fill='white'>photo</text></svg>">
<img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='600' height='400'><rect width='600' height='400' fill='%233fd0c9'/><text x='20' y='210' font-size='28' fill='white'>photo</text></svg>" alt="Photo" style="max-width:100%;height:auto;display:block;">
</picture>loading="lazy" เพื่อประสิทธิภาพ
แอตทริบิวต์ loading="lazy" จะเลื่อนการโหลดรูปภาพที่อยู่นอกหน้าจอออกไปจนกว่าผู้ใช้จะเลื่อนมาใกล้รูปภาพนั้น:
<img
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='500' height='500'><rect width='500' height='500' fill='%23ff6b6b'/><text x='20' y='260' font-size='26' fill='white'>product</text></svg>"
loading="lazy"
decoding="async"
alt="Product"
style="max-width:100%;height:auto;display:block;"
>แอตทริบิวต์ width และ height
ควรใส่แอตทริบิวต์ width และ height ให้รูปภาพเสมอ แอตทริบิวต์เหล่านี้ช่วยให้เบราว์เซอร์จองพื้นที่เลย์เอาต์ไว้ก่อนที่รูปภาพจะโหลดเสร็จ จึงป้องกันการขยับของเลย์เอาต์ (CLS) ได้
<img src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='600'><rect width='800' height='600' fill='%234f8cff'/><circle cx='400' cy='300' r='200' fill='%23ffd700'/></svg>" width="800" height="600" loading="lazy" alt="Photo" style="max-width:100%;height:auto;">object-fit สำหรับรูปภาพในคอนเทนเนอร์
เมื่อรูปภาพอยู่ในคอนเทนเนอร์ที่มีขนาดตายตัว ให้ใช้ object-fit เพื่อควบคุมวิธีเติมรูปภาพลงในพื้นที่:
<img class="thumbnail" src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='300'><rect width='800' height='300' fill='%23b57bff'/><text x='20' y='170' font-size='30' fill='white'>wide source photo</text></svg>" alt="thumbnail" />ตรวจสอบความเข้าใจอย่างรวดเร็ว
แอตทริบิวต์ HTML ใดทำงานร่วมกับ srcset เพื่อบอกเบราว์เซอร์ถึงความกว้างที่รูปภาพจะแสดงในขนาดวิวพอร์ตต่าง ๆ
สรุปทบทวน
รูปภาพที่ปรับตามหน้าจอใช้ srcset และ sizes เพื่อส่งรูปภาพที่มีขนาดเหมาะสม องค์ประกอบ <picture> ช่วยให้จัดองค์ประกอบภาพและเลือกรูปแบบได้ ควรใช้แอตทริบิวต์ loading="lazy", width/height และ object-fit กับรูปภาพในคอนเทนเนอร์เสมอ
คำถามที่พบบ่อย
บทเรียน “รูปภาพแบบตอบสนองและองค์ประกอบ Picture” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รูปภาพแบบตอบสนองและองค์ประกอบ Picture” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CSS Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CSS Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รูปภาพแบบตอบสนองและองค์ประกอบ Picture”
ให้บริการรูปภาพขนาดเหมาะสมด้วย srcset, sizes และองค์ประกอบ picture ของ HTML คุณปฏิบัติ CSS Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CSS Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน CSS Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “รูปภาพแบบตอบสนองและองค์ประกอบ Picture” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน CSS Academy นี้ได้ไหม
ได้ บทเรียน CSS Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แนวทาง Mobile-First เทียบกับ Desktop-First
- ความกว้างแบบลื่นไหลด้วยเปอร์เซ็นต์
- รูปแบบ Min-Width และ Max-Width
- รูปภาพแบบตอบสนองและองค์ประกอบ Picture