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ówieniuassertive— 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żytkownikaaria-live="assertive"— natychmiast przerywa bieżący komunikataria-atomic="true"— ogłasza cały regionrole="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
- aria-expanded i aria-controls dla przełączników
- aria-selected i wzorce kart
- Live regions — aria-live, aria-atomic i aria-relevant
- Testowanie za pomocą czytników ekranu