React + MotionNavigation

Onglets segmentés iOS

Un rail gris clair sur lequel une pastille blanche à l’ombre légère glisse vers la section choisie.

Réglages

3

Code

import { useState } from "react";
import { AnimatePresence, motion } from "framer-motion";

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

const OPTIONS = ["Séjours", "Expériences", "Services"];

interface SegmentedControlProps {
  count?: number;
}

export default function SegmentedControl({ count = 3 }: SegmentedControlProps) {
  const options = OPTIONS.slice(0, count);
  const [active, setActive] = useState(0);

  return (
    <div className="flex rounded-full bg-black/5 p-1 text-[#1d1d1f] dark:text-[#f5f5f7] dark:bg-white/10">
      {options.map((option, i) => (
        <button
          key={option}
          type="button"
          aria-pressed={active === i}
          onClick={() => setActive(i)}
          className="relative rounded-full px-4 py-2 text-sm"
        >
          <AnimatePresence>
            {active === i && (
              <motion.span
                layoutId="segmented-pill"
                className="absolute inset-0 rounded-full bg-white dark:bg-[#1c1c1e] shadow-[0_1px_2px_rgba(0,0,0,0.03),0_8px_28px_rgba(0,0,0,0.05)]"
                transition={spring}
              />
            )}
          </AnimatePresence>
          <span className="relative">{option}</span>
        </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

Imaginez l’en-tête d’un site de réservation qui sépare son offre en « Logements », « Expériences » et « Services ». C’est là que ces onglets segmentés façon iOS trouvent leur place : un passage neutre entre deux ou trois grandes sections, pas un filtre coloré. La pastille blanche glisse avec un ressort doux, comme dans les applications iPhone.

Sans couleur d’accent, elle s’intègre bien aux pages chargées sans concurrencer vos boutons principaux. Limitez-vous à trois options et choisissez des mots que les gens taperaient dans une recherche, pas des noms internes.