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.