การนำทางด้วยแป้นพิมพ์และลำดับโฟกัส
ทำให้ทุกฟังก์ชันเข้าถึงได้ด้วยแป้นพิมพ์อย่างเป็นลำดับและมีเหตุผล
การนำทางด้วยแป้นพิมพ์และลำดับโฟกัส เป็นบทเรียน HTML Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน HTML Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน
ใครบ้างที่ต้องใช้การนำทางด้วยแป้นพิมพ์
ผู้ใช้จำนวนมากต้องพึ่งพาการนำทางด้วยแป้นพิมพ์:
- ผู้มีข้อจำกัดด้านการเคลื่อนไหว — ไม่สามารถใช้เมาส์ได้
- ผู้ใช้ที่ชำนาญ — ต้องการใช้แป้นพิมพ์ลัด
- ผู้ใช้โปรแกรมอ่านหน้าจอ — นำทางด้วยแป้นพิมพ์ทั้งหมด
- ผู้ใช้การเข้าถึงด้วยสวิตช์ — ใช้ปุ่มที่จำลองการกดแป้น
องค์ประกอบที่โฟกัสได้ตามธรรมชาติ
องค์ประกอบ HTML เหล่านี้โฟกัสด้วยแป้นพิมพ์ได้โดยค่าเริ่มต้น:
<a href>— กด Tab เพื่อไปยังองค์ประกอบ และกด Enter เพื่อเปิดใช้งาน<button>— กด Tab เพื่อไปยังองค์ประกอบ และกด Enter/Space เพื่อเปิดใช้งาน<input>,<textarea>,<select>— กด Tab เพื่อไปยังองค์ประกอบเหล่านี้<details>/<summary>— กด Tab + Enter
ลำดับการกด Tab
เบราว์เซอร์กำหนดลำดับการกด Tab โดยใช้หลักต่อไปนี้:
- ลำดับ DOM เป็นค่าเริ่มต้น — องค์ประกอบจะได้รับโฟกัสตามลำดับที่ปรากฏใน HTML
- ค่า tabindex ที่เป็นบวก — องค์ประกอบเหล่านั้นจะได้รับโฟกัสก่อน โดยเรียงจากค่าน้อยไปมาก
tabindex="0"— เพิ่มเข้าในลำดับการกด Tab ตามธรรมชาติ ณ ตำแหน่งขององค์ประกอบใน DOMtabindex="-1"— ไม่อยู่ในลำดับการกด Tab และโฟกัสได้ผ่านสคริปต์เท่านั้น
ลำดับการกด Tab ตามธรรมชาติ = ลำดับ DOM
ลำดับการอ่าน HTML ของคุณควรตรงกับการจัดวางที่มองเห็นได้:
<!-- GOOD: DOM order matches visual left-to-right, top-to-bottom: -->
<header>...</header>
<nav>...</nav>
<main>...</main>
<aside>...</aside>
<footer>...</footer>
<!-- BAD: visually reordered with CSS, DOM order broken:
CSS flexbox order: doesn't affect tab order!
Screen readers and keyboard users follow DOM order, not CSS order -->ตัวบ่งชี้โฟกัสที่มองเห็นได้
WCAG 2.4.7 (ระดับ AA): ต้องมองเห็นโฟกัสจากแป้นพิมพ์:
/* NEVER do this: */
* { outline: none; } /* removes all focus outlines */
/* GOOD: styled focus indicator: */
:focus-visible {
outline: 2px solid #0070f3;
outline-offset: 3px;
border-radius: 4px;
}
/* :focus-visible shows outline for keyboard only
mouse clicks don't trigger :focus-visible -->
/* But outline: none with :focus (not :focus-visible) hides for both */รูปแบบโฟกัสแบบกำหนดเอง
รูปแบบโฟกัสของระบบการออกแบบ:
/* Replace outline with box-shadow for rounded elements: */
button:focus-visible {
outline: none;
box-shadow: 0 0 0 3px rgba(0, 112, 243, 0.4);
}
/* Always ensure 3:1 contrast ratio between
focus indicator and background (WCAG 2.4.11 Level AA) */ลำดับโฟกัสที่มีเหตุผล
ลำดับโฟกัสควรมีเหตุผลและคาดเดาได้ — WCAG 2.4.3 (ระดับ A):
<!-- BAD: focus order jumps around the page -->
<!-- First: footer link (tabindex=5) -->
<!-- Then: sidebar (tabindex=3) -->
<!-- Then: header nav (tabindex=1) -->
<!-- GOOD: natural DOM order matches reading flow: -->
<!-- Header → Nav → Main Content → Sidebar → Footer -->ลิงก์ข้าม
ลิงก์ข้ามช่วยให้ผู้ใช้แป้นพิมพ์ข้ามการนำทางที่ซ้ำ ๆ ได้:
<a href="#main-content" class="skip-link">Skip to main content</a>
<!-- Visually hidden until focused: -->
.skip-link {
position: absolute;
top: -100%;
left: 0;
background: #0070f3;
color: white;
padding: 0.75rem;
z-index: 9999;
}
.skip-link:focus {
top: 0; /* visible when focused -->
}การกักโฟกัสใน modal
modal ต้องกักโฟกัสไว้ขณะที่เปิดอยู่:
<!-- When modal opens:
1. Move focus to modal container or first interactive element
2. Tab stays within modal
3. When modal closes, return focus to the trigger button
-->
const modal = document.getElementById('modal');
const trigger = document.getElementById('open-modal');
function openModal() {
modal.removeAttribute('hidden');
modal.querySelector('button, [tabindex="0"]').focus();
}
function closeModal() {
modal.setAttribute('hidden', '');
trigger.focus();
}แป้นพิมพ์ลัด
ใช้ตัวรับฟังเหตุการณ์เพื่อสร้างแป้นพิมพ์ลัด:
document.addEventListener('keydown', (e) => {
// Close modal on Escape:
if (e.key === 'Escape') closeModal();
// Navigate tabs with arrow keys:
if (e.key === 'ArrowRight') focusNextTab();
if (e.key === 'ArrowLeft') focusPrevTab();
// Submit form on Enter (default behavior in inputs):
// Nothing needed — browser handles this
});การทดสอบการนำทางด้วยแป้นพิมพ์
วิธีทดสอบการเข้าถึงด้วยแป้นพิมพ์:
- วางเมาส์ไว้ แล้วใช้แป้นพิมพ์เพียงอย่างเดียว
- กด Tab — คุณไปยังองค์ประกอบแบบโต้ตอบได้ทุกองค์ประกอบหรือไม่
- ตัวบ่งชี้โฟกัสมองเห็นได้ตลอดเวลาหรือไม่
- ลำดับการกด Tab มีเหตุผลหรือไม่
- คุณใช้ฟีเจอร์ทั้งหมด (แบบฟอร์ม, modal, เมนูแบบเลื่อนลง) ได้โดยไม่ใช้เมาส์หรือไม่
- กด Shift+Tab เพื่อนำทางย้อนกลับ
ตรวจสอบอย่างรวดเร็ว
คุณไม่ควรลบคุณสมบัติ CSS ใดออกจากองค์ประกอบทั้งหมด เพื่อให้เข้าถึงได้ด้วยแป้นพิมพ์
สรุป: การนำทางด้วยแป้นพิมพ์
สิ่งสำคัญเกี่ยวกับการเข้าถึงด้วยแป้นพิมพ์:
- องค์ประกอบแบบโต้ตอบทั้งหมดต้องไปถึงได้ด้วย Tab
- ลำดับ DOM = ลำดับการกด Tab — ต้องตรงกับการจัดวางที่มองเห็นได้
- อย่าลบเส้นกรอบโฟกัส — ใช้
:focus-visibleสำหรับรูปแบบแบบกำหนดเอง - ลิงก์ข้ามช่วยให้ข้ามการนำทางที่ซ้ำ ๆ ได้
- กักโฟกัสไว้ใน modal และคืนโฟกัสเมื่อปิด
- ทดสอบโดยใช้เว็บไซต์ด้วยแป้นพิมพ์เพียงอย่างเดียว
คำถามที่พบบ่อย
บทเรียน “การนำทางด้วยแป้นพิมพ์และลำดับโฟกัส” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การนำทางด้วยแป้นพิมพ์และลำดับโฟกัส” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส HTML Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การนำทางด้วยแป้นพิมพ์และลำดับโฟกัส”
ทำให้ทุกฟังก์ชันเข้าถึงได้ด้วยแป้นพิมพ์อย่างเป็นลำดับและมีเหตุผล คุณปฏิบัติ HTML Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน HTML Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน HTML Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การนำทางด้วยแป้นพิมพ์และลำดับโฟกัส” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน HTML Academy นี้ได้ไหม
ได้ บทเรียน HTML Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดการเข้าถึงจึงสำคัญ: ระดับ WCAG
- ลำดับหัวข้อสำหรับโปรแกรมอ่านหน้าจอ
- ข้อความ Alt ของรูปภาพ: เมื่อใดและเขียนอย่างไร
- การนำทางด้วยแป้นพิมพ์และลำดับโฟกัส