React + MotionNavigation

Barre de catégories à icônes

Des catégories avec icône et libellé, et un soulignement qui glisse jusqu’à celle que vous choisissez.

Réglages

Code

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: "Maisons" },
  { icon: Compass, label: "Nature" },
  { icon: Calendar, label: "Escapades" },
  { icon: Layers, label: "Design" },
];

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 pour l’IA

Collez-le dans ChatGPT, Claude ou Cursor : le bloc sera adapté à votre projet avec ces réglages, même sans React.

Plus dans Navigation

Où l’utiliser

Les sites de location et les places de marché utilisent ce modèle pour parcourir par type avant de chercher : cabanes, maisons de plage, week-ends en ville, logements design. Il fonctionne aussi pour une boutique par familles de produits ou un site de recettes. Le soulignement glissant rend le choix évident, et la barre se lit d’un coup d’œil.

Choisissez des icônes qui correspondent vraiment à chaque libellé, et gardez des libellés d’un seul mot. Au-delà de six ou sept catégories, laissez la barre défiler horizontalement sur mobile plutôt que de tout serrer sur une ligne.