Product Craft Bible
Notification Badge
Inicio Componentes UI Notification Badge
Componentes UI

Notification Badge

8 reglas Luke Wroblewski "Mobile First" · Apple HIG Notification Badges · Google Material 3 Badge · Linear product decisionsGitHub notification badge · Apple HIG Badges · Slack notification count · Material Design 3 BadgeApple HIG Badge Positioning · iOS Mail badge implementation · Figma community badge patterns · Radix UI BadgeStanford Persuasive Tech Lab 2021 · Aza Raskin "Infinite Scroll" · Tristan Harris "Time Well Spent" · Linear notification design
10

Notification Badge

8 reglas
114

Dot cuando importa la existencia; número solo si cambia la decisión

El badge de notificación tiene dos modos con semántica distinta: el dot comunica "hay algo nuevo" sin cuantificar, y el badge numérico comunica "hay N ítems pendientes que deberían influir en cuánta atención le das ahora." Usar número donde el volumen cambia la decisión del usuario (inbox con 3 mensajes vs. 47 mensajes no son equivalentes), y dot donde el número no aporta información accionable. Mostrar "0" es el antipatrón más frecuente: si no hay nada pendiente, el badge no debe existir. Un badge vacío erosiona la confianza en el sistema porque sugiere un bug antes que un estado.

Luke Wroblewski "Mobile First" · Apple HIG Notification Badges · Google Material 3 Badge · Linear product decisions
Preferir
Alertas
3
Mensajes
12
Chat
Carrito
Dotexistencia sin cantidad
"3"priorizar 3 mensajes
"12"urgencia por volumen
Sin badgecarrito vacío
115

Overflow: 9+, 99+, o 1k+ según contexto; máx 4 chars

Un badge numérico que crece sin límite se deforma visualmente y pierde legibilidad; "1034" en un badge no solo es difícil de leer, sino que añade tensión visual innecesaria a la interfaz. El formato de overflow debe seleccionarse según el rango esperado para ese elemento: un carrito de compras probablemente nunca supera 9 ítems, un inbox supera los 99, y un repositorio con stars puede superar los 1000. La regla de los 4 caracteres máximos (incluyendo el +) mantiene la geometría del pill consistente y legible al tamaño típico de badge (14–18px de alto).

GitHub notification badge · Apple HIG Badges · Slack notification count · Material Design 3 Badge
Preferir
7
Carrito ítems
9+
Carrito overflow
50
Issues activos
99+
Inbox overflow
1.2k
Stars repo
Evitar
1034
Badge demasiado ancho, rompe la geometría pill, ilegible a 14px de alto, el layout se deforma
116

Posición: top-right, 1-2px fuera; box-shadow del color de superficie

El badge se ancla en la esquina superior derecha del ícono padre con top: -4px y right: -4px, colocándolo parcialmente fuera del área del ícono. La separación perceptual entre el ícono y el badge crea jerarquía clara: el badge no compite con el ícono sino que lo complementa. Crucialmente, la box-shadow del badge debe usar el color exacto del fondo sobre el que se muestra, no blanco fijo. En nav oscura, usar shadow oscura; en nav clara, shadow clara; en nav de color, shadow del mismo color. Una shadow de color incorrecto delata descuido y destruye la ilusión de separación visual.

Apple HIG Badge Positioning · iOS Mail badge implementation · Figma community badge patterns · Radix UI Badge
Preferir
4
Nav clara
shadow blanca
4
Nav oscura
shadow oscura
4
Nav azul
shadow azul
4
Mal: adentro, sin halo
117

Rojo solo para errores y urgencias; nunca para engagement

El rojo es el color de alerta más potente en la interfaz: activa la respuesta de amenaza antes de que el usuario procese el contenido del badge. Usarlo en notificaciones de likes, comentarios o actualizaciones de producto genera ansiedad crónica de interfaz, el usuario siente urgencia donde no la hay. Investigación de Stanford sobre dopamine-driven design (2021) muestra que redes sociales con badges rojos para engagement aumentan el FOMO pero reducen la satisfacción a largo plazo. Reservar rojo para errores críticos, fallos de sincronización, o ítems que requieren acción inmediata para evitar pérdida de datos o dinero.

Stanford Persuasive Tech Lab 2021 · Aza Raskin "Infinite Scroll" · Tristan Harris "Time Well Spent" · Linear notification design
Preferir
8
Notif.
3
Mensajes
24
Likes
1
Error sync
2
Updates
Evitar
8
Notif.
3
Mensajes
24
Likes
5
Comentarios
2
Updates
5 badges rojos, interfaz ansiosa. No se distingue urgencia real de engagement trivial.
118

aria-hidden en número + sr-only descriptivo + aria-live para updates

Un lector de pantalla que lee "3" sin contexto no transmite ninguna información útil. El número dentro del badge debe marcarse aria-hidden="true" y un elemento hermano con clase sr-only debe proveer la descripción completa: "3 mensajes no leídos." Para badges que se actualizan dinámicamente (contadores en tiempo real, notificaciones push), un contenedor con aria-live="polite" garantiza que el lector de pantalla anuncia el cambio sin interrumpir la lectura actual del usuario. aria-live="assertive" solo para errores críticos que requieren atención inmediata; aria-atomic="true" asegura que el SR lee el contenido completo del live region.

WAI-ARIA 1.2 Live Regions · WCAG 2.1 SC 4.1.3 · MDN aria-live · Inclusive Components "Notification" · A11y Project Badge Pattern
Preferir
<!-- Botón con badge accesible -->
<button type="button" aria-label="Mensajes">
  <svg aria-hidden="true">...</svg>
 
  <!-- Número oculto del lector -->
  <span aria-hidden="true" class="badge">3</span>
 
  <!-- Descripción para screen readers -->
  <span class="sr-only">3 mensajes no leídos</span>
</button>
 
<!-- Live region para updates dinámicos -->
<span
  aria-live="polite"
  aria-atomic="true"
  class="sr-only"
>
  Tienes 3 mensajes no leídos
</span>
119

Pulse animation solo en el primer evento; nunca loop

La animación de pulse en un badge cumple una función: llamar la atención sobre un evento nuevo que el usuario aún no ha visto. Una vez cumplida esa función, la animación debe detenerse. Un badge pulsando en loop es una de las formas más agresivas de distracción en la interfaz: el movimiento periférico activa constantemente el sistema visual de alerta del usuario. WCAG 2.1 SC 2.2.2 requiere que contenido en movimiento por más de 5 segundos tenga mecanismo de pausa. El principio de "minimum effective dose" de animación aplica aquí directamente: usar animation-iteration-count: 1 con easing ease-out que se disipa naturalmente.

Val Head "Designing Interface Animation" · MDN animation-iteration-count · WCAG 2.1 SC 2.2.2 · Apple HIG Motion
Preferir
1
Solo 1 vez
Pulsa al aparecer, luego quieto
Evitar
1
Loop infinito
No para, distracción permanente
120

Auto-clear al visitar para info; manual para errores/tareas; nunca 0

El momento en que desaparece un badge es tan crítico como el momento en que aparece. Para badges informativos (mensajes sin leer, notificaciones nuevas) el clear automático al visitar la sección es la experiencia correcta: el usuario entiende que "leer = resolver." Para badges de errores o tareas pendientes, el clear automático es peligroso: el badge debe desaparecer solo cuando el problema se resuelva, no cuando el usuario visite la pantalla. Bajo ninguna circunstancia mostrar "0" en el badge, cuando el contador llega a cero, el badge debe desaparecer completamente del DOM.

Gmail badge behavior · GitHub Issues badge · Stripe Dashboard error badges · Linear task completion
Preferir
Tipo de badge Trigger de clear Ejemplo
 Mensajes sin leer Al visitar la bandeja Badge de email
 Notificaciones Al abrir el panel Badge de campana
 Errores de sync Al resolver el error Badge de warning
 Tareas pendientes Al completar la tarea Badge de checklist
121

Antipatrones: badge blindness, rojo en todo, badge como único canal, badge como control

Cuatro antipatrones recurrentes degradan sistemas de badges funcionales. Badge blindness ocurre cuando la interfaz acumula tantos badges simultáneos que el usuario los filtra perceptualmente y deja de verlos. Rojo en todo diluye la señal de urgencia hasta hacerla inútil. Canal único viola el principio de redundancia informativa: si el badge es la única representación de datos críticos y desaparece, la información se pierde. Badge como control confunde affordance: el badge comunica estado, no es un target de interacción; el click debe ir al elemento padre, nunca al badge directamente.

NN/g "Notification Blindness" 2020 · Material Design "Don't over-badge" · WCAG 2.1 Target Size · Basecamp "Hey" badge design decisions
Evitar
Badge Blindness
8
3
21
99+
5
2
1
7
8 íconos, 8 badges, ninguno destaca. El cerebro los filtra como ruido.
Rojo en Todo
8
3
24
2
Todo rojo = nada urgente. La señal pierde significado por dilución.
Único Canal
5
Badge desapareció, 5 alertas perdidas sin rastro
Sin representación alternativa, cuando el badge se borra la información se pierde permanentemente.
Badge como Control
3
¿El badge es clickeable? Confunde affordance
El badge con flecha sugiere comportamiento propio. El target de click debe ser el ícono padre, nunca el badge.