React + MotionMikrointeraktionen

Sanftes Akkordeon

Eine Frage, die sich sanft öffnet und ihre Antwort zeigt, dazu ein Pfeil, der sich beim Aufklappen dreht.

Einstellungen

Code

import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";
import { ChevronDown } from "lucide-react";

const spring = { type: "spring" as const, stiffness: 300, damping: 30 };

interface AccordionProps {
  title?: string;
}

export default function Accordion({ title = "Was ist in der Buchung enthalten?" }: AccordionProps) {
  const [open, setOpen] = useState(false);

  return (
    <div className="w-72 overflow-hidden rounded-[22px] bg-white dark:bg-[#1c1c1e] 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((o) => !o)}
        className="flex w-full items-center justify-between p-5 text-left text-sm font-medium"
      >
        {title}
        <motion.span animate={{ rotate: open ? 180 : 0 }} transition={spring}>
          <ChevronDown className="h-4 w-4" />
        </motion.span>
      </button>
      <AnimatePresence initial={false}>
        {open && (
          <motion.div
            initial={{ height: 0, opacity: 0 }}
            animate={{ height: "auto", opacity: 1 }}
            exit={{ height: 0, opacity: 0 }}
            transition={spring}
            className="overflow-hidden"
          >
            <p className="border-t border-black/10 px-5 py-4 text-sm text-[#86868b] dark:border-white/10">
              Alles Nötige ist enthalten. Du kannst diese Antwort über die Steuerelemente ändern.
            </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 Mikrointeraktionen

Wofür du ihn nutzen kannst

Akkordeons halten FAQ-Seiten und Produktdetails übersichtlich: Man liest die Fragen und öffnet nur, was einen interessiert. Nutz es für „Was ist in der Buchung enthalten?“ auf einer Hotelseite, für Versand und Rückgabe im Onlineshop oder für den Ablauf eines Kurses. Die Höhe wird animiert statt zu springen, deshalb wirkt dieses Akkordeon in React ruhig.

Formulier jede Frage so, wie ein Kunde sie stellen würde, nicht als Überschrift wie „Richtlinien“. Halte Antworten kurz. Brauchen fast alle jede Antwort, zeig sie einfach direkt auf der Seite, denn Verstecken kostet nur Klicks.