React + MotionMicrointeracciones

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.