HTML Academy · Lekcja

aria-expanded i aria-controls dla przełączników

Budowanie dostępnych widżetów ujawniania treści i akordeonów za pomocą ARIA

Lekcja 1 z 413 kroki

aria-expanded i aria-controls dla przełączników to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.

Omówienie wzorca przełącznika

Kontrolki przełączające (akordeony, listy rozwijane, menu) potrzebują ARIA, aby komunikować swój stan otwarcia lub zamknięcia:

  • aria-expanded — wskazuje stan otwarcia lub zamknięcia kontrolki
  • aria-controls — łączy kontrolkę z elementem, którym ona steruje

aria-expanded

aria-expanded informuje, czy kontrolowany element jest rozwinięty, czy zwinięty:

<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 wskazuje identyfikator id kontrolowanego elementu:

<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' -->

Wzorzec akordeonu

Dostępny akordeon z 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>

Wzorzec menu rozwijanego

Dostępne rozwijane menu nawigacyjne:

<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 sygnalizuje, że aktywowanie kontrolki otworzy wyskakujące okno:

<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 -->

Uzupełnienie ARIA dla details/summary

Natywne elementy details/summary już komunikują stan rozwinięcia — ARIA nie jest potrzebne:

<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 dla stanu aria-expanded

Użyj aria-expanded jako punktu zaczepienia w 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);
}

Wymagania klawiaturowe dla przełączników

Komponenty przełączające muszą obsługiwać interakcję za pomocą klawiatury:

  • Enter lub Spacja — aktywowanie przycisku przełącznika
  • Escape — zamknięcie listy rozwijanej lub menu
  • Klawisze strzałek — nawigowanie po otwartym menu

Zarządzanie fokusem po przełączeniu

Po przełączeniu zawartości należy odpowiednio zarządzać fokusem:

// 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();
  }
});

Uwagi dotyczące urządzeń mobilnych

Komponenty przełączające na urządzeniach mobilnych:

  • Obszary dotykowe muszą mieć co najmniej 44×44px (WCAG 2.5.5)
  • aria-expanded jest obsługiwane przez mobilne czytniki ekranu (iOS VoiceOver, Android TalkBack)
  • Gesty przesuwania nie zastępują aktywowania za pomocą klawiatury ani przycisku

Szybkie sprawdzenie

Jaką wartość powinien mieć aria-expanded, gdy kontrolowana sekcja jest ukryta?

Podsumowanie: aria-expanded i aria-controls

Najważniejsze informacje o ARIA dla przełączników:

  • aria-expanded="true/false" — stan otwarcia lub zamknięcia kontrolki
  • aria-controls="id" — łączy kontrolkę z jej panelem
  • aria-haspopup — sygnalizuje dostępność wyskakującego okna
  • Przy każdym przełączeniu należy aktualizować aria-expanded
  • Po otwarciu menu należy przenieść fokus do jego wnętrza, a po zamknięciu zwrócić go do elementu wyzwalającego
Bezpłatny start

Ucz się HTML dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
40
Lekcje
159

Często zadawane pytania

Czy lekcja „aria-expanded i aria-controls dla przełączników” jest bezpłatna?

Tak — pełny tekst „aria-expanded i aria-controls dla przełączników” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „aria-expanded i aria-controls dla przełączników”?

Budowanie dostępnych widżetów ujawniania treści i akordeonów za pomocą ARIA Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć HTML Academy?

Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „aria-expanded i aria-controls dla przełączników”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?

Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. aria-expanded i aria-controls dla przełączników
  2. aria-selected i wzorce kart
  3. Live regions — aria-live, aria-atomic i aria-relevant
  4. Testowanie za pomocą czytników ekranu
← Powrót do HTML Academy