Echelle de z-index et couches d'elevation. Une echelle coherente evite les conflits de superposition et garantit que chaque couche d'interface s'empile correctement.
Speedcube Master utilise les classes utilitaires Tailwind z-* avec une echelle fixe par increments de 10. Cela permet d'inserer de nouvelles couches si necessaire sans casser l'existant. La seule exception est z-[100] pour les toasts Sonner, qui doivent toujours etre au premier plan.
Tous les niveaux utilises dans l'application, du plus bas au plus eleve.
| Classe Tailwind | Valeur | Usage |
|---|---|---|
z-0 | 0 | Contenu de base |
z-10 | 10 | Elements eleves |
z-20 | 20 | Sticky elements |
z-30 | 30 | Overlays et backdrops |
z-40 | 40 | Sidebar navigation |
z-50 | 50 | Header fixe, modales |
z-[100] | 100 | Toasts (Sonner) |
Representation visuelle de l'empilement des couches.
z-0Contenu de basez-10Elements elevesz-20Sticky elementsz-30Overlays et backdropsz-40Sidebar navigationz-50Header fixe, modalesz-[100]Toasts (Sonner)z-0, z-10, z-50, etc.z-[100] uniquement pour les toasts Sonner.relative ou isolate pour isoler les z-index locaux.style={{ zIndex: 9999 }}Utilisation des z-index dans des cas concrets de l'application.
// Header fixe — z-50
<header className="fixed top-0 inset-x-0 z-50 bg-background/80 backdrop-blur-md border-b border-border">
<nav className="max-w-6xl mx-auto px-4 h-16 flex items-center">
{/* ... */}
</nav>
</header>
// Overlay de modale — z-30 pour le backdrop, z-50 pour le contenu
<Dialog>
<DialogOverlay className="fixed inset-0 z-30 bg-black/60" />
<DialogContent className="fixed z-50 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
{/* ... */}
</DialogContent>
</Dialog>
// Sidebar mobile — z-40
<Sheet>
<SheetContent className="z-40 w-72">
<nav className="space-y-2">
{/* ... */}
</nav>
</SheetContent>
</Sheet>
// Sticky table of contents — z-20
<aside className="sticky top-20 z-20 hidden lg:block">
<TableOfContents items={headings} />
</aside>
// Dropdown menu — z-10
<DropdownMenuContent className="z-10 min-w-[180px]">
{/* ... */}
</DropdownMenuContent>
// Toasts Sonner — z-[100] (configure dans le provider)
<Toaster
position="bottom-right"
toastOptions={{
className: "z-[100]",
}}
/>