React + MotionLoaders
Skeleton de tarjeta
Un marcador con forma de tarjeta, avatar y líneas de texto que late suavemente mientras llegan los datos.
Ajustes
40px
1.8s
Código
import { motion } from "framer-motion";
interface SkeletonCardProps {
color?: string;
/** Tamaño del avatar en px. */
size?: number;
/** Duración de un pulso en segundos. */
speed?: number;
}
export default function SkeletonCard({
color = "#86868b",
size = 40,
speed = 1.8,
}: SkeletonCardProps) {
return (
<motion.div
aria-busy="true"
className="w-56 rounded-3xl bg-white p-4 shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)] dark:bg-[#1c1c1e]"
animate={{ opacity: [1, 0.4, 1] }}
transition={{ duration: speed, repeat: Infinity, ease: "easeInOut" }}
>
<div className="flex items-center gap-3">
<div
className="rounded-full"
style={{ width: size, height: size, backgroundColor: color }}
/>
<div className="flex-1 space-y-2">
<div className="h-2.5 rounded-full" style={{ backgroundColor: color, width: "70%" }} />
<div className="h-2.5 rounded-full" style={{ backgroundColor: color, width: "40%" }} />
</div>
</div>
<div className="mt-4 space-y-2">
<div className="h-2.5 rounded-full" style={{ backgroundColor: color }} />
<div className="h-2.5 rounded-full" style={{ backgroundColor: color, width: "85%" }} />
<div className="h-2.5 rounded-full" style={{ backgroundColor: color, width: "60%" }} />
</div>
</motion.div>
);
}
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 Loaders
Dónde usarlo
Un skeleton loader enseña la forma de lo que va a llegar en vez de un hueco. Imita una fila de perfil con avatar y líneas de texto: va bien en una sección de comentarios, la lista de miembros de una app de equipo o los contactos de un CRM. La página parece más rápida aunque no lo sea.
Haz que el skeleton se parezca lo máximo posible al diseño real, para que nada salte cuando entre el contenido. Usa un tono muy suave del color del texto; con un color fuerte parece un diseño terminado.