aria-expanded และ aria-controls สำหรับตัวสลับ
สร้างวิดเจ็ตแสดงรายละเอียดและแอคคอร์เดียนที่เข้าถึงได้ด้วย ARIA
aria-expanded และ aria-controls สำหรับตัวสลับ เป็นบทเรียน HTML Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน HTML Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวมรูปแบบตัวควบคุมแบบสลับ
ตัวควบคุมแบบสลับ (แอคคอร์เดียน เมนูแบบเลื่อนลง และเมนูต่าง ๆ) ต้องใช้ ARIA เพื่อสื่อสารสถานะเปิดหรือปิด:
aria-expanded— ระบุสถานะเปิดหรือปิดของตัวควบคุมaria-controls— เชื่อมตัวควบคุมกับองค์ประกอบที่ตัวควบคุมดูแล
แอตทริบิวต์ aria-expanded
aria-expanded สื่อสารว่าองค์ประกอบที่ควบคุมอยู่นั้นขยายหรือยุบอยู่:
<button aria-expanded="false" aria-controls="menu">
Menu
</button>
<ul id="menu" hidden>
<li><a href="/">Home</a></li>
</ul>
<script>
btn.addEventListener('click', () => {
const expanded = btn.getAttribute('aria-expanded') === 'true';
btn.setAttribute('aria-expanded', !expanded);
menu.hidden = expanded;
});
</script>แอตทริบิวต์ aria-controls
aria-controls อ้างอิง id ขององค์ประกอบที่ถูกควบคุม:
<button
id="details-btn"
aria-expanded="false"
aria-controls="details-panel"
>
Show Details
</button>
<div id="details-panel" hidden>
<p>Additional details go here...</p>
</div>
<!-- Screen reader: 'Show Details, button, collapsed'
After click: 'Show Details, button, expanded' -->รูปแบบแอคคอร์เดียน
แอคคอร์เดียนที่เข้าถึงได้ด้วย aria-expanded:
<div class="accordion">
<h3>
<button
aria-expanded="false"
aria-controls="panel-1"
>Section 1</button>
</h3>
<div id="panel-1" hidden>
<p>Panel 1 content...</p>
</div>
<h3>
<button
aria-expanded="false"
aria-controls="panel-2"
>Section 2</button>
</h3>
<div id="panel-2" hidden>
<p>Panel 2 content...</p>
</div>
</div>รูปแบบเมนูแบบเลื่อนลง
เมนูนำทางแบบเลื่อนลงที่เข้าถึงได้:
<nav>
<button
aria-expanded="false"
aria-haspopup="true"
aria-controls="products-menu"
>Products</button>
<ul id="products-menu" role="menu" hidden>
<li role="menuitem"><a href="/widget">Widget</a></li>
<li role="menuitem"><a href="/gadget">Gadget</a></li>
</ul>
</nav>แอตทริบิวต์ aria-haspopup
aria-haspopup บอกเป็นนัยว่าการเปิดใช้งานตัวควบคุมจะเปิดป๊อปอัป:
<button aria-haspopup="menu">File</button>
<!-- Values: true (menu), menu, listbox, tree, grid, dialog -->
<!-- Screen reader: 'File, button, has popup' -->
<!-- Note: aria-haspopup="true" is equivalent to "menu" -->
<!-- Use specific values when the popup type matters -->ส่วนเสริม ARIA สำหรับ Details/Summary
details/summary แบบเนทีฟสื่อสารสถานะการขยายอยู่แล้ว จึงไม่จำเป็นต้องใช้ ARIA:
<details>
<summary>FAQ Question</summary>
<p>Answer goes here.</p>
</details>
<!-- Browser automatically provides aria-expanded
and the disclosure widget semantics -->
<!-- No need to add aria-expanded manually to summary -->CSS สำหรับสถานะ aria-expanded
ใช้ aria-expanded เป็นตัวเชื่อมสำหรับ CSS:
/* Panel hidden by default: */
[aria-controls] + [hidden] {
display: none;
}
/* Or using aria-expanded on the button: */
[aria-expanded="false"] + .panel {
display: none;
}
[aria-expanded="true"] + .panel {
display: block;
}
/* Rotate arrow icon: */
[aria-expanded="true"] .arrow {
transform: rotate(180deg);
}ข้อกำหนดแป้นพิมพ์สำหรับตัวควบคุมแบบสลับ
องค์ประกอบตัวควบคุมแบบสลับต้องรองรับการโต้ตอบด้วยแป้นพิมพ์:
- Enter หรือ Space — เปิดใช้งานปุ่มสลับ
- Escape — ปิดเมนูแบบเลื่อนลงหรือเมนู
- ปุ่มลูกศร — นำทางภายในเมนูที่เปิดอยู่
การจัดการโฟกัสหลังการสลับ
หลังจากสลับเนื้อหาแล้ว ให้จัดการโฟกัสอย่างเหมาะสม:
// Accordion: focus stays on the button (usually OK)
// Dropdown menu: move focus to first menu item on open
button.addEventListener('click', () => {
const expanded = button.getAttribute('aria-expanded') === 'true';
button.setAttribute('aria-expanded', !expanded);
panel.hidden = expanded;
if (!expanded) {
// Opening a dropdown: focus first item
panel.querySelector('a, button, [tabindex]')?.focus();
}
});ข้อควรพิจารณาสำหรับอุปกรณ์เคลื่อนที่
องค์ประกอบตัวควบคุมแบบสลับบนอุปกรณ์เคลื่อนที่:
- พื้นที่เป้าหมายสำหรับการแตะต้องมีขนาดอย่างน้อย 44×44px (WCAG 2.5.5)
- โปรแกรมอ่านหน้าจอบนอุปกรณ์เคลื่อนที่รองรับ aria-expanded (iOS VoiceOver, Android TalkBack)
- ท่าทางการปัดไม่สามารถใช้แทนการเปิดใช้งานด้วยแป้นพิมพ์หรือปุ่มได้
ตรวจสอบความเข้าใจอย่างรวดเร็ว
aria-expanded ควรมีค่าใดเมื่อส่วนที่ควบคุมถูกซ่อนไว้
สรุป: aria-expanded และ aria-controls
สาระสำคัญของ ARIA สำหรับตัวควบคุมแบบสลับ:
aria-expanded="true/false"— สถานะเปิดหรือปิดของตัวควบคุมaria-controls="id"— เชื่อมตัวควบคุมกับแผงของตัวควบคุมaria-haspopup— บอกเป็นนัยว่ามีป๊อปอัปให้เปิด- อัปเดต aria-expanded ทุกครั้งที่สลับ
- ย้ายโฟกัสเข้าไปในเมนูที่เปิด และคืนโฟกัสไปยังตัวเรียกใช้เมื่อปิด
คำถามที่พบบ่อย
บทเรียน “aria-expanded และ aria-controls สำหรับตัวสลับ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “aria-expanded และ aria-controls สำหรับตัวสลับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส HTML Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “aria-expanded และ aria-controls สำหรับตัวสลับ”
สร้างวิดเจ็ตแสดงรายละเอียดและแอคคอร์เดียนที่เข้าถึงได้ด้วย ARIA คุณปฏิบัติ HTML Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน HTML Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน HTML Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “aria-expanded และ aria-controls สำหรับตัวสลับ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน HTML Academy นี้ได้ไหม
ได้ บทเรียน HTML Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- aria-expanded และ aria-controls สำหรับตัวสลับ
- aria-selected และรูปแบบแท็บ
- ภูมิภาคแบบไลฟ์: aria-live aria-atomic aria-relevant
- การทดสอบด้วยโปรแกรมอ่านหน้าจอ