Acordeón suave
Una pregunta que se abre con suavidad para enseñar su respuesta, con una flecha que gira al desplegarse.
Ajustes
Código
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 = "¿Qué incluye la reserva?" }: 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">
Todo lo necesario está incluido. Puedes cambiar esta respuesta desde los controles.
</p>
</motion.div>
)}
</AnimatePresence>
</div>
);
}
Prompt para IA
Pégalo en ChatGPT, Claude o Cursor y adaptará el bloque a tu proyecto con estos ajustes, aunque no uses React.
Más en Microinteracciones
Dónde usarlo
Los acordeones hacen que una página de preguntas frecuentes se recorra rápido: se leen las preguntas y se abre solo lo que interesa. Úsalo para «¿Qué incluye la reserva?» en un hotel, los envíos de una tienda online o el temario de un curso. La altura se anima en vez de saltar, y este acordeón en React se siente tranquilo.
Escribe cada pregunta como la haría un cliente, no como un título tipo «Políticas». Deja las respuestas en un párrafo corto. Si casi todo el mundo necesita leerlas todas, enséñalas directamente: esconderlas solo añade clics.