Zasada 03
Miejsce na błąd
Formularz, który skacze przy walidacji, karze użytkownika za pomyłkę drugi raz. Slot na komunikat błędu jest częścią layoutu od pierwszego renderu. Pusty również zajmuje swoją wysokość i cierpliwie czeka.
Logowanie: błąd, który niczego nie przesuwa
Wyślij oba formularze puste. Lewy skacze przy każdej walidacji, prawy ma sloty na komunikaty od pierwszego renderu.
✕ Bez rezerwacji
✓ Z rezerwacją
Reguły
- Pod każdym polem istnieje slot o stałej minimalnej wysokości na komunikat walidacji.
- Globalne błędy (sieć, serwer) mają własny zarezerwowany obszar i nie wypychają przycisków.
- Pojawienie się i zniknięcie błędu nie przesuwa żadnego innego elementu.
- Komunikat mówi, co zrobić dalej, a aria-live ogłasza go czytnikom ekranu.
Wzorzec w kodzie
<label htmlFor="email">E-mail</label>
<input id="email" aria-invalid={Boolean(error)} />
<p className="min-h-lh text-xs text-red-400">
{error ?? " "}
</p><div aria-live="polite" className="flex min-h-11 items-center">
{serverError && (
<p role="alert" className="rounded-lg bg-red-500/10 px-3 py-2">
{serverError}
</p>
)}
</div>
<button type="submit">Zapisz</button>