Toast może potwierdzić zapis albo ostrzec o zmianie, ale pojawia się nad aktualnym widokiem i konkuruje z jego treścią. Projektujemy go tak, by użytkownik mógł odczytać komunikat i zamknąć go klawiaturą, a błąd wymagający reakcji pozostał dostępny do czasu rozwiązania.
Krótka odpowiedź
Tailwind CSS odpowiada za wygląd toastu, a JavaScript za kolejkę, zamykanie i czas wyświetlania. Dla zwykłego potwierdzenia użyj regionu `role="status"`, a `role="alert"` zostaw dla pilnej informacji wymagającej natychmiastowej uwagi.
Zapewnij nazwany przycisk zamknięcia, nie przenoś automatycznie fokusu i nie usuwaj komunikatu potrzebnego do dokończenia zadania.
Usługi KC Mobile
Potrzebujesz pomocy w tym temacie?
Czytasz poradnik „Tailwind CSS toast: jak wdrożyć powiadomienia, które są czytelne i dostępne”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny.
Czym jest toast i kiedy warto go użyć?
Toast przekazuje krótką informację o zdarzeniu bez zmiany widoku i bez blokowania dalszej pracy. Tailwind CSS dostarcza klasy stylowania, ale kolejkę, timer, zamykanie i aktualizowanie treści trzeba dodać w JavaScript albo zapewnić przez bibliotekę komponentów.
| Zdarzenie | Zalecany komunikat | Kiedy znika |
|---|---|---|
| Zapis ustawień zakończył się powodzeniem | Krótki toast z `role="status"` | Po czasie pozwalającym odczytać treść |
| Pole formularza zawiera nieprawidłową wartość | Tekst przy polu powiązany z kontrolką | Po poprawieniu wartości lub wyczyszczeniu błędu |
| Połączenie przerwano, a zmiany nie zostały zapisane | Trwały komunikat z instrukcją odzyskania zmian | Po rozwiązaniu problemu albo świadomym zamknięciu |
| Usunięcie można cofnąć | Toast z akcją cofnięcia | Po czasie na odczyt i wybór akcji |
| Użytkownik musi podjąć decyzję przed dalszą pracą | Dialog z obsługą fokusu | Po wyborze działania |
Alert w HTML może być trwałym komunikatem osadzonym w układzie strony, a walidacja formularza powinna wskazywać konkretne pole i błąd. Toast nadaje się do zdarzenia, którego potwierdzenie nie wymaga przerwania zadania. Jeśli dodajesz akcję, na przykład cofnięcie usunięcia, daj użytkownikowi czas na jej wybór i zaplanuj obsługę fokusu.
Czytasz poradnik „Tailwind CSS toast: jak wdrożyć powiadomienia, które są czytelne i dostępne”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny. Omów temat tego poradnika
Jak zbudować podstawowy toast w Tailwind CSS?
Podstawowy toast składa się z kontenera przypiętego do okna przeglądarki i karty o ograniczonej szerokości, w której tekst może się zawijać. Ten przykład pokazuje potwierdzenie; sam HTML nie zamknie komunikatu i nie uruchomi timera.
<div class="fixed inset-x-4 top-4 z-50 mx-auto w-full max-w-sm sm:left-auto sm:right-4 sm:mx-0">
<div role="status" aria-atomic="true"
class="flex items-start gap-3 rounded-lg border border-emerald-200 bg-white p-4 text-slate-900 shadow-lg">
<span aria-hidden="true" class="mt-0.5 size-5 shrink-0 rounded-full bg-emerald-600"></span>
<p class="min-w-0 flex-1 text-sm leading-5">Zmiany zostały zapisane.</p>
<button type="button" aria-label="Zamknij powiadomienie"
class="shrink-0 rounded p-1 text-slate-600 hover:bg-slate-100 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-emerald-700">
<span aria-hidden="true">×</span>
</button>
</div>
</div>`fixed` przypina kontener do viewportu, `inset-x-4 top-4` pozostawia margines od krawędzi, a `z-50` umieszcza go nad typową treścią strony. `max-w-sm` ogranicza szerokość karty. `min-w-0 flex-1` pozwala tekstowi zawijać się bez wypychania przycisku, a `shrink-0` chroni przycisk przed ściśnięciem.
Dopasuj `top-4` do stałego nagłówka albo wybierz dolną krawędź, jeśli toast nie zasłoni tam ważnych elementów. Porównaj jego warstwę z menu, banerem cookies i dialogiem, bo samo podniesienie `z-index` nie rozwiązuje konfliktu z każdym kontekstem stosu. Własną konfigurację Tailwind sprawdź w wygenerowanym CSS, by upewnić się, że kompilator uwzględnił użyte klasy.
Wdrożenie Tailwind CSS pozwala dopasować taki komponent do systemu stylów i struktury istniejącego serwisu.
Jak dodać warianty sukcesu, błędu i ostrzeżenia?
Warianty powinny zachować wspólny układ, a różnić się tekstem i wskazówką wizualną. Nie polegaj wyłącznie na kolorze, bo odbiorca może nie rozróżniać barw albo korzystać z czytnika ekranu.
| Typ zdarzenia | Wskazówka wizualna | Przykładowa treść | Semantyka |
|---|---|---|---|
| Potwierdzenie | Zieleń i dekoracyjna ikona potwierdzenia | "Zamówienie zostało zapisane." | `status` |
| Pilny problem | Czerwień i ikona ostrzeżenia | "Połączenie przerwane. Zmiany nie zostały zapisane." | `alert`, tylko gdy potrzebna jest natychmiastowa uwaga |
| Ostrzeżenie bez pilnej reakcji | Bursztyn i ikona informacji | "Sesja wkrótce wygaśnie." | Zwykle `status` |
Ikonę, która tylko powtarza tekst, oznacz `aria-hidden="true"`. Treść powinna samodzielnie wyjaśniać zdarzenie i dalsze działanie. `role="status"` służy informacjom doradczym, które nie powinny przerywać bieżącej wypowiedzi czytnika. `role="alert"` jest asertywny, dlatego nie przypisuj go każdemu błędowi.
Nie umieszczaj przycisków ani linków w komunikacie o roli `alert`. Jeśli użytkownik ma wykonać akcję, użyj spokojniejszej semantyki albo komponentu zapewniającego dostęp do interaktywnego elementu. W dokumentacji Tailwind CSS pokazujemy, jak dopasować klasy i komponenty do różnych stanów interfejsu.

Jak obsłużyć zamykanie i automatyczne znikanie?
Automatycznie zamykaj tylko komunikaty, które nie wymagają odpowiedzi ani powrotu do treści. Błąd zapisu, utrata połączenia lub wynik walidacji powinny pozostać dostępne, dopóki użytkownik nie rozwiąże problemu albo nie znajdzie informacji w trwałym miejscu.
Przycisk zamknięcia zbuduj jako `
Dla komunikatu z akcją wstrzymaj odliczanie, gdy wskaźnik znajduje się nad kartą albo fokus jest w jej obrębie. Zapisz pozostały czas, wyczyść timer przy `mouseenter` i `focusin`, a po `mouseleave` i `focusout` uruchom odliczanie od zapisanej wartości. Ręczne zamknięcie i timer powinny wywoływać tę samą funkcję usuwającą element oraz jego timer.
Nie ustawiaj jednego krótkiego czasu dla wszystkich treści. Dłuższe zdanie albo akcja wymagają dłuższego dostępu, a wiadomość potrzebna do ukończenia zadania powinna pozostać widoczna zamiast polegać na timerze.

Jak zapewnić dostępność komunikatu toast?
Semantykę regionu na żywo dobierz do pilności informacji, a nie do koloru wariantu. `role="status"` domyślnie działa jako `aria-live="polite"` i `aria-atomic="true"`, natomiast `role="alert"` służy do pilnych, dynamicznych wiadomości.
Umieść pusty region w DOM przed aktualizacją jego treści, szczególnie jeśli oczekujesz ogłoszenia przez technologie asystujące. Nie dodawaj jednocześnie `role="alert"` i `aria-live="assertive"` bez potrzeby, bo role alert już niesie semantykę pilnego regionu. Toast nie powinien automatycznie odbierać fokusu elementowi, z którego użytkownik korzysta.
- Przejdź do przycisku zamknięcia klawiszem Tab, sprawdź widoczny fokus i aktywuj go Enterem oraz Spacją.
- Sprawdź, czy czytnik odczytuje pełną treść i nie powtarza jej po zmianie DOM.
- Upewnij się, że tekst wyjaśnia zdarzenie bez polegania na kolorze lub ikonie.
- Zweryfikuj kontrast tekstu, obrysu fokusu i tła oraz działanie przy ograniczonym ruchu.
Treść walidacji pozostaw przy polu, które użytkownik ma poprawić, i powiąż ją z kontrolką. Live region informuje o zmianie, ale nie zastępuje komunikatu w miejscu podejmowania dalszej akcji. Zasady ról status i alert pomagają dobrać poziom pilności.
Jak wyświetlić kilka toastów bez zasłaniania treści?
Zarządzaj wieloma komunikatami w jednym kontenerze z ustalonym położeniem i kolejnością. Bez wspólnego zarządzania każde zdarzenie może utworzyć nową kartę w tym samym miejscu, zasłonić poprzednią i utrudnić dostęp do strony.
Określ limit widocznych powiadomień i zdecyduj, co stanie się z nadmiarem: trafi do kolejki, zostanie zgrupowany albo zaktualizuje istniejącą kartę. Jeśli użytkownik zapisuje kilka zmian po kolei, wiele kopii "Zapisano" nie wnosi nowej informacji. Nie grupuj zdarzeń o różnych skutkach, na przykład potwierdzenia zapisu i błędu płatności.
Na małym ekranie użyj szerokości zależnej od viewportu, a nie stałej wartości w pikselach. Długi tekst powinien się zawijać, przycisk zamknięcia pozostać widoczny, a stos nie zasłaniać nawigacji, formularza ani miejsca zajętego przez klawiaturę ekranową. Sprawdź pozycję na rzeczywistym urządzeniu.
Jeśli powiadomienia tworzą historię potrzebną do późniejszego przeglądania, zastosuj trwałe centrum powiadomień. Toast przekazuje tymczasową informację o zdarzeniu i nie powinien zastępować stanu zapisanego na stronie.
Jakie błędy najczęściej psują komponent toast?
Zrzut ekranu pokazuje wygląd karty, ale nie ujawnia, czy timer, fokus i region na żywo działają poprawnie. Najczęstsze usterki dotyczą logiki oraz treści, więc sprawdzaj je oddzielnie od klas Tailwind.
- Znak zamknięcia nie ma dostępnej nazwy albo nie jest natywnym przyciskiem.
- Kolor czerwony lub zielony oznacza wariant, ale treść nie wyjaśnia zdarzenia.
- Timer zamyka kartę, gdy użytkownik ją czyta albo przenosi na nią fokus.
- Toast zastępuje walidację przy polu i znika, zanim użytkownik poprawi formularz.
- Kilka kart zasłania menu, przycisk formularza lub część ekranu telefonu.
- Animacja przesunięcia lub zanikania ignoruje `prefers-reduced-motion`.
Uwzględnij preferencję ograniczenia ruchu w animacjach wejścia i wyjścia. Tailwind udostępnia wariant `motion-reduce`, a CSS pozwala użyć `@media (prefers-reduced-motion: reduce)`, by wyłączyć przesunięcie albo skrócić przejście. Stan komponentu powinien być zauważalny także bez animacji.
Jak sprawdzić toast przed wdrożeniem?
Testuj działający komponent przy różnych szerokościach, z długą treścią i kilkoma zdarzeniami w krótkim odstępie. Statyczny podgląd nie wykryje błędu timera, powtórzonego ogłoszenia ani problemu z fokusem.
| Test | Kryterium akceptacji |
|---|---|
| Wąski viewport i klawiatura ekranowa | Toast mieści się w widocznym obszarze i nie zasłania potrzebnej kontrolki |
| Długi komunikat i długa nazwa akcji | Tekst się zawija, a przycisk zamknięcia pozostaje dostępny |
| Kilka zdarzeń pod rząd | Limit, kolejka lub grupowanie zachowują kolejność bez zbędnych kopii |
| Nawigacja klawiaturą | Fokus pozostaje przewidywalny, przycisk ma widoczny obrys i można go aktywować |
| Czytnik ekranu | Status jest ogłaszany spokojnie, a alert informuje o faktycznie pilnym problemie |
| Preferencja ograniczonego ruchu | Animacja zostaje skrócona albo wyłączona, a komunikat nadal jest zauważalny |
| Błąd formularza | Informacja pozostaje przy polu i nie znika przed poprawieniem wartości |
W Chrome DevTools sprawdź element w panelu Elements i jego drzewo dostępności. W ustawieniach renderowania przetestuj emulację `prefers-reduced-motion`, zmień szerokość viewportu i wpisz tekst dłuższy niż typowy komunikat produkcyjny. Następnie przejdź całą interakcję klawiaturą i sprawdź odczyt z czytnikiem ekranu, ponieważ automatyczny audyt nie oceni użyteczności treści.
Jeśli toast pojawia się przy zmianach układu strony, sprawdź jego wpływ na przesunięcia treści i optymalizację Core Web Vitals. WordPress i Core Web Vitals pomogą ocenić komponent w kontekście serwisu. Gdy wdrażasz go na WordPressie, połącz kontrolę z pomiarem wydajności opisanym w poradniku jak przyspieszyć WordPress.
Więcej poradników w tym temacie
Wspomniane narzędzia
Najczęściej zadawane pytania
Jak zrobić toast notification w Tailwind CSS?
Jak dodać przycisk zamknięcia do toast w Tailwind CSS?
Jak długo powinien być widoczny toast?
Jak zrobić dostępny toast dla czytnika ekranu?
Jak wyświetlać kilka toastów naraz?
Potrzebujesz pomocy w tym temacie?
Czytasz poradnik „Tailwind CSS toast: jak wdrożyć powiadomienia, które są czytelne i dostępne”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny.
