HTML

DOCTYPE ทำหน้าที่อะไร?

DOCTYPE เป็นตัวย่อของ Document Type DOCTYPE มักจะเกี่ยวข้องกับ DTD - สำหรับ Document Type Definition

DTD กำหนดว่าเอกสารประเภทหนึ่งควรมีโครงสร้างอย่างไร (เช่น 'button' สามารถมี 'span' ได้ แต่ไม่สามารถมี 'div' ได้) ในขณะที่ DOCTYPE ประกาศว่าเอกสารนั้นน่าจะเคารพ DTD ใด (เช่น เอกสารนี้เคารพ DTD ของ HTML)

สำหรับหน้าเว็บ การประกาศ DOCTYPE เป็นสิ่งจำเป็น ใช้เพื่อบอก User Agent ว่าเอกสารของคุณเคารพข้อกำหนด HTML เวอร์ชันใด เมื่อ User Agent รู้จัก DOCTYPE ที่ถูกต้องแล้ว จะเรียกใช้ no-quirks mode ที่ตรงกับ DOCTYPE นี้สำหรับการอ่านเอกสาร หาก User Agent ไม่รู้จัก DOCTYPE ที่ถูกต้อง จะเรียกใช้ quirks mode

การประกาศ DOCTYPE สำหรับมาตรฐาน HTML5 คือ '<!DOCTYPE html>'

คุณจะให้บริการหน้าเว็บที่มีเนื้อหาหลายภาษาได้อย่างไร?

ฉันจะสมมติว่าเป็นการถามถึงกรณีที่พบบ่อยที่สุด ซึ่งก็คือวิธีการให้บริการหน้าเว็บที่มีเนื้อหาในหลายภาษา แต่เนื้อหาภายในหน้าควรแสดงผลเพียงภาษาเดียวที่สอดคล้องกัน

เมื่อมีการร้องขอ HTTP ไปยังเซิร์ฟเวอร์ User Agent ที่ร้องขอมักจะส่งข้อมูลเกี่ยวกับการตั้งค่าภาษา เช่น ในส่วนหัว 'Accept-Language' จากนั้นเซิร์ฟเวอร์สามารถใช้ข้อมูลนี้เพื่อส่งคืนเอกสารเวอร์ชันที่เป็นภาษาที่เหมาะสม หากมีทางเลือกอื่นดังกล่าว HTML document ที่ส่งคืนควรประกาศ attribute 'lang' ในแท็ก '<html>' เช่น '<html lang="en">...</html>'

แน่นอนว่าสิ่งนี้ไม่มีประโยชน์สำหรับการแจ้งให้ Search Engine ทราบว่าเนื้อหาเดียวกันนั้นมีอยู่ในภาษาต่างๆ ดังนั้นคุณต้องใช้ attribute 'hreflang' ใน '<head>' ด้วย เช่น '<link rel="alternate" hreflang="de" href="http://de.example.com/page.html" />'

ในส่วนหลังบ้าน HTML markup จะมี placeholder สำหรับ 'i18n' และเนื้อหาสำหรับภาษาเฉพาะที่จัดเก็บในรูปแบบ YML หรือ JSON จากนั้นเซิร์ฟเวอร์จะสร้างหน้า HTML แบบไดนามิกพร้อมเนื้อหาในภาษาเฉพาะนั้น โดยปกติจะได้รับความช่วยเหลือจาก Framework หลังบ้าน

คุณต้องระวังอะไรบ้างเมื่อออกแบบหรือพัฒนาเว็บไซต์หลายภาษา?

  • ใช้ attribute 'lang' ใน HTML ของคุณ
  • การนำผู้ใช้ไปยังภาษาแม่ของพวกเขา - อนุญาตให้ผู้ใช้เปลี่ยนประเทศ/ภาษาได้อย่างง่ายดายโดยไม่ยุ่งยาก
  • ข้อความในรูปภาพที่ใช้ Raster (เช่น png, gif, jpg, ฯลฯ) ไม่ใช่วิธีการที่ปรับขนาดได้ - การวางข้อความในรูปภาพยังคงเป็นวิธีที่นิยมในการแสดงผลแบบอักษรที่ไม่ใช่ระบบที่ดูดีบนคอมพิวเตอร์ทุกเครื่อง อย่างไรก็ตาม ในการแปลข้อความรูปภาพ ข้อความแต่ละสตริงจะต้องสร้างรูปภาพแยกต่างหากสำหรับแต่ละภาษา การแทนที่มากกว่าสองสามครั้งนี้อาจควบคุมได้ยากอย่างรวดเร็ว
  • ความยาวคำ/ประโยคที่จำกัด - เนื้อหาบางอย่างอาจยาวขึ้นเมื่อเขียนในภาษาอื่น ระวังปัญหาเลย์เอาต์หรือปัญหา Overflow ในการออกแบบ ควรหลีกเลี่ยงการออกแบบที่ปริมาณข้อความจะทำให้การออกแบบดีขึ้นหรือแย่ลง จำนวนอักขระมีผลกับสิ่งต่างๆ เช่น หัวข้อ, ป้ายกำกับ, และปุ่ม พวกเขาไม่ค่อยเป็นปัญหาสำหรับข้อความที่ไหลอย่างอิสระ เช่น ข้อความเนื้อหาหรือความคิดเห็น
  • ระวังการรับรู้สี - สีถูกรับรู้แตกต่างกันไปในแต่ละภาษาและวัฒนธรรม การออกแบบควรใช้สีอย่างเหมาะสม
  • การจัดรูปแบบวันที่และสกุลเงิน - วันที่ในปฏิทินบางครั้งนำเสนอในรูปแบบที่แตกต่างกัน เช่น "May 31, 2012" ในสหรัฐอเมริกา เทียบกับ "31 May 2012" ในบางส่วนของยุโรป
  • ห้ามเชื่อมสตริงที่แปลแล้ว - ห้ามทำอะไรเช่น "The date today is " + date มันจะเสียในภาษาที่มีลำดับคำต่างกัน ให้ใช้ String template ที่มีการแทนที่พารามิเตอร์สำหรับแต่ละภาษาแทน ตัวอย่างเช่น ดูสองประโยคต่อไปนี้ในภาษาอังกฤษและจีนตามลำดับ: 'I will travel on {% date %}' และ '{% date %} 我会出发' โปรดสังเกตว่าตำแหน่งของตัวแปรแตกต่างกันไปเนื่องจากกฎไวยากรณ์ของภาษา
  • ทิศทางการอ่านภาษา - ในภาษาอังกฤษ เราอ่านจากซ้ายไปขวา บนลงล่าง ในภาษาญี่ปุ่นดั้งเดิม ข้อความจะอ่านจากบนลงล่าง ขวาไปซ้าย
  • สิ่งที่ควรมี - รวม Locale ไว้ใน Path (เช่น en_US, zh_CN, ฯลฯ)

attribute 'data-' มีประโยชน์อย่างไร?

ก่อนที่ Framework JavaScript จะได้รับความนิยม นักพัฒนา Front end ใช้ attribute 'data-' เพื่อจัดเก็บข้อมูลเพิ่มเติมภายใน DOM โดยไม่ต้องใช้ Hacks อื่นๆ เช่น Non-standard attributes หรือ Extra properties บน DOM มีวัตถุประสงค์เพื่อจัดเก็บข้อมูลที่กำหนดเองซึ่งเป็นข้อมูลส่วนตัวของหน้าเว็บหรือแอปพลิเคชัน ซึ่งไม่มี attribute หรือองค์ประกอบที่เหมาะสมกว่า

ทุกวันนี้ การใช้ attribute 'data-' โดยทั่วไปไม่ได้รับการสนับสนุน เหตุผลหนึ่งคือผู้ใช้สามารถแก้ไข data attribute ได้ง่ายโดยใช้ Inspect Element ใน Browser Data Model จะจัดเก็บไว้ใน JavaScript เองได้ดีกว่า และอัปเดตกับ DOM ผ่าน Data Binding ซึ่งอาจผ่าน Library หรือ Framework

อย่างไรก็ตาม การใช้ Data attribute ที่ถูกต้องสมบูรณ์คือการเพิ่ม Hook สำหรับ Framework การทดสอบแบบ End to End เช่น Selenium และ Capybara โดยไม่ต้องสร้าง Class ที่ไร้ความหมายหรือ ID attributes องค์ประกอบจำเป็นต้องหาวิธีการค้นหาโดย Selenium Spec เฉพาะ และบางอย่างเช่น 'data-selector='the-thing'' เป็นวิธีที่ถูกต้องในการทำเช่นนั้นโดยไม่ทำให้ Semantic markup สับสน

พิจารณา HTML5 เป็นแพลตฟอร์มเว็บเปิด อะไรคือส่วนประกอบหลักของ HTML5?

  • Semantics - ช่วยให้คุณอธิบายเนื้อหาของคุณได้อย่างแม่นยำยิ่งขึ้น
  • Connectivity - ช่วยให้คุณสื่อสารกับเซิร์ฟเวอร์ด้วยวิธีใหม่ๆ และสร้างสรรค์
  • Offline and storage - ช่วยให้หน้าเว็บสามารถจัดเก็บข้อมูลบนฝั่งไคลเอนต์ได้ในเครื่องและทำงานแบบออฟไลน์ได้อย่างมีประสิทธิภาพมากขึ้น
  • Multimedia - ทำให้วิดีโอและเสียงเป็นส่วนสำคัญของ Open Web
  • 2D/3D graphics and effects - ช่วยให้มีตัวเลือกการนำเสนอที่หลากหลายมากขึ้น
  • Performance and integration - ให้การเพิ่มประสิทธิภาพความเร็วที่มากขึ้นและการใช้งาน Hardware ของคอมพิวเตอร์ที่ดีขึ้น
  • Device access - ช่วยให้สามารถใช้อุปกรณ์อินพุตและเอาต์พุตต่างๆ ได้
  • Styling - ช่วยให้ผู้เขียนสามารถเขียนธีมที่ซับซ้อนมากขึ้น

อธิบายความแตกต่างระหว่าง 'cookie', 'sessionStorage' และ 'localStorage'

เทคโนโลยีที่กล่าวมาทั้งหมดเป็นกลไกการจัดเก็บข้อมูลแบบ Key-Value บนฝั่ง Client พวกเขาสามารถจัดเก็บค่าเป็น String ได้เท่านั้น

| | 'cookie' | 'localStorage' | 'sessionStorage' | | --- | --- | --- | --- | | ผู้ริเริ่ม | Client หรือ Server Server สามารถใช้ส่วนหัว 'Set-Cookie' ได้ | Client | Client | | การหมดอายุ | กำหนดเอง | ตลอดไป | เมื่อปิดแท็บ | | คงอยู่ตลอดเซสชันของเบราว์เซอร์ | ขึ้นอยู่กับการตั้งค่าการหมดอายุ | ใช่ | ไม่ | | ส่งไปยังเซิร์ฟเวอร์พร้อมกับการร้องขอ HTTP ทุกครั้ง | Cookie จะถูกส่งโดยอัตโนมัติผ่านส่วนหัว 'Cookie' | ไม่ | ไม่ | | ความจุ (ต่อโดเมน) | 4kb | 5MB | 5MB | | การเข้าถึง | หน้าต่างใดก็ได้ | หน้าต่างใดก็ได้ | แท็บเดียวกัน |

หมายเหตุ: หากผู้ใช้ตัดสินใจล้างข้อมูลการเรียกดูด้วยกลไกใดก็ตามที่เบราว์เซอร์จัดหาให้ สิ่งนี้จะล้าง 'cookie', 'localStorage' หรือ 'sessionStorage' ที่จัดเก็บไว้ สิ่งสำคัญคือต้องจำสิ่งนี้ไว้เมื่อออกแบบสำหรับการคงอยู่ของข้อมูลในเครื่อง โดยเฉพาะอย่างยิ่งเมื่อเปรียบเทียบกับทางเลือกอื่น เช่น การจัดเก็บข้อมูลฝั่งเซิร์ฟเวอร์ในฐานข้อมูลหรือที่คล้ายกัน (ซึ่งแน่นอนว่าจะคงอยู่แม้จะมีการกระทำของผู้ใช้ก็ตาม)

อธิบายความแตกต่างระหว่าง '<script>', '<script async>' และ '<script defer>'

  • '<script>' - การแยกวิเคราะห์ HTML ถูกบล็อก Script ถูกเรียกและดำเนินการทันที การแยกวิเคราะห์ HTML ดำเนินการต่อหลังจาก Script ถูกดำเนินการ
  • '<script async>' - Script จะถูกดึงมาพร้อมกับการแยกวิเคราะห์ HTML และดำเนินการทันทีที่พร้อมใช้งาน (อาจก่อนการแยกวิเคราะห์ HTML เสร็จสิ้น) ใช้ 'async' เมื่อ Script ไม่ขึ้นกับ Script อื่นๆ บนหน้า เช่น Analytics
  • '<script defer>' - Script จะถูกดึงมาพร้อมกับการแยกวิเคราะห์ HTML และดำเนินการเมื่อหน้าแยกวิเคราะห์เสร็จสิ้น หากมีหลาย Script แต่ละ Script ที่ถูกเลื่อนเวลาจะถูกดำเนินการตามลำดับที่พบในเอกสาร หาก Script อาศัย DOM ที่ถูกแยกวิเคราะห์อย่างสมบูรณ์ Attribute 'defer' จะมีประโยชน์ในการตรวจสอบให้แน่ใจว่า HTML ถูกแยกวิเคราะห์อย่างสมบูรณ์ก่อนดำเนินการ Script Script ที่ถูกเลื่อนเวลาต้องไม่มี 'document.write'

หมายเหตุ: Attribute 'async' และ 'defer' จะถูกละเว้นสำหรับ Script ที่ไม่มี Attribute 'src'

ทำไมจึงควรวาง `<link>` ของ CSS ไว้ระหว่าง `<head></head>` และ `<script>` ของ JS ไว้ก่อน `</body>`? คุณรู้จักข้อยกเว้นหรือไม่?

การวาง <link> ไว้ใน <head>

การวาง <link>s ใน <head> เป็นส่วนหนึ่งของข้อกำหนดที่เหมาะสมในการสร้างเว็บไซต์ที่ได้รับการปรับปรุงให้ดีที่สุด เมื่อหน้าเว็บโหลดครั้งแรก HTML และ CSS จะถูกแยกวิเคราะห์พร้อมกัน HTML สร้าง DOM (Document Object Model) และ CSS สร้าง CSSOM (CSS Object Model) ทั้งสองสิ่งนี้จำเป็นสำหรับการสร้างภาพในเว็บไซต์ ทำให้เกิดช่วงเวลา "first meaningful paint" ที่รวดเร็ว การแสดงผลแบบ Progressive นี้เป็นการเพิ่มประสิทธิภาพประเภทหนึ่งที่ไซต์ถูกวัดในคะแนนประสิทธิภาพ การวาง Stylesheet ไว้ใกล้ส่วนท้ายของเอกสารคือสิ่งที่ขัดขวางการแสดงผลแบบ Progressive ใน Browser จำนวนมาก Browser บางตัวจะบล็อกการแสดงผลเพื่อหลีกเลี่ยงการวาดองค์ประกอบของหน้าใหม่หาก Style เปลี่ยนแปลง ผู้ใช้ก็จะติดอยู่กับการดูหน้าว่างเปล่าสีขาว ในบางครั้งอาจมี Flash ของเนื้อหาที่ไม่มี Style (FOUC) ซึ่งแสดงหน้าเว็บที่ไม่มี Style นำมาใช้

การวาง <script>s ไว้ก่อน </body>

แท็ก <script> บล็อกการแยกวิเคราะห์ HTML ในขณะที่กำลังดาวน์โหลดและดำเนินการ ซึ่งอาจทำให้หน้าเว็บของคุณช้าลง การวาง Script ไว้ที่ด้านล่างจะช่วยให้ HTML ถูกแยกวิเคราะห์และแสดงผลต่อผู้ใช้ก่อน

ข้อยกเว้นสำหรับการวางตำแหน่งของ <script>s ที่ด้านล่างคือเมื่อ Script ของคุณมี document.write() แต่ทุกวันนี้การใช้ document.write() ไม่ใช่แนวทางปฏิบัติที่ดี นอกจากนี้ การวาง <script>s ที่ด้านล่างหมายความว่า Browser ไม่สามารถเริ่มดาวน์โหลด Script ได้จนกว่าเอกสารทั้งหมดจะถูกแยกวิเคราะห์ สิ่งนี้ช่วยให้มั่นใจได้ว่าโค้ดของคุณที่ต้องการจัดการองค์ประกอบ DOM จะไม่เกิดข้อผิดพลาดและหยุด Script ทั้งหมด หากคุณต้องการวาง <script>s ใน <head> ให้ใช้ Attribute defer ซึ่งจะให้ผลเช่นเดียวกันในการรัน Script หลังจาก HTML ถูกแยกวิเคราะห์แล้ว แต่ Browser สามารถดาวน์โหลด Script ได้เร็วกว่า

โปรดจำไว้ว่าการวาง Script ไว้ก่อนแท็ก </body> ที่ปิดจะสร้างภาพลวงตาว่าหน้าเว็บโหลดเร็วขึ้นใน Cache ที่ว่างเปล่า (เนื่องจาก Script จะไม่บล็อกการดาวน์โหลดเอกสารที่เหลือ) อย่างไรก็ตาม หากคุณมีโค้ดบางอย่างที่คุณต้องการรันระหว่างการโหลดหน้าเว็บ โค้ดนั้นจะเริ่มดำเนินการหลังจากโหลดหน้าเว็บทั้งหมดแล้วเท่านั้น หากคุณวาง Script เหล่านั้นในแท็ก <head> Script เหล่านั้นจะเริ่มดำเนินการก่อน - ดังนั้นใน Cache ที่พร้อมใช้งาน หน้าเว็บจะดูเหมือนโหลดเร็วขึ้นจริงๆ

แท็ก <head> และ <body> เป็นทางเลือกแล้ว

ตามข้อกำหนดของ HTML5 แท็ก HTML บางอย่างเช่น <head> และ <body> เป็นทางเลือก แนวทาง Style ของ Google ยังแนะนำให้ลบออกเพื่อประหยัด bytes อย่างไรก็ตาม แนวทางปฏิบัตินี้ยังไม่เป็นที่ยอมรับอย่างกว้างขวาง และประสิทธิภาพที่ได้รับอาจน้อยมาก และสำหรับเว็บไซต์ส่วนใหญ่แล้วอาจไม่สำคัญ

Progressive rendering คืออะไร?

Progressive rendering คือชื่อที่มอบให้กับเทคนิคที่ใช้ในการปรับปรุงประสิทธิภาพของหน้าเว็บ (โดยเฉพาะอย่างยิ่ง ปรับปรุงเวลาโหลดที่รับรู้) เพื่อแสดงเนื้อหาให้เร็วที่สุดเท่าที่จะเป็นไปได้

เคยเป็นที่แพร่หลายมากกว่าในยุคก่อนอินเทอร์เน็ตบรอดแบนด์ แต่ก็ยังคงใช้ในการพัฒนาสมัยใหม่เนื่องจากการเชื่อมต่อข้อมูลมือถือได้รับความนิยมมากขึ้นเรื่อยๆ (และไม่น่าเชื่อถือ)!

ตัวอย่างของเทคนิคดังกล่าว:

  • การโหลดรูปภาพแบบ Lazy loading - รูปภาพบนหน้าเว็บจะไม่ถูกโหลดทั้งหมดพร้อมกัน JavaScript จะใช้เพื่อโหลดรูปภาพเมื่อผู้ใช้เลื่อนไปยังส่วนของหน้าเว็บที่แสดงรูปภาพนั้น
  • การจัดลำดับความสำคัญของเนื้อหาที่มองเห็นได้ (หรือ Above-the-fold rendering) - รวมเฉพาะ CSS/เนื้อหา/Script ขั้นต่ำที่จำเป็นสำหรับปริมาณหน้าเว็บที่จะแสดงในเบราว์เซอร์ของผู้ใช้ก่อน เพื่อแสดงผลให้เร็วที่สุดเท่าที่จะเป็นไปได้ จากนั้นคุณสามารถใช้ Script ที่ถูกเลื่อนเวลา หรือรอเหตุการณ์ 'DOMContentLoaded'/'load' เพื่อโหลดทรัพยากรและเนื้อหาอื่นๆ
  • Async HTML fragments - การ Flush ส่วนของ HTML ไปยังเบราว์เซอร์ขณะที่หน้าเว็บถูกสร้างขึ้นในส่วนหลังบ้าน สามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับเทคนิคได้ที่นี่

ทำไมคุณถึงใช้ attribute 'srcset' ในแท็กรูปภาพ? อธิบายกระบวนการที่เบราว์เซอร์ใช้เมื่อประเมินเนื้อหาของ attribute นี้

คุณจะใช้ attribute 'srcset' เมื่อคุณต้องการให้บริการรูปภาพที่แตกต่างกันแก่ผู้ใช้ขึ้นอยู่กับความกว้างของหน้าจออุปกรณ์ของพวกเขา - การให้บริการรูปภาพคุณภาพสูงกว่าไปยังอุปกรณ์ที่มีหน้าจอ Retina จะช่วยเพิ่มประสบการณ์ผู้ใช้ ในขณะที่การให้บริการรูปภาพความละเอียดต่ำกว่าไปยังอุปกรณ์ระดับต่ำจะเพิ่มประสิทธิภาพและลดการสูญเสียข้อมูล (เนื่องจากการให้บริการรูปภาพขนาดใหญ่กว่าจะไม่มีความแตกต่างที่มองเห็นได้) ตัวอย่างเช่น: '<img srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 2000w" src="..." alt="">' บอกเบราว์เซอร์ให้แสดงกราฟิก .jpg ขนาดเล็ก, กลาง หรือใหญ่ ขึ้นอยู่กับความละเอียดของ Client ค่าแรกคือชื่อรูปภาพและค่าที่สองคือความกว้างของรูปภาพเป็นพิกเซล สำหรับความกว้างอุปกรณ์ 320px การคำนวณต่อไปนี้จะทำขึ้น:

  • 500 / 320 = 1.5625
  • 1000 / 320 = 3.125
  • 2000 / 320 = 6.25

หากความละเอียดของ Client คือ 1x, 1.5625 คือค่าที่ใกล้เคียงที่สุด และ '500w' ที่สอดคล้องกับ 'small.jpg' จะถูกเลือกโดยเบราว์เซอร์

หากความละเอียดเป็น Retina (2x) เบราว์เซอร์จะใช้ความละเอียดที่ใกล้เคียงที่สุดที่สูงกว่าค่าต่ำสุด ซึ่งหมายความว่าจะไม่เลือก 500w (1.5625) เพราะมันมากกว่า 1 และรูปภาพอาจดูไม่ดี จากนั้นเบราว์เซอร์จะเลือกรูปภาพที่มีอัตราส่วนผลลัพธ์ใกล้เคียงกับ 2 ซึ่งก็คือ 1000w (3.125)

'srcset's แก้ปัญหาที่คุณต้องการให้บริการไฟล์รูปภาพขนาดเล็กกว่าไปยังอุปกรณ์หน้าจอแคบ เนื่องจากอุปกรณ์เหล่านี้ไม่ต้องการรูปภาพขนาดใหญ่เหมือนจอแสดงผลเดสก์ท็อป - และยังเลือกได้ว่าคุณต้องการให้บริการรูปภาพความละเอียดที่แตกต่างกันไปยังหน้าจอที่มีความหนาแน่นสูง/ความหนาแน่นต่ำ

คุณเคยใช้ภาษา HTML Templating ที่แตกต่างกันมาก่อนหรือไม่?

ใช่, Pug (ชื่อเดิม Jade), ERB, Slim, Handlebars, Jinja, Liquid และ EJS เป็นเพียงบางส่วน ในความเห็นของฉัน พวกมันมีความเหมือนกันมากหรือน้อย และให้ฟังก์ชันการทำงานที่คล้ายคลึงกันในการ Escape เนื้อหาและ Filter ที่เป็นประโยชน์สำหรับการจัดการข้อมูลที่จะแสดงผล Engine Template ส่วนใหญ่ยังช่วยให้คุณสามารถแทรก Filter ของคุณเองได้ในกรณีที่คุณต้องการการประมวลผลแบบกำหนดเองก่อนการแสดงผล

Canvas กับ SVG แตกต่างกันอย่างไร?

Canvas เป็นแบบ Raster โดยทำงานกับพิกเซล ในขณะที่ SVG เป็นแบบ Vector โดยใช้คำอธิบายทางคณิตศาสตร์ของรูปร่าง Canvas ใช้การวาดแบบ Imperative ซึ่งแต่ละขั้นตอนจะระบุด้วย JavaScript เหมาะสำหรับกราฟิกแบบไดนามิกและโต้ตอบได้ เช่น แอนิเมชันและเกม

ในทางกลับกัน SVG ใช้การวาดแบบ Declarative โดยมีรูปร่างและเส้นทางที่กำหนดโดยตรงใน HTML ทำให้เข้าถึงได้ง่ายขึ้นและเป็นมิตรกับ SEO Canvas เหมาะที่สุดสำหรับฉากที่ซับซ้อนเนื่องจากมี Overhead ต่ำ แต่การปรับขนาดอาจทำให้คุณภาพของภาพลดลง SVG เนื่องจากไม่ขึ้นกับความละเอียด จึงปรับให้เข้ากับขนาดหน้าจอต่างๆ ได้โดยไม่ลดทอนคุณภาพ

ท้ายที่สุด Canvas เหมาะสำหรับกราฟิกแบบไดนามิกที่เน้นประสิทธิภาพ ในขณะที่ SVG เก่งในด้านกราฟิกที่ปรับขนาดได้และไม่ขึ้นกับความละเอียด โดยมีข้อดีด้านการเข้าถึงและ SEO โดยธรรมชาติ

องค์ประกอบว่างเปล่าใน HTML คืออะไร?

องค์ประกอบว่างเปล่าใน HTML คือองค์ประกอบที่ไม่มีเนื้อหาระหว่างแท็กเปิดและแท็กปิด แต่เป็นแท็กที่ปิดตัวเอง ซึ่งหมายความว่ามีเครื่องหมายทับไปข้างหน้า ('/') ก่อนเครื่องหมายวงเล็บมุมปิด ('>') ตัวอย่างทั่วไปบางส่วนขององค์ประกอบว่างเปล่า ได้แก่:

  • '<img>': ใช้สำหรับฝังรูปภาพลงในเอกสาร
  • '<input>': ใช้สำหรับรับข้อมูลจากผู้ใช้
  • '<br>': ใช้สำหรับแทรกการแบ่งบรรทัดหรือการแบ่งบรรทัดแบบบังคับ
  • '<hr>': ใช้สำหรับสร้างเส้นแนวนอนหรือตัวคั่น