React + MotionNavegación

Barra de categorías con iconos

Categorías con icono y etiqueta, y un subrayado que se desliza hasta la que eliges.

Ajustes

Código

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

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

const ITEMS = [
  { icon: Home, label: "Casas" },
  { icon: Compass, label: "Naturaleza" },
  { icon: Calendar, label: "Escapadas" },
  { icon: Layers, label: "Diseño" },
];

interface CategoryBarProps {
  color?: string;
}

export default function CategoryBar({ color = "#0071e3" }: CategoryBarProps) {
  const [active, setActive] = useState(0);

  return (
    <div className="flex gap-7 border-b border-black/10 dark:border-white/10">
      {ITEMS.map(({ icon: Icon, label }, i) => (
        <button
          key={label}
          type="button"
          aria-pressed={active === i}
          onClick={() => setActive(i)}
          className="relative flex flex-col items-center gap-1.5 pb-3 text-xs text-[#86868b]"
        >
          <Icon className="h-5 w-5" style={{ color: active === i ? color : undefined }} />
          <span>{label}</span>
          {active === i && (
            <motion.i
              layoutId="cat-line"
              className="absolute inset-x-0 -bottom-px h-0.5"
              style={{ backgroundColor: color }}
              transition={spring}
            />
          )}
        </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

Los portales de alquiler y los marketplaces usan este patrón para explorar por tipo antes de buscar: cabañas, casas de playa, escapadas urbanas, alojamientos de diseño. También sirve en una tienda con familias de producto o un recetario. El subrayado deslizante deja clara la elección y la barra de categorías se entiende de un vistazo.

Elige iconos que de verdad correspondan a cada etiqueta y deja las etiquetas en una palabra. Con más de seis o siete categorías, deja que la barra se desplace en horizontal en el móvil en vez de apretarlo todo en una línea.