0Pricing
HTML Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. aria-expanded และ aria-controls สำหรับตัวสลับ
  2. aria-selected และรูปแบบแท็บ
  3. ภูมิภาคแบบไลฟ์: aria-live aria-atomic aria-relevant
  4. การทดสอบด้วยโปรแกรมอ่านหน้าจอ
← กลับไปที่ HTML Academy