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.