React + MotionNavegación

Dock con aumento

Una fila de iconos donde el que está bajo el cursor crece y se eleva, y sus vecinos también.

Ajustes

1.45

Código

import { useState } from "react";
import { motion } from "framer-motion";
import { Calendar, Compass, Layers, MessageCircle, User } from "lucide-react";

const spring = { type: "spring" as const, stiffness: 300, damping: 30 };

const ITEMS = [
  { icon: Compass, label: "Explorar" },
  { icon: Calendar, label: "Calendario" },
  { icon: MessageCircle, label: "Mensajes" },
  { icon: Layers, label: "Capas" },
  { icon: User, label: "Perfil" },
];

interface DockProps {
  zoom?: number;
}

export default function Dock({ zoom = 1.45 }: DockProps) {
  const [hover, setHover] = useState(-9);

  return (
    <div className="flex h-24 items-end gap-2 rounded-[22px] bg-white/70 dark:bg-black/70 p-3 text-[#1d1d1f] dark:text-[#f5f5f7] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)] backdrop-blur-[20px]">
      {ITEMS.map(({ icon: Icon, label }, i) => (
        <motion.button
          key={label}
          type="button"
          aria-label={label}
          onHoverStart={() => setHover(i)}
          onHoverEnd={() => setHover(-9)}
          animate={{
            scale: hover === i ? zoom : Math.abs(hover - i) === 1 ? 1.12 : 1,
            y: hover === i ? -10 : 0,
          }}
          transition={spring}
          className="grid h-11 w-11 place-items-center rounded-xl bg-white dark:bg-[#1c1c1e] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
        >
          <Icon className="h-5 w-5" />
        </motion.button>
      ))}
    </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 Navegación

Dónde usarlo

Quien haya usado un Mac conoce este dock, y esa es la gracia. Sirve como navegación juguetona para el portfolio de un diseñador, los accesos rápidos de una web personal o una barra de herramientas dentro de una web app. Quien busca un efecto dock de macOS en React suele querer esto: iconos que crecen bajo el ratón.

Deja el aumento moderado, sobre 1,4, o los iconos empezarán a pisarse. Añade tooltips o etiquetas si los iconos no son evidentes. En el móvil no hay hover, así que asegúrate de que cada icono funcione ahí como un botón normal.