เลิกใช้คลาส .active หลอกสกรีนรีดเดอร์ หันมาใช้แอตทริบิวต์ HTML กันดีกว่า
การใช้คลาส CSS เช่น .active เพื่อบอกสถานะหน้าเว็บนั้นสร้างปัญหาการเข้าถึงสำหรับผู้พิการทางสายตา ควรเปลี่ยนมาใช้ HTML แอตทริบิวต์ที่เป็นมาตรฐานสากลแทน

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- คลาส .active ไม่มี语义 (ความหมายในตัว) และระบบช่วยเหลือผู้พิการทางสายตาอ่านไม่เข้าใจ
- ควรใช้ HTML แอตทริบิวต์มาตรฐานเพราะเบราว์เซอร์และเทคโนโลยีสิ่งอำนวยความสะดวกเข้าใจทันที
- ใช้แอตทริบิวต์ inert สำหรับปิดกั้นการโต้ตอบและลำดับการโฟกัสของเนื้อหาหลังฉากแทนการเขียน JS วนลูป
- แยกแยะให้ชัดเจน คลาสเหมาะกับการแสดงผล (appearance) ส่วนแอตทริบิวต์เหมาะกับการแสดงสถานะ (state)
หากต้องเลือกจุดบกพร่องทางโค้ดที่พบบ่อยที่สุดในโปรเจกต์เฟรนต์เอนด์ คงไม่ใช่เรื่องของการลืมใส่เซมิโคลอนหรือโครงสร้างโฟลเดอร์ที่รกรุงรัง แต่เป็นพฤติกรรมการสร้างคลาสขึ้นมาใช้งานตามใจชอบโดยไม่มีความหมายในตัว ซึ่งส่งผลเสียต่อการเข้าถึงเว็บไซต์อย่างมาก
ปัญหาหลักคือคลาสอย่าง .active ไม่มี语义 (ความหมายในตัว) ติดมาด้วย เบราว์เซอร์ไม่มีทางรู้เลยว่าคลาสนี้หมายถึงหน้าปัจจุบันที่ผู้ใช้งานกำลังเปิดอยู่ เช่นเดียวกับโปรแกรมอ่านหน้าจอ (screen reader) ที่มองเห็นมันเป็นเพียงข้อความสตริงธรรมดา ความเข้าใจนี้เกิดขึ้นได้ก็เพราะนักพัฒนาตกลงกันเองใน CSS ซึ่งความสัมพันธ์นี้จะพังทันทีเมื่อมีคนเปลี่ยนชื่อคลาส ลืมอัปเดตไฟล์ JavaScript ที่คอยสลับสถานะ หรือเขียนคอมโพเนนต์ใหม่ขึ้นมาโดยไม่รู้ถึงข้อตกลงเดิม

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
ในทางกลับกัน แอตทริบิวต์ของ HTML ไม่มีปัญหานี้ เพราะมันเป็นมาตรฐาน มีการจัดทำเอกสารไว้อย่างชัดเจน เบราว์เซอร์รองรับการทำงานจริง และเทคโนโลยีสิ่งอำนวยความสะดวกก็รู้วิธีจัดการกับมันอยู่แล้ว การเลือกใช้งานแอตทริบิวต์จึงไม่ใช่แค่เรื่องของความชอบส่วนตัว แต่เป็นการมอบหมายงานให้แพลตฟอร์มเว็บจัดการแทนที่จะต้องมานั่งเขียนโค้ดซ้ำซ้อนเองในทุกๆ โปรเจกต์
ตัวอย่างแอตทริบิวต์มาตรฐานที่ควรนำมาใช้แทนคลาสต่างๆ มีดังนี้:
- แอตทริบิวต์ inert เหมาะสำหรับการซ่อนเนื้อหาเบื้องหลังโมดัลหรือเมนูด้านข้างที่ถูกปิดอยู่ โดยจะช่วยลบทั้งซับทรีออกจากการโต้ตอบและลำดับการโฟกัสในคราวเดียว
- แอตทริบิวต์ aria-selected สำหรับอินเทอร์เฟซแบบแท็บ เพื่อส่งสัญญาณที่ถูกต้องไปยังต้นไม้การเข้าถึง (accessibility tree) ว่าแท็บไหนกำลังทำงานอยู่
- แอตทริบิวต์ aria-invalid="true" ช่วยทั้งเรื่องการจัดสไตล์และส่งเสียงแจ้งเตือนผู้ใช้งานสกรีนรีดเดอร์ว่ามีจุดที่ต้องแก้ไข
การหันมาใช้ HTML แอตทริบิวต์แทนคลาสสำหรับการบอกสถานะถือเป็นหัวใจสำคัญของหลักการ Web Accessibility (a11y) ในยุคปัจจุบัน เนื่องจากเว็บไม่ได้ถูกใช้งานแค่ผ่านสายตาบนหน้าจออีกต่อไป แต่มีผู้ใช้งานจำนวนมากที่พึ่งพาโปรแกรมอ่านหน้าจอหรืออุปกรณ์ช่วยเหลืออื่นๆ การใช้ Semantic HTML จึงช่วยลดภาระของนักพัฒนาในการดูแลรักษาโค้ดระยะยาว และสร้างประสบการณ์การใช้งานที่เท่าเทียมสำหรับทุกคนอย่างแท้จริง
บางคนอาจคิดว่าเรื่องนี้เป็นเพียงทางเลือกเสริมที่เอาไว้ทำทีหลังก็ได้ แต่แท้จริงแล้วมันคือรากฐานสำคัญของการพัฒนาเว็บที่มีคุณภาพ โดยกฎเหล็กที่แนะนำคือ หากต้องการสื่อถึงสถานะ (state) ให้เลือกใช้แอตทริบิวต์เป็นอันดับแรก แต่ถ้าต้องการตกแต่งรูปร่างหน้าตาโดยไม่มีความหมายเชิงโครงสร้าง การใช้คลาสหรือยูทิลิตี้เฟรมเวิร์กยังคงเป็นเครื่องมือที่เหมาะสม
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น