Product Craft Bible
Toast & Alertas
Inicio Componentes UI Toast & Alertas
Componentes UI

Toast & Alertas

8 reglas ARIA 1.2 spec "alert", "status", "alertdialog" · Deque "accessible notifications" · W3C WCAG 4.1.3 Status Messages · Apple HIG NotificationsMaterial Design 3 "Snackbars" · Apple HIG Banners · Shopify Polaris Toast · Atlassian Design System FlagWCAG 2.1 SC 2.2.1 Timing Adjustable · Material Design 3 Snackbars · NNG "How Long Users Take to Read Web Pages" · Shopify Polaris Toast durationAndroid Material Design 3 Snackbar guidelines · Apple HIG Banners · Slack, GitHub, Linear positioning · Nielsen "Match between system and real world"
9

Toast & Alertas

8 reglas
106

role=status, role=alert, role=alertdialog: cada semántica tiene su momento

Los toasts informativos o de éxito deben usar role="status" con aria-live="polite", que anuncia al lector de pantalla en el siguiente momento disponible sin interrumpir al usuario. Los toasts de error deben usar role="alert" con aria-live="assertive", que interrumpe inmediatamente porque el error requiere atención urgente. El role="alertdialog" se reserva exclusivamente para cuando el toast solicita acción explícita del usuario (confirmación, decisión) y debe mover el foco al diálogo. Usar role="alert" para mensajes informativos crea una experiencia AT ruidosa y agotadora; usarlo solo cuando el usuario debe actuar de inmediato.

ARIA 1.2 spec "alert", "status", "alertdialog" · Deque "accessible notifications" · W3C WCAG 4.1.3 Status Messages · Apple HIG Notifications
Preferir
Cambios guardados correctamente
El proyecto fue actualizado hace un momento.
role="status" · polite
¿Eliminar este archivo?
Esta acción no se puede deshacer.
role="alertdialog" · mueve foco
107

Máximo 1 acción en toast; Undo/Retry ideales; 2 acciones → dialog

Un toast debe ofrecer como máximo una acción secundaria: Undo o Retry son los arquetipos ideales porque son reversiones inmediatas de una operación única. Cuando el toast contiene dos CTAs ("Cancelar" y "Confirmar") la anchura del componente se vuelve insuficiente para dar a los botones espacio visual adecuado, el tap target se comprime en mobile, y cognitivamente el usuario debe tomar una decisión binaria en un componente temporal que puede desaparecer antes de que decida. Esas decisiones binarias pertenecen a un dialog modal que no desaparece automáticamente, permite leer el contexto con calma y no compite con el flujo de la interfaz principal.

Material Design 3 "Snackbars" · Apple HIG Banners · Shopify Polaris Toast · Atlassian Design System Flag
Preferir
Archivo eliminado
Evitar
¿Confirmar eliminación?
2 CTAs compiten · decisión en componente temporal
108

4-5s para mensajes cortos; nunca auto-dismiss en errores

El rango de 4 a 5 segundos para auto-dismiss de toasts informativos proviene de estudios de tiempo de lectura: un mensaje corto de 5-8 palabras se lee en 1-1.5s, por lo que 4s ofrece margen 2.5-3× para procesarlo con comodidad. Ir por debajo de 3s excluye a personas con dislexia o baja velocidad de lectura. Los toasts de error nunca deben desaparecer automáticamente: el usuario debe leer el mensaje, entender la causa, y decidir la acción correctiva; si el error desaparece mientras el usuario está procesándolo, genera confusión sobre si el problema fue resuelto. El botón de cierre explícito en errores es obligatorio.

WCAG 2.1 SC 2.2.1 Timing Adjustable · Material Design 3 Snackbars · NNG "How Long Users Take to Read Web Pages" · Shopify Polaris Toast duration
Preferir
Perfil actualizado exitosamente
Auto-dismiss en 4 s · barra de progreso animada
Error al guardar los cambios
Sin auto-dismiss · cierre explícito obligatorio
Sin timer
109

Posición: bottom Android, top iOS, bottom-right web desktop

La posición canónica del toast varía por plataforma y tiene fundamentos ergonómicos y de convención. En Android, el toast aparece en la parte inferior centrada, lejos del área de interacción principal del pulgar. En iOS, el banner de notificación aparece en la parte superior (donde el sistema operativo ubica sus propias alertas), creando consistencia con el entorno del sistema. En web desktop, bottom-right es la convención establecida por Slack, GitHub, Linear y otros productos de referencia, porque no tapa el contenido principal y el área inferior derecha es ergonómicamente periférica. Desobedecer estas convenciones crea fricción porque el usuario busca el toast en el lugar donde lo ha visto miles de veces antes.

Android Material Design 3 Snackbar guidelines · Apple HIG Banners · Slack, GitHub, Linear positioning · Nielsen "Match between system and real world"
Preferir
Android
Guardado
Bottom · centrado
iOS
Guardado
Top · centrado
Web Desktop
Guardado
Bottom-right
110

Toasts nunca roban foco; F8/F6 hotkey opt-in para AT

El foco del teclado no debe moverse hacia el toast cuando aparece; hacerlo interrumpe el flujo del usuario que está completando un formulario, una selección, o cualquier tarea en curso. Los toasts usan regiones live (aria-live) que anuncian sin mover el foco. Para usuarios de tecnologías asistivas que quieren interactuar con el toast (por ejemplo, activar el botón "Deshacer"), la convención emergente es ofrecer un hotkey opt-in: F8 o F6 mueve el foco a la región de notificación, similar a como los IDEs permiten moverse entre paneles sin abandonar el área de edición. Escape devuelve el foco a su posición anterior. Esta combinación respeta el flujo de usuarios sin discapacidad mientras da acceso completo a usuarios AT.

ARIA Live Regions spec · Deque "Focus Management in Applications" 2023 · W3C ARIA APG Toast Pattern · VS Code notification panel F8
Preferir
Foco en campo Email
Toast aparece
Foco PERMANECE
en Email
Live region
anuncia AT
F8 opt-in AT
Foco → Toast Region
Tab
Botón "Deshacer" recibe foco
Esc
Foco regresa a Email
111

Stack máx 3 toasts; cola FIFO; MD3 = 1 solo en mobile

Apilar más de 3 toasts simultáneamente crea ruido visual, compite por la atención del usuario, y llena el espacio periférico que en principio debía ser inocuo. La cola FIFO (first in, first out) garantiza que el usuario no se pierda mensajes: si un cuarto toast llega mientras hay 3 activos, espera en cola hasta que el más antiguo se descarte. Material Design 3 es más estricto en mobile: recomienda un único snackbar visible en cualquier momento dado, argumentando que el espacio vertical en pantallas pequeñas no permite apilar sin tapar contenido significativo. La ilusión de profundidad con scale() y translateY comunica que hay más mensajes debajo sin revelarlos todos de golpe.

Material Design 3 Snackbar spec · Radix UI Toast stacking · Sonner (Emil Kowalski) stacked toasts · Vercel design system notifications
Preferir
Exportación finalizada En cola
Sesión expira en 5 min
3 comentarios nuevos
Cambios guardados
112

Acciones en toast difíciles para AT; duplicar en UI principal

El botón de acción en un toast (como "Deshacer" o "Recuperar") es accesible para usuarios sin discapacidad visual con buenos reflejos, pero problemático para usuarios de teclado o lector de pantalla: el toast puede desaparecer antes de que el usuario lo alcance con Tab, la zona de foco puede no ser obvia, y el timer de auto-dismiss crea presión temporal. La solución es duplicar la acción en la UI principal: si el archivo "eliminado" sigue recuperable, mostrarlo en la lista con un estado visual diferenciado ("En papelera") junto a un botón "Recuperar" estático que no desaparece. El toast es la notificación rápida para usuarios ágiles; la UI principal es el safety net universal que garantiza WCAG 2.1.

Deque "Accessible Notifications" · WCAG 2.1 SC 2.2.1 · Linear "undo" redundancy · Gmail trash accessibility pattern
Preferir
Toast (temporal)
Archivo
eliminado
misma acción
UI Principal (permanente)
PNG
banner-v2.png
1.2 MB
hero-image.png
En papelera
PDF
brief-cliente.pdf
890 KB
113

Pausar timer en hover/focus; espejar info en UI

El timer de auto-dismiss debe pausarse cuando el cursor está sobre el toast o cuando cualquier elemento del toast tiene foco de teclado. Sin esta pausa, el toast puede desaparecer precisamente cuando el usuario está intentando leer el mensaje completo o mover el cursor hacia el botón de acción. WCAG 2.1 SC 2.2.1 (Timing Adjustable) requiere que los timings controlables se puedan pausar. El cambio visual durante el estado hover (color de barra, indicador "Pausado") es importante: confirma al usuario que el timer se detuvo y que tiene tiempo para actuar sin presión. CSS animation-play-state: paused en el selector :hover o :focus-within implementa esto sin JavaScript adicional.

WCAG 2.1 SC 2.2.1 Timing Adjustable · WCAG 2.2 SC 2.2.3 No Timing · Sonner toast library pause behavior · Radix UI Toast hover pause · Material Design 3
Preferir
Reporte exportado correctamente
Pausado
Barra consume en 5 s · hover o focus para pausar
Timer pausado · barra en color acento · badge "Pausado"