Tilt 3D

Mueve el cursor sobre la tarjeta para inclinarla en el espacio.

React + MotionCards

Tarjeta con tilt 3D

Una tarjeta que se inclina en 3D hacia el cursor y vuelve a quedarse plana cuando sacas el ratón.

Ajustes

1
16px

Código

import { useRef } from "react";
import { motion, useMotionValue, useSpring, useTransform } from "framer-motion";

interface TiltCardProps {
  intensity?: number;
  glow?: string;
  radius?: number;
}

export default function TiltCard({
  intensity = 1,
  glow = "#0071e3",
  radius = 16,
}: TiltCardProps) {
  const ref = useRef<HTMLDivElement>(null);
  const mx = useMotionValue(0);
  const my = useMotionValue(0);
  const rx = useSpring(
    useTransform(my, [-0.5, 0.5], [12 * intensity, -12 * intensity]),
    { stiffness: 220, damping: 20 },
  );
  const ry = useSpring(
    useTransform(mx, [-0.5, 0.5], [-12 * intensity, 12 * intensity]),
    { stiffness: 220, damping: 20 },
  );

  return (
    <div style={{ perspective: 900 }}>
      <motion.div
        ref={ref}
        style={{
          rotateX: rx,
          rotateY: ry,
          borderRadius: radius,
          boxShadow: `0 20px 60px -20px ${glow}66`,
        }}
        className="w-64 border border-black/10 bg-white p-6 text-[#1d1d1f] dark:border-white/10 dark:bg-[#1c1c1e] dark:text-[#f5f5f7]"
        onMouseMove={(e) => {
          const el = ref.current;
          if (!el) return;
          const r = el.getBoundingClientRect();
          mx.set((e.clientX - r.left) / r.width - 0.5);
          my.set((e.clientY - r.top) / r.height - 0.5);
        }}
        onMouseLeave={() => {
          mx.set(0);
          my.set(0);
        }}
      >
        <div className="mb-4 h-10 w-10 rounded-full" style={{ backgroundColor: glow }} />
        <h3 className="text-base font-semibold">Tilt 3D</h3>
        <p className="mt-1.5 text-sm text-[#86868b]">
          Mueve el cursor sobre la tarjeta para inclinarla en el espacio.
        </p>
      </motion.div>
    </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 Cards

Dónde usarlo

El tilt funciona mejor en contenido donde quieres que la gente se detenga: el producto estrella de una tienda, un portfolio, una tarjeta regalo o los planes de precios. Con el movimiento, una tarjeta plana parece un objeto que podrías coger. Las webs de producto llevan años usando este efecto de tarjeta 3D, y sigue funcionando.

Baja la intensidad si la tarjeta lleva mucho texto, porque leer mientras se mueve cansa. Luce más con una imagen y un título corto. En pantallas táctiles no hay hover, así que la tarjeta se queda plana.