ลองเก็บเมาส์ไว้ใน
วิธีแก้คือแนวทางไม่กี่อย่าง ที่ใส่ไว้ตั้งแต่ขั้น
คำตอบ สั้น ๆ
ลิงก์ ข้ามไปยังเนื้อหา (skip link) เป็นจุดแรกเมื่อกด Tab และ ลำดับโฟกัส ที่ตรงกับลำดับที่ตาเห็นตัวบ่งชี้ โฟกัสที่มองเห็นได้ และไม่ถูกแถบที่ติดขอบจอหรือแบนเนอร์บังเลยดรอปดาวน์ ที่เปิดด้วยการคลิก ปุ่ม Enter หรือ Space ไม่ใช่แค่การชี้เมาส์ และปิดได้ด้วย Escape- ปุ่มเมนูบน
มือถือ ที่มีชื่อชัดเจน และบอกสถานะว่าเปิดหรือปิดอยู่ แลนด์มาร์ก การระบุหน้าปัจจุบัน จุดแตะที่ใหญ่พอ และเมนูที่เหมือนกันทุกหน้าและทุกภาษา
ใครต้องใช้ และ WCAG กำหนด อะไร
การใช้คีย์บอร์ดนำทาง คือวิธีท่องเว็บของคนจำนวนมาก ที่มีความบกพร่องด้านการเคลื่อนไหว มีอาการมือสั่น หรือ
เกณฑ์ WCAG 2.2 ที่สำคัญที่สุดสำหรับการนำทาง
| เกณฑ์ | ระดับ | สิ่งที่ |
|---|---|---|
| 2.1.1 คีย์บอร์ด | A | ทุกอย่างใช้งานได้จากคีย์บอร์ด |
| 2.1.2 ไม่มี |
A | โฟกัสออกจากเมนูหรือ |
| 2.4.1 ข้ามบล็อกเนื้อหา | A | มีวิธีข้ามส่วนหัวที่ซ้ำอยู่ทุกหน้า |
| 2.4.3 ลำดับโฟกัส | A | ลำดับการกด Tab ที่ |
| 2.4.7 มองเห็นโฟกัสได้ | AA | โฟกัสจากคีย์บอร์ดมองเห็นได้เสมอ |
| 2.4.11 โฟกัสไม่ถูกบัง ( |
AA | รายการที่ได้รับโฟกัส ต้องไม่ถูกบังจนมิด |
| 1.4.13 เนื้อหาเมื่อชี้หรือโฟกัส | AA | เมนูที่เปิดเมื่อชี้เมาส์ ปิดได้ เลื่อนเมาส์เข้าไปได้ และเปิดค้างอยู่ |
| 2.5.3 |
A | ชื่อในโค้ด มี |
| 2.5.8 ขนาด |
AA | จุดกดขนาดอย่างน้อย 24 × 24 CSS พิกเซล หรือเว้นระยะห่างกันพอ |
| 3.2.3 |
AA | ลำดับเมนูเหมือนกันทุกหน้า |
| 4.1.2 ชื่อ บทบาท ค่า | A | ตัวควบคุมบอกชื่อ บทบาท และสถานะของ |
เกณฑ์โฟกัสไม่ถูกบัง และขนาด
ลิงก์ ข้ามและลำดับโฟกัสที่สมเหตุสมผล
ลิงก์ “ข้ามไปยังเนื้อหา”
- ตั้งชื่อให้ตรงไปตรงมา: “ข้ามไปยังเนื้อหา”
- ชี้ไปที่
id="main"บนองค์ประกอบ mainในทุกเทมเพลตหน้า - ซ่อนไว้นอกจอจนกว่าจะได้รับโฟกัส ห้ามใช้
display: noneเพราะจะทำให้ลิงก์ หายไปจากเส้นทาง ของคีย์บอร์ด - ให้
ลิงก์ แสดงซ้อนอยู่บนส่วนหัวแบบติดจอ ไม่ใช่จมอยู่ข้างใต้
ลำดับโฟกัสที่ไล่ตามหน้าเว็บ
ปุ่ม Tab ไล่ตามลำดับในโค้ด HTML ไม่ใช่ตาม
- การจัดลำดับใหม่ด้วย CSS Flexbox และ grid จัดเรียงส่วนหัวใหม่ให้ตาเห็นได้ ในขณะที่ลำดับ Tab ยังอยู่ที่เดิม
- ค่า
tabindexที่เป็นบวก จะแทนที่ลำดับตามธรรมชาติ และแทบทุกครั้งทำให้แย่ลง - เมนูที่ปิดแล้วแต่ยังรับโฟกัสได้ เมนูที่เลื่อนซ่อนไว้นอกจอ อาจกินการกด Tab ไปเป็นสิบครั้ง โดยไม่มีอะไรเกิดขึ้นให้เห็นเลย ให้เอาออกจากลำดับ Tab ด้วยแอตทริบิวต์
hiddenหรือdisplay: noneหรือinert
ตัวบ่งชี้ โฟกัสที่มองเห็นได้จริง
สำหรับ
ปรับสไตล์ได้ แต่อย่าลบทิ้ง
ความoutline: none ที่ใส่ไว้ เพราะมีคนไม่ชอบวงกรอบที่โผล่มาหลังคลิกเมาส์ ให้ใช้ selector :focus-visible แทน เบราว์เซอร์จะแสดงผลกับโฟกัสจากคีย์บอร์ด แต่มักไม่แสดงเมื่อคลิก
- สังเกตได้ชัด: หนา 2 ถึง 3 พิกเซล และเว้นห่างจาก
องค์ประกอบ เล็กน้อย คอนทราสต์ สูง: อย่างน้อย 3:1 เทียบกับสีที่อยู่ติดกัน ซึ่งเป็นเกณฑ์คอนทราสต์ ของสิ่งที่ไม่ใช่ข้อความ (Non-text Contrast) ของ WCAG สำหรับองค์ประกอบ ของอินเทอร์เฟซ (คู่มือคอนทราสต์ สีและตัวอักษร ที่ทุกคนอ่านได้ ของเราแสดงวิธีตรวจ)- ใช้สองสี ใน
เว็บไซต์ ที่มีทั้งส่วนพื้นสว่างและพื้นมืด ออกแบบ ไว้ก่อน ไม่ใช่ด้นเอาหน้างาน: เหมือนกันทุกลิงก์ ปุ่ม และช่องกรอก และวาดไว้ในไฟล์ออกแบบ คู่กับสถานะเมื่อชี้เมาส์
เกณฑ์ระดับ AAA ข้อ 2.4.13 ลักษณะของโฟกัส (Focus Appearance)
อย่าให้ส่วนหัว แชต หรือแบนเนอร์คุกกี้ บังโฟกัส
เกณฑ์โฟกัสไม่ถูกบัง (
scroll-padding ของ CSS ทำให้เบราว์เซอร์เว้นที่ให้แถบที่ติดอยู่กับจอ เมื่อเลื่อนหน้าเพื่อพา
/* Leave room for fixed bars when focus scrolls the page */
html {
scroll-padding-top: 80px; /* sticky header height */
scroll-padding-bottom: 96px; /* bottom bar or chat button */
}
/* A two-tone ring that shows on light and dark backgrounds */
:focus-visible {
outline: 3px solid #111;
outline-offset: 2px;
box-shadow: 0 0 0 2px #fff;
}
สำหรับแบนเนอร์คุกกี้ แนวทางของ W3C สำหรับเกณฑ์ข้อนี้ แนะนำให้ทำแบนเนอร์เป็นแบบ
ดรอปดาวน์ ที่ไม่ต้องพึ่งการชี้เมาส์
เมนูที่เปิดได้ด้วยการชี้เมาส์อย่างเดียว ใช้ไม่ได้กับ
รูปแบบ disclosure
- รายการแม่เป็นปุ่ม ที่มี
aria-expanded="false"และเปลี่ยนเป็นtrueขณะเปิด - กด Enter หรือ Space คลิก หรือแตะ เพื่อเปิด
- Tab ไล่ผ่าน
ลิงก์ ข้างในตามลำดับ แล้วไปยังรายการระดับบนสุดถัดไป - Escape ปิดเมนู และส่งโฟกัสกลับไปที่ปุ่ม
- เมนูปิดเมื่อโฟกัสหรือการคลิกย้ายไปที่อื่น
การชี้เมาส์ก็เปิดเมนูได้เช่นกัน ตราบใดที่การคลิกยังใช้ได้ แผงเมนูยังเปิดค้างเมื่อตัวชี้เลื่อนเข้าไป และกด Escape เพื่อปิดได้
รายการแม่ควรทำหน้าที่อะไร
“บริการ” ไม่สามารถทั้งเปิด
ไม่ต้องใช้ role เมนูของ ARIA
ธีมและปลั๊กอินเมนูบางตัว ใส่ role menu และ menubar ให้กับnav ก็
เมกะเมนู ใช้
เมนูมือถือ : ปุ่มที่มีชื่อและสถานะที่ถูกต้อง
บน
- ใช้
<button>จริงdivหรือไอคอนที่แค่คลิกได้ ต้องทำใหม่ก่อน คีย์บอร์ดและโปรแกรมอ่านหน้าจอ จึงจะใช้งานได้ - แสดงคำว่า “เมนู” ข้างไอคอน เพื่อให้
ผู้ใช้ ที่สั่งงานด้วยเสียงพูดว่า “คลิก เมนู” ได้ ปุ่มที่มีแค่ไอคอนต้องมีaria-label="Menu" - บอกสถานะ ด้วย
aria-expandedเพื่อให้โปรแกรมอ่านหน้าจอ ประกาศว่าเมนูยุบหรือขยายอยู่ และให้ชื่อปุ่มคงเดิม - จัดการโฟกัส เมนูที่ดันเนื้อหาลงมา ตามหลังปุ่มในลำดับ Tab ได้เลย ส่วนเมนูที่ซ้อนเต็มจอทำงานเหมือนกล่องโต้ตอบ (dialog) คือย้ายโฟกัสเข้าไป เก็บโฟกัสไว้ข้างใน (ใส่
inertให้ส่วนอื่นของหน้าช่วยได้) ปิดด้วย Escape หรือปุ่มปิดที่มีชื่อกำกับ แล้วส่งโฟกัสกลับไปที่ปุ่มเมนู - ใช้ส่วนที่กดขยายได้สำหรับเมนูย่อย ไม่ใช่เมนูที่เด้งออกด้านข้าง
<a class="skip-link" href="#main">Skip to content</a>
<header>
<nav aria-label="Main">
<button type="button" aria-expanded="false" aria-controls="site-menu">
<svg aria-hidden="true"><!-- icon --></svg>
Menu
</button>
<!-- a small script toggles aria-expanded and shows or hides the list -->
<ul id="site-menu">
<li><a href="/services/" aria-current="page">Services</a></li>
<li><a href="/work/">Work</a></li>
<li><a href="/contact/">Contact</a></li>
</ul>
</nav>
</header>
<main id="main">…</main>
แลนด์มาร์ก หน้าปัจจุบัน ขนาดจุดกด และชื่อ
แลนด์มาร์ก
header nav main และ footer main หนึ่งตัวต่อหน้า และตั้งชื่อ nav แต่ละตัว (เช่น “หลัก” “
ระบุหน้าปัจจุบัน
ใส่ aria-current="page" ให้
ปุ่มและลิงก์ ที่ใหญ่พอให้แตะ
เกณฑ์ขนาด
ชื่อที่ตรงกับข้อความ ที่มองเห็น
การสั่งงานด้วยเสียงอาศัยเกณฑ์aria-label="Get in touch with our friendly team" อาจไม่
การนำทาง ที่สม่ำเสมอทุกหน้าและทุกภาษา
เกณฑ์
สำหรับ
โครงสร้าง เดียวกัน ลำดับเดียวกัน ในทุกภาษา เพื่อให้การเปลี่ยนภาษาไม่ต้องเรียนรู้ เมนูใหม่- ปุ่มเปลี่ยนภาษาอยู่ที่เดิม ในทุกหน้า และ
เข้าถึง ได้บนมือถือ โดยไม่ต้องเลื่อน - เรียกชื่อแต่ละภาษาด้วยภาษานั้นเอง พร้อมแอตทริบิวต์
langที่ตรงกัน เพื่อให้โปรแกรมอ่านหน้าจอ ออกเสียงถูก ลิงก์ จริงไปยังหน้าที่ตรงกันไม่ใช่ ดรอปดาวน์ ที่เปลี่ยนภาษาทันที เมื่อผู้ใช้ คีย์บอร์ดกดลูกศร ผ่านตัวเลือก
ทดสอบ 5 นาทีแบบ “ถอดเมาส์”
เปิดหน้าแรกของคุณใน Chrome Edge หรือ Firefox (ใน Safari ให้ไปที่ การ
- กด Tab หนึ่งครั้ง
ลิงก์ ข้ามต้องปรากฏขึ้น กด Enter แล้วกด Tab โฟกัสต้องไปอยู่ในเนื้อหาหลัก - กด Tab ไล่ผ่านส่วนหัว ทุกจุดที่หยุดต้องแสดงวงโฟกัสชัดเจน เรียงตามลำดับการอ่าน และไม่มีจุดหยุดที่มองไม่เห็น
- เปิด
ดรอปดาวน์ แต่ละอันด้วย Enter หรือ Space กด Tab ไล่ผ่าน แล้วกด Escape เมนูต้องปิด และโฟกัสกลับไปที่ปุ่มของมัน - กด Tab ไปจนถึงส่วนท้าย แล้วกด Shift+Tab ย้อนขึ้นไป ไม่มี
องค์ประกอบ ที่ถูกโฟกัสไปซ่อนใต้ส่วนหัว แบนเนอร์คุกกี้ หรือปุ่มแชต และโฟกัสไม่ติดค้าง - ซูมเข้าจนเมนู
มือถือ ปรากฏ เปิดเมนู ไล่ผ่าน แล้วปิดด้วย Escape โฟกัสต้องกลับไปที่ปุ่มเมนู - ลองส่ง
แบบฟอร์ม ติดต่อสอบถามถึงตัวเอง ถ้าคุณทำไม่ได้โดยไม่ใช้เมาส์ผู้เข้าชม บางคนของคุณก็ทำไม่ได้เช่นกัน
ถ้ามีเวลาอีกสองนาที ลองใช้โปรแกรมอ่าน
ทำอะไรต่อ
สไตล์โฟกัสต้องมีคน
ถ้าการทดสอบไม่ผ่านหลายขั้น ปัญหามักอยู่ที่ส่วนหัวเอง คือเมนูสำเร็จรูปที่ไม่เคยถูก