0Pricing
HTML Academy · Lekcja

Live regions — aria-live, aria-atomic i aria-relevant

Ogłaszanie asynchronicznych aktualizacji technologiom asystującym

Live regions — aria-live, aria-atomic i aria-relevant to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 3 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.

Czym są regiony na żywo?

Region na żywo to sekcja strony, której zawartość jest aktualizowana dynamicznie. Czytniki ekranu monitorują regiony na żywo i automatycznie ogłaszają zmiany, bez konieczności przenoszenia fokusu przez użytkownika.

Tworzenie regionu na żywo

Dodaj aria-live do elementu kontenera:

<!-- Polite: announce when user is idle -->
<div aria-live="polite" id="notifications"></div>

<!-- Inject text to announce: -->
<script>
document.getElementById('notifications').textContent = '5 new messages';
// Screen reader announces: '5 new messages' when user pauses
</script>

Podsumowanie wartości aria-live

Trzy poziomy aria-live:

  • off — brak ogłoszeń (domyślnie dla regionów, które nie są regionami na żywo)
  • polite — ogłaszanie, gdy użytkownik zrobi przerwę w mówieniu
  • assertive — ogłaszanie natychmiastowe, przerywa bieżącą wypowiedź

aria-atomic w praktyce

aria-atomic określa, co jest ogłaszane po zmianie zawartości:

<div aria-live="polite" aria-atomic="false">  <!-- default -->
  Items in cart: <span id="count">3</span>
</div>
<!-- Only the changed span is announced: '4' -->

<div aria-live="polite" aria-atomic="true">
  Items in cart: <span id="count">3</span>
</div>
<!-- The entire div is announced: 'Items in cart: 4' -->

<!-- aria-atomic="true" gives more context but is more verbose -->

Wartości aria-relevant

aria-relevant określa, które zmiany DOM wywołują ogłoszenia:

<!-- Default: additions text -->
<div aria-live="polite" aria-relevant="additions text">

<!-- Announce removals too: -->
<div aria-live="polite" aria-relevant="removals">

<!-- Announce everything: -->
<div aria-live="polite" aria-relevant="all">

<!-- Values: additions, removals, text, all
     'additions' = added nodes announced
     'removals' = removed nodes announced
     'text' = text content changes announced -->

Wstępnie zdefiniowane role regionów na żywo

Niektóre role niejawnie ustawiają aria-live:

  • role="alert" — aria-live="assertive" + aria-atomic="true"
  • role="status" — aria-live="polite" + aria-atomic="true"
  • role="log" — aria-live="polite"
  • role="timer" — aria-live="off"
  • role="marquee" — aria-live="off"

Stan ładowania z regionem na żywo

Ogłaszanie rozpoczęcia i zakończenia ładowania:

<div role="status" aria-live="polite" aria-atomic="true" id="load-status">
  <!-- empty initially -->
</div>

<script>
async function loadData() {
  document.getElementById('load-status').textContent = 'Loading...';
  const data = await fetchData();
  renderResults(data);
  document.getElementById('load-status').textContent =
    `${data.length} results loaded.`;
}
</script>

Informacja zwrotna po wysłaniu formularza

Region na żywo informujący o stanie wysyłania formularza:

<form id="contact-form" novalidate>
  <input type="email" name="email">
  <button type="submit">Subscribe</button>
</form>

<div role="status" aria-live="polite" id="form-status"></div>

<script>
form.addEventListener('submit', async (e) => {
  e.preventDefault();
  const status = document.getElementById('form-status');
  status.textContent = 'Submitting...';
  await submitForm(new FormData(form));
  status.textContent = 'Thank you! You are now subscribed.';
});
</script>

Liczba wyników wyszukiwania

Dynamiczne ogłaszanie wyników wyszukiwania:

<label for="search">Search</label>
<input type="search" id="search">

<div role="status" aria-live="polite" aria-atomic="true" id="results-count"></div>
<div id="results"></div>

<script>
let debounceTimer;
search.addEventListener('input', () => {
  clearTimeout(debounceTimer);
  debounceTimer = setTimeout(() => {
    const results = filterResults(search.value);
    renderResults(results);
    document.getElementById('results-count').textContent =
      `${results.length} results for "${search.value}"`;
  }, 300);
});
</script>

Antywzorce regionów na żywo

Należy unikać następujących błędów dotyczących regionów na żywo:

  • Nie należy tworzyć i usuwać regionów na żywo — powinny być trwałe i początkowo puste
  • Nie należy umieszczać regionów na żywo w obszarach aria-hidden
  • Nie należy używać wartości assertive do rutynowych aktualizacji — jest bardzo uciążliwa
  • Nie należy ogłaszać aktualizacji zbyt często (należy ograniczyć częstotliwość aktualizacji liczby wyników wyszukiwania)

Testowanie regionów na żywo

Jak testować ogłoszenia regionów na żywo:

  • Włącz VoiceOver (Mac: Cmd+F5) lub NVDA (Windows: Ctrl+Alt+N)
  • Wywołaj aktualizację i posłuchaj ogłoszenia
  • Sprawdź czas reakcji: polite czeka, a assertive przerywa
  • Sprawdź, czy axe DevTools nie zgłasza problemów z regionami na żywo

Szybkie sprawdzenie

Jaka rola niejawnie ustawia aria-live na assertive i aria-atomic na true?

Podsumowanie: regiony na żywo

Najważniejsze informacje o regionach na żywo:

  • aria-live="polite" — czeka na przerwę użytkownika
  • aria-live="assertive" — natychmiast przerywa bieżący komunikat
  • aria-atomic="true" — ogłasza cały region
  • role="alert" = assertive + atomic; role="status" = polite + atomic
  • Regiony na żywo powinny być trwałe; najpierw należy wyczyścić zawartość, a następnie ją ustawić

Często zadawane pytania

Czy lekcja „Live regions — aria-live, aria-atomic i aria-relevant” jest bezpłatna?

Tak — pełny tekst „Live regions — aria-live, aria-atomic i aria-relevant” 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 „Live regions — aria-live, aria-atomic i aria-relevant”?

Ogłaszanie asynchronicznych aktualizacji technologiom asystującym Ć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 3 z 4.

Ile czasu zajmuje lekcja „Live regions — aria-live, aria-atomic i aria-relevant”?

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