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.