React + MotionButtons
Aufklappbarer Aktions-Button
Ein Button, der sich öffnet und ein paar weitere Aktionen zeigt, während das Plus zum Kreuz wird.
Einstellungen
Code
import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";
import { ChevronDown, Plus, Share2 } from "lucide-react";
interface ExpandingMenuButtonProps {
text?: string;
}
export default function ExpandingMenuButton({
text = "Aktionen",
}: ExpandingMenuButtonProps) {
const [open, setOpen] = useState(false);
return (
<motion.div
layout
transition={{ type: "spring", stiffness: 300, damping: 30 }}
className="overflow-hidden rounded-[26px] bg-white dark:bg-[#1c1c1e] p-1 text-[#1d1d1f] dark:text-[#f5f5f7] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
>
<button
type="button"
aria-expanded={open}
onClick={() => setOpen((v) => !v)}
className="flex h-12 items-center gap-2 rounded-full px-4 text-sm font-medium"
>
<Plus className={`h-4 w-4 transition-transform ${open ? "rotate-45" : ""}`} />
{text}
<ChevronDown className={`h-4 w-4 transition-transform ${open ? "rotate-180" : ""}`} />
</button>
<AnimatePresence>
{open && (
<motion.div
initial={{ height: 0, opacity: 0 }}
animate={{ height: "auto", opacity: 1 }}
exit={{ height: 0, opacity: 0 }}
className="flex gap-1 overflow-hidden px-1 pb-1"
>
<button
type="button"
className="rounded-full bg-black/5 px-4 py-2 text-sm dark:bg-white/10"
>
Speichern
</button>
<button
type="button"
className="flex items-center gap-1 rounded-full bg-black/5 px-4 py-2 text-sm dark:bg-white/10"
>
<Share2 className="h-4 w-4" /> Teilen
</button>
</motion.div>
)}
</AnimatePresence>
</motion.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 Buttons
Wofür du ihn nutzen kannst
Nicht jede Aktion braucht einen eigenen Button. Dieser hält Nebenaktionen wie „Speichern“ und „Teilen“ versteckt, bis jemand danach fragt. Praktisch auf einer Rezeptkarte, einer Produktseite im Shop oder bei einem Dokument im Kundenportal. Im Grunde ein kompaktes, aufklappbares Aktionsmenü in React.
Zwei oder drei Aktionen sind ideal. Bei mehr ist ein normales Dropdown-Menü leichter zu überblicken. Gib dem Button ein Wort, das jeder versteht, etwa „Optionen“ oder „Mehr“, statt nur ein Icon zu zeigen.