Popover mit Pfeil
Eine kleine Blase, die aus dem Button herauswächst, der sie öffnet, mit einem Pfeil zurück zur Quelle.
Einstellungen
Code
import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";
import { Info } from "lucide-react";
const spring = { type: "spring" as const, stiffness: 300, damping: 30 };
interface PopoverProps {
title?: string;
}
export default function Popover({ title = "Bevor du weitermachst" }: PopoverProps) {
const [open, setOpen] = useState(false);
return (
<div className="relative text-[#1d1d1f] dark:text-[#f5f5f7]">
<button
type="button"
aria-label="Informationen"
aria-expanded={open}
onClick={() => setOpen((o) => !o)}
className="grid h-11 w-11 place-items-center rounded-full bg-white dark:bg-[#1c1c1e] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
>
<Info className="h-5 w-5" />
</button>
<AnimatePresence>
{open && (
<motion.div
initial={{ opacity: 0, scale: 0.85, y: -8 }}
animate={{ opacity: 1, scale: 1, y: 0 }}
exit={{ opacity: 0, scale: 0.9 }}
style={{ transformOrigin: "top center" }}
transition={spring}
className="absolute left-1/2 top-14 z-10 w-56 -translate-x-1/2 rounded-2xl bg-white p-4 text-sm shadow-[0_4px_12px_rgba(0,0,0,0.04),0_24px_60px_rgba(0,0,0,0.1)] dark:bg-[#1d1d1f]"
>
<i className="absolute -top-1.5 left-1/2 h-3 w-3 -translate-x-1/2 rotate-45 bg-white dark:bg-[#1d1d1f]" />
<b>{title}</b>
<p className="mt-1 text-[#86868b]">Kurze Infos im richtigen Kontext.</p>
</motion.div>
)}
</AnimatePresence>
</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 Overlays
Wofür du ihn nutzen kannst
Popovers sind für die „Was heißt das?“-Momente: eine Gebühr neben dem Preis erklärt, ein Hinweis neben einem Formularfeld oder Details zu einer Funktion in der Preistabelle. Weil es mit einem kleinen Pfeil aus dem Button herauswächst, sieht man sofort, woher die Info kommt. Kaum eine Komponente hilft einem verwirrenden Formular so sehr wie ein gut platziertes Popover.
Halte den Text bei ungefähr zwei Zeilen. Alles Längere gehört auf die Seite oder in ein Modal. Nimm als Titel die echte Frage, die Leute stellen, etwa „Wozu braucht ihr meine Telefonnummer?“, statt einer allgemeinen Überschrift.