Accordéon fluide
Une question qui s’ouvre en douceur pour dévoiler sa réponse, avec une flèche qui pivote en se dépliant.
Réglages
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 = "Que comprend la réservation ?" }: 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">
Tout le nécessaire est inclus. Vous pouvez modifier cette réponse depuis les commandes.
</p>
</motion.div>
)}
</AnimatePresence>
</div>
);
}
Prompt pour l’IA
Collez-le dans ChatGPT, Claude ou Cursor : le bloc sera adapté à votre projet avec ces réglages, même sans React.
Plus dans Micro-interactions
Où l’utiliser
Les accordéons rendent une FAQ ou une fiche produit faciles à parcourir : on lit les questions et on n’ouvre que ce qui intéresse. Utilisez-le pour « Que comprend la réservation ? » sur un site d’hôtel, la livraison et les retours d’une boutique en ligne ou le programme d’une formation. La hauteur s’anime sans à-coup, et cet accordéon en React reste posé.
Formulez chaque question comme un client la poserait, pas comme un intitulé du genre « Conditions ». Gardez des réponses courtes. Si presque tout le monde a besoin de tout lire, affichez directement le texte : le cacher ajoute des clics.