React + MotionMicrointeracciones
Badge de notificación
Un contador que cae sobre el icono de la campana con un pequeño rebote cuando llega algo nuevo.
Ajustes
3
Código
import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";
import { Bell } from "lucide-react";
const spring = { type: "spring" as const, stiffness: 300, damping: 30 };
interface NotificationBadgeProps {
color?: string;
count?: number;
}
export default function NotificationBadge({
color = "#d25563",
count = 3,
}: NotificationBadgeProps) {
const [show, setShow] = useState(true);
return (
<button
type="button"
aria-label={show ? `${count} notificaciones` : "Notificaciones"}
onClick={() => setShow((s) => !s)}
className="relative grid h-14 w-14 place-items-center rounded-full bg-white dark:bg-[#1c1c1e] text-[#1d1d1f] dark:text-[#f5f5f7] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
>
<Bell className="h-6 w-6" />
<AnimatePresence>
{show && (
<motion.span
initial={{ scale: 0, y: -10 }}
animate={{ scale: 1, y: 0 }}
exit={{ scale: 0 }}
transition={spring}
className="absolute -right-1 -top-1 grid h-6 min-w-6 place-items-center rounded-full px-1 text-[11px] font-semibold text-white"
style={{ backgroundColor: color }}
>
{count}
</motion.span>
)}
</AnimatePresence>
</button>
);
}
Prompt para IA
Pégalo en ChatGPT, Claude o Cursor y adaptará el bloque a tu proyecto con estos ajustes, aunque no uses React.
Más en Microinteracciones
Ver todos: MicrointeraccionesDónde usarlo
Un globo sobre una campana es la señal universal de «tienes algo pendiente». El rebote hace que lo nuevo se note sin sonidos ni pop-ups. Va en el icono de mensajes de un marketplace, en un foro o en el carrito de una tienda. Ese rebote separa un badge de notificación que se ve de uno que se ignora.
Por encima de 99 lo normal es mostrar «99+» en lugar de la cifra completa. Reserva el rojo para avisos de verdad y no vuelvas a animar el badge cada vez que carga la página, o la gente dejará de fijarse.