React + MotionMikrointeraktionen

Sternebewertung

Fünf Sterne, die sich beim Hover als Vorschau füllen und nach dem Klick gefüllt bleiben.

Einstellungen

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 für KI

Füg ihn in ChatGPT, Claude oder Cursor ein und der Baustein wird mit diesen Einstellungen an dein Projekt angepasst, auch ohne React.

Mehr aus Mikrointeraktionen

Wofür du ihn nutzen kannst

Sterne sind immer noch der schnellste Weg, nach einer Meinung zu fragen. Die Hover-Vorschau zeigt die Wertung, bevor man sie festlegt, und jeder Stern hebt sich leicht unter dem Cursor. Nutz sie nach einer Lieferung, am Ende eines Onlinekurses, bei einem Rezept oder in einem Bewertungsformular. Eine Sternebewertung, die so schön auf die Maus reagiert, überspringt kaum jemand.

Auf dem Handy gibt es kein Hover, die Wertung wird also direkt beim Tippen gesetzt, und das klappt gut. Zeig die gewählte Zahl daneben in Worten, etwa „4 von 5“, und lass Leute vor dem Absenden umentscheiden.