React + MotionMicro-interactions
Notation par étoiles
Cinq étoiles qui se remplissent au survol pour prévisualiser la note et restent pleines après le clic.
Réglages
Code
import { useState } from "react";
import { motion } from "framer-motion";
import { Star } from "lucide-react";
const spring = { type: "spring" as const, stiffness: 300, damping: 30 };
interface StarRatingProps {
color?: string;
}
export default function StarRating({ color = "#c58b32" }: StarRatingProps) {
const [rating, setRating] = useState(0);
const [hover, setHover] = useState(0);
return (
<div className="flex gap-1">
{[1, 2, 3, 4, 5].map((i) => (
<motion.button
key={i}
type="button"
aria-label={`${i} de 5 estrellas`}
aria-pressed={rating === i}
onMouseEnter={() => setHover(i)}
onMouseLeave={() => setHover(0)}
onClick={() => setRating(i)}
whileHover={{ scale: 1.18, y: -2 }}
transition={spring}
>
<Star
className="h-8 w-8"
stroke={color}
fill={i <= (hover || rating) ? color : "transparent"}
/>
</motion.button>
))}
</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 Micro-interactions
Où l’utiliser
Les étoiles restent le moyen le plus rapide de demander un avis. L’aperçu au survol montre la note avant de la valider, et chaque étoile se soulève un peu. Utilisez-la après une livraison, à la fin d’un cours, sous une recette ou dans un formulaire d’avis. Rares sont ceux qui ignorent une notation par étoiles aussi réactive.
Sur mobile, sans survol, la note se fixe directement au toucher, et cela marche très bien. Affichez la note choisie en toutes lettres à côté, comme « 4 sur 5 », et laissez changer d’avis avant l’envoi.