ให้เรตสมาชิก: 3 / 5

ดาวใช้งานดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

Adaptive Images (อแดปทีพ อิมเมจ) : Picture Element (พิคเจอ อเลเม้น) และ Srcset Attribute (เอสอาซีเซ็ท แอทริบิ้ว) คืออะไร

 Adaptive Images : Picture Element และ Srcset Attribute คืออะไร

 

      ในการทำ responsive web design (เรสป้อนซีพ เว็บ ดีไซน์) หากพูดถึงการใช้รูปต่างๆ ในหน้าเว็บแล้ว เราอาจจะต้องเลือกใช้รูปขนาดใหญ่สุดเพื่อที่จะสามารถแสดงผลได้อย่างคมชัดบน desktop (เดสท็อป) เเต่ด้วยข้อจำกัดของ responsive web design ทำให้เว็บในแต่ละเวอร์ชั่นนั้นจะใช้โค้ดร่วมกัน ไม่ว่าจะเป็น mobile (โมบาย), tablet (เเท็ปเล็ต) หรือ desktop ก็ตาม ด้วยเหตุนี้เอง จึงทำให้เกิดปัญหาที่ว่า mobile อาจจะต้องมาโหลดรูปขนาดใหญ่โดยไม่จำเป็นหรือผู้ที่ใช้ retina display (เรติน่า ดิสเพลย์) อาจจะพบว่ารูปที่โหลดมานั้นไม่คมชัดเท่าไรนัก เนื่องจากเป็นรูปที่ไม่ได้รองรับหน้าจอความละเอียดสูงนั่นเอง

      ปัญหาเกี่ยวกับรูปใน responsive web (เรสปอนซีฟ เว็บ) นี้ กลายเป็นปัญหาสำคัญ จึงทำให้เกิดการแก้ปัญหาที่เรียกว่า “Adaptive images (อแดปทีพ อิมเมจ)” ขึ้นมา โดยจุดประสงค์ก็คือ การทำให้ผู้ใช้งานโหลดเฉพาะรูปที่เหมาะสมกับสภาพแวดล้อมของผู้ใช้งานในขณะนั้นๆ แทนที่จะบังคับให้ผู้ใช้งานโหลดรูปขนาดใหญ่สุดไป แต่วิธีนี้นั้นค่อนข้างจะซับซ้อนและทำได้ยาก

picture element (พิคเจอร์ เอเลเม้น) ของ RICG (อาร์ไอซีจี) (Responsive Images Community Group (เรสปอนซีพ อิมเมจ คอมมูนิตี้ กรุ๊ป)) นั้นได้แรงบันดาลใจมาจาก video element (วีดีโอ เอเลเม้น) ซึ่ง RICG มองว่า pattern (เเพทเทริน) แบบนี้ authors(ออเทอร์) น่าจะคุ้นเคยกันเป็นอย่างดี จุดเด่นของ picture element (พิคเจอร์ เอเลเม้น) ก็คือการรองรับ media queries (มีเดีย คิวรี่) ซึ่งนั่นก็หมายความว่าเราสามารถกำหนดเงื่อนไขของการเลือกรูปมาแสดงได้ด้วยตัวเอง นอกจากนี้ picture element (พิคเจอร์ เอเลเม้น) ยังมี fallback (ฟอลเเบ็ค) สำหรับ web browsers (เว็บ บราวเซอร์) ที่ยังไม่รองรับอีกด้วย ซึ่งเป็นหลักการเดียวกับ video element นั่นเอง

 Adaptive Images : Picture Element และ Srcset Attribute คืออะไร

 

อย่างไรก็ดี picture element (พิคเจอร์ เอเลเม้น) อาจจะมีปัญหาอยู่บ้างในเรื่องของ performance (เพอฟอร์มแมน) เนื่องจาก parser (พาเซอร์) ของ web browsers (เว็บ บราวเซอร์) จะต้องมาเสียเวลาหา </picture> ให้เจอเสียก่อน จึงจะสามารถคำนวณได้ว่าควรเลือกรูปไหนมาแสดง

Srcset Attribute ไอเดียของ Edward O’Connor กันบ้าง เขาเลือกที่จะใช้ adaptive images (อแดปทิพ อิมเมจ) กับ img element (ไอเอ็มจี เอเลเม้น) เหมือนเดิม แทนที่จะสร้าง html element ขึ้นมาใหม่ เพียงแต่ว่าเขาเสนอให้เพิ่ม attribute เข้ามาอีกอันหนึ่ง ซึ่งก็คือ srcset นั่นเอง

 

Adaptive Images : Picture Element และ Srcset Attribute คืออะไร 

จากตัวอย่างการใช้ srcset attribute ด้านบน จะเห็นว่า srcset นั้นจะประกอบไปด้วยรูปเวอร์ชั่นต่างๆ ที่เราได้เตรียมไว้ โดยจะมี comma (คอมม่า) คั่นอยู่ จุดเด่นของ srcset attribute ก็คือเราจะสามารถใส่ “hint(คำใบ้)” ให้กับแต่ละเวอร์ชั่นได้ด้วยว่าเราอยากให้ web browsers เลือกรูปนี้มาแสดงเมื่อใด hint (ฮิ้น) ของ srcset attribute นั้นมีอยู่ 3 แบบ ด้วยกัน คือ w, h และ x โดย x นั้นจะหมายถึง pixel density ของ device นั้นๆ นั่นเท่ากับว่า เราสามารถเลือกแสดงรูปให้เหมาะสมกับหน้าจอความคมชัดสูงอย่าง retina display ได้แล้ว ส่วน w กับ h นั้นจะหมายถึงขนาดของ viewport ที่ใหญ่ที่สุด หรือ max-width และ max-height นั่นเอง ลองดูตัวอย่างต่อไปนี้

 

Adaptive Images : Picture Element และ Srcset Attribute คืออะไร 

จากตัวอย่างด้านบนจะเห็นว่า hint แบบ w นั้นจะอ้างอิงกับ max-width ไม่ใช่ min-width โดยรูปขนาดใหญ่ที่สุดที่เราจะใช้กับ infinite width (อินฟินิตี้ วาย) นั้นให้เราใส่ hint เป็น 1x ซึ่ง web browsers จะรู้เองว่ามันควรใช้รูปนี้มาแสดงผล หาก viewport (วิวพอร์ท) มีความกว้างมากกว่า 1280 p จะเห็นว่า srcset attribute นั้นมีข้อดีตรงที่เราไม่ต้องมาเขียน query (คิวรี่) เองว่าจะเลือกรูปไหนมาแสดงผล เราเพียงแต่ใส่ hint เข้าไปเท่านั้น ที่เหลือก็ปล่อยให้ web browsers (เว็บ บราวเซอร์) ตัดสินใจเองว่าจะเลือกรูปไหนมาใช้ซึ่งมันจะเลือกรูปที่ “เหมาะสม” ที่สุดในสภาพแวดล้อมนั้นๆ มาแสดงโดยอัตโนมัติ โดยมันจะดูจากปัจจัยหลายๆ อย่าง ไม่ว่าจะเป็น network speed (เน็ตเวริค สปีด) , latency (เลเทนซี่) รวมไปถึง orientation (โอเลี่ยนชัน)

ทำไมต้องมีทั้ง picture element และ srcset attribute ? 

      คำตอบง่ายๆ เลยก็คือ ทั้ง 2 solutions (โซโลลูชัน) ต่างก็ยังไม่สามารถตอบโจทย์ของ adaptive images ได้ครบในทุกๆ use cases (ยูส เคส) บ่อยครั้งที่เราพบว่ารูปใน mobile (โมบาย) นั้นเล็กจนดูไม่รู้เรื่อง ทั้งนี้เป็นเพราะว่าคนส่วนใหญ่จะลดขนาดของรูปลงให้สัมพันธ์กับขนาดของหน้าจอ พวกเขาอาจลืมไปว่าในบางครั้ง จุดโฟกัสนั้นไม่ได้อยู่ที่กึ่งกลางของรูป การกำหนดขนาดของรูปให้เป็น % โดยอิงตาม container (คอนเทนเนอร์) นั้นอาจทำให้ใจความสำคัญของรูปเสียไป หรืออาจเล็กลงมากจนดูไม่รู้เรื่องเมื่อดูในหน้าจอขนาดเล็ก

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
เป็นเกษตรกรรึป่าวตรวจสอบได้ที่นี่
โดย thatsawan จ 13 เม.ย. 2020 12:34 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
180
พ 15 เม.ย. 2020 11:32 am โดย thatsawan
บล็อค สแปมบอท ด้วย cloudflare
โดย mindphp จ 13 เม.ย. 2020 4:08 am บอร์ด Linux - Web Server
0
125
จ 13 เม.ย. 2020 4:08 am โดย mindphp
"กรมการจัดหางาน" ตามหาคนว่างงาน รับช่วยงานกรมแบบ Work from home วันละ 300 บาท 45 วัน
โดย thatsawan ส 11 เม.ย. 2020 4:12 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
111
ส 11 เม.ย. 2020 4:12 pm โดย thatsawan
ปัญหา google "อ๊ะ! มีบางอย่างผิดพลาด หน้านี้ไม่ได้โหลด Google Maps "เกิดจากอะไรค่ะ
โดย thatsawan ส 11 เม.ย. 2020 1:28 pm บอร์ด HTML CSS
1
146
ส 11 เม.ย. 2020 1:32 pm โดย mindphp
อยากทราบวิธี ทำให้ แพนทที่สร้างขึ้นมาสามารถทำงานได้อย่างอัตโนมัติ
โดย Ittichai_chupol ศ 10 เม.ย. 2020 10:22 pm บอร์ด Programming - PHP
6
182
พ 03 มิ.ย. 2020 9:59 am โดย Sirayu
ผลลัพท์การคูณ เเต่ละที่ทำไมไม่ตรงกัน
โดย thatsawan พฤ 09 เม.ย. 2020 3:12 pm บอร์ด Programming - C/C++ & java & Python
4
144
พฤ 09 เม.ย. 2020 4:11 pm โดย thatsawan
อยากทราบวิธีการตรวจสอบตัวแปลภาษาใน phpbb ตัวไหนยังไม่มีการแปล
โดย Ittichai_chupol พ 08 เม.ย. 2020 10:57 am บอร์ด Programming - PHP
1
141
พ 08 เม.ย. 2020 12:24 pm โดย thatsawan
ปัญหาการใช้งาน MJUpgrade
โดย Anonymous อ 07 เม.ย. 2020 10:33 am บอร์ด MindPHP News & Feedback
5
135
อ 07 เม.ย. 2020 1:10 pm โดย mindphp
การรันไฟล์ .exe
โดย bumbim01 จ 06 เม.ย. 2020 8:25 pm บอร์ด Programming - C/C++ & java & Python
1
183
อ 14 เม.ย. 2020 8:24 pm โดย mindphp
สรรพากรแจ้งข่าวดี ขยายเวลายื่นแบบฯ ให้ผู้ประกอบการทุกราย สู้ COVID19
โดย thatsawan จ 06 เม.ย. 2020 1:42 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
160
จ 06 เม.ย. 2020 1:42 pm โดย thatsawan
G -ข้อมูลสำหรับ ทำโปรแกรม ความต้องการของระบบที่ต้องทำ รวมเฟส 4
โดย mindphp จ 06 เม.ย. 2020 12:18 pm บอร์ด AZKing (Main)
1
10
จ 06 เม.ย. 2020 12:32 pm โดย mindphp
แนะนำบริการ hosting จาก Hostneverdie
โดย tumsailom อ 05 เม.ย. 2020 7:58 pm บอร์ด Web Hosting Review - Free Host Share Host VPS
0
388
อ 05 เม.ย. 2020 7:58 pm โดย tumsailom
อยากทราบถ้าหากต้องการที่ทดสอบการทำงานของของ Event cron จะต้องทำอย่างไรบางครับ
โดย Ittichai_chupol ส 04 เม.ย. 2020 10:50 am บอร์ด Programming - PHP
1
249
จ 06 เม.ย. 2020 11:39 am โดย mindphp
เทมเพลต Megadeal ของ MooZiiCart สำหรับทำเว็บขายสินค้าออนไลน์
โดย prmindphp ศ 03 เม.ย. 2020 6:39 pm บอร์ด MindPHP News & Feedback
0
272
ศ 03 เม.ย. 2020 6:39 pm โดย prmindphp
เครื่องมือช่วยกรองสินค้า สำหรับค้นหาสินค้าที่ต้องการ
โดย prmindphp พฤ 02 เม.ย. 2020 6:46 pm บอร์ด MindPHP News & Feedback
0
335
พฤ 02 เม.ย. 2020 6:46 pm โดย prmindphp
การเขียน Script สำหรับสร้าง User ใน Joomla
โดย tsukasaz พฤ 02 เม.ย. 2020 3:33 pm บอร์ด Joomla Developing Knowledge
0
387
พฤ 02 เม.ย. 2020 3:33 pm โดย tsukasaz
อยากทราบวิธีการดึงข้อมูลจาก Excel โดยการดึงข้อมูลจาก คอลัมของ Excel มาบันทึกลงในฐานข้อมูล
โดย Ittichai_chupol พฤ 02 เม.ย. 2020 10:09 am บอร์ด Programming - PHP
1
528
พฤ 02 เม.ย. 2020 10:43 am โดย mindphp
เอ้าๆ ใครที่ใบขับขี่หมดอายุในช่วง COVID-19 สามารถอมรมผ่านออนไลน์ ด้วย e-learning ได้เเล้วนะ
โดย thatsawan พฤ 02 เม.ย. 2020 10:09 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
2
360
ศ 17 เม.ย. 2020 1:21 pm โดย LEG
วิธีการเชื่อม api ของ gitlab สำหรับดาวน์โหลดไฟล์ project ใน ภาษา Python
โดย jirawoot พ 01 เม.ย. 2020 3:38 pm บอร์ด Python Knowledge
0
420
พ 01 เม.ย. 2020 3:38 pm โดย jirawoot
สอบถาม ผมจะทำ ci ของ gitlab ผมดูดไฟล์ project จาก api ของ gitlab ได้แล้วทำอย่างไรต่อครับ
โดย jirawoot พ 01 เม.ย. 2020 12:09 pm บอร์ด Programming - C/C++ & java & Python
3
507
พฤ 02 เม.ย. 2020 10:50 am โดย tsukasaz