React + MotionLoaders

Skeleton d’hébergement

Un espace réservé en forme d’annonce d’hébergement, avec photo, titre, lieu et prix, et un reflet qui balaie l’image.

Réglages

1.6s

Code

import { motion } from "framer-motion";

interface StaySkeletonProps {
  /** Segundos que tarda el brillo en cruzar la foto. */
  speed?: number;
}

export default function StaySkeleton({
  speed = 1.6,
}: StaySkeletonProps) {
  return (
    <div aria-busy="true" className="w-full max-w-64 space-y-3">
      <div className="relative aspect-[4/3] overflow-hidden rounded-2xl bg-black/5 dark:bg-white/10">
        <motion.div
          className="absolute inset-0 bg-[linear-gradient(90deg,transparent,rgba(29,29,31,0.08),transparent)] bg-[length:200%_100%] dark:bg-[linear-gradient(90deg,transparent,rgba(245,245,247,0.08),transparent)]"
          animate={{ backgroundPosition: ["200% 0", "-200% 0"] }}
          transition={{ duration: speed, repeat: Infinity, ease: "linear" }}
        />
      </div>
      <div className="h-3 w-4/5 rounded-full bg-black/5 dark:bg-white/10" />
      <div className="h-3 w-2/5 rounded-full bg-black/5 dark:bg-white/10" />
      <div className="h-3 w-1/3 rounded-full bg-black/5 dark:bg-white/10" />
    </div>
  );
}

Prompt pour l’IA

Collez-le dans ChatGPT, Claude ou Cursor : le bloc sera adapté à votre projet avec ces réglages, même sans React.

Plus dans Loaders

Où l’utiliser

Les sites de réservation et les places de marché vivent de grilles d’annonces, et leurs photos mettent un instant à charger. Ce skeleton reprend la carte type d’une location de vacances, d’un hôtel ou d’un appartement à vendre : une grande image, puis les lignes du titre, du lieu et du prix. Remplissez-en une grille et la page garde sa forme.

Affichez autant de skeletons que de résultats attendus, pas un seul, pour que la mise en page ne bouge pas ensuite. Le reflet ne passe que sur la photo, c’est voulu : des lignes de texte immobiles rendent la grille plus reposante.