React + MotionBotones

Botón con efecto ripple

Cada clic lanza una onda suave desde el punto exacto donde pulsas, como una gota cayendo en el agua.

Ajustes

24px
1

Código

import { useState } from "react";
import { motion } from "framer-motion";

interface Ripple {
  id: number;
  x: number;
  y: number;
}

interface RippleButtonProps {
  color?: string;
  radius?: number;
  text?: string;
  intensity?: number;
}

export default function RippleButton({
  color = "#0071e3",
  radius = 24,
  text = "Haz clic",
  intensity = 1,
}: RippleButtonProps) {
  const [ripples, setRipples] = useState<Ripple[]>([]);

  return (
    <button
      type="button"
      className="relative overflow-hidden px-6 py-3 text-sm font-semibold text-white shadow-lg"
      style={{ backgroundColor: color, borderRadius: radius }}
      onClick={(e) => {
        const r = e.currentTarget.getBoundingClientRect();
        const id = Date.now();
        setRipples((p) => [...p, { id, x: e.clientX - r.left, y: e.clientY - r.top }]);
        setTimeout(() => setRipples((p) => p.filter((rp) => rp.id !== id)), 700);
      }}
    >
      <span className="relative z-10">{text}</span>
      {ripples.map((r) => (
        <motion.span
          key={r.id}
          className="absolute rounded-full bg-white/40"
          style={{ left: r.x, top: r.y, width: 10, height: 10, x: "-50%", y: "-50%" }}
          initial={{ scale: 0, opacity: 0.8 }}
          animate={{ scale: 20 * intensity, opacity: 0 }}
          transition={{ duration: 0.7, ease: "easeOut" }}
        />
      ))}
    </button>
  );
}

Prompt para IA

Pégalo en ChatGPT, Claude o Cursor y adaptará el bloque a tu proyecto con estos ajustes, aunque no uses React.

Versión Markdown con todo el código, para asistentes de IA

Más en Botones

Ver todos: Botones

Dónde usarlo

La onda es una respuesta pequeña que dice «sí, lo he recibido». Queda natural en paneles de control, zonas de administración y formularios donde se hace clic a menudo: «Guardar», «Añadir a la lista», «Enviar». Quien haya usado un móvil Android reconocerá este botón con efecto ripple a la primera, así que no hay que explicar nada.

Dale al botón un color con cuerpo para que la onda blanca se vea. En botones pequeños baja la intensidad, o la onda lo tapa todo de golpe. Para una web muy minimalista quizá te encaje más un botón que simplemente se hunde al pulsar.