ADR-053 ActifActive pattern

Navigation mobile : sidebar en drawer coulissant et bouton contextuel dans le contenu

DateDate
2026-06-10
DécideursDecision makers
Humain (approbation) · Design System Lead (navigation)

English summary: On mobile (≤768px), the secondary sidebar rendered above the page content because it preceded <main> in the DOM. This ADR turns the sidebar into a sliding drawer (fixed position, off-canvas, overlay + Escape/click-outside to close) and moves its toggle button into the content, right before the page's <h1>, appearing only on pages that actually have a sidebar.

>

*The original French version follows below — preserved unaltered as the historical record.*


Contexte

Sur mobile (≤ 768 px), la sidebar de navigation secondaire (Fondations, Composants, Décisions) s'affichait dans le flux normal de la page — avant le contenu — car elle précède <main> dans le DOM et le layout passe en flex-direction: column. Le premier élément visible était donc la liste de navigation, non le titre de page.

Par ailleurs, sur les pages sans sidebar (accueil, Tokens, Agents), le bouton d'accès au drawer était présent dans le header alors qu'il n'avait aucun effet — il était contextuel mais positionné de manière globale.


Décision

1. Sidebar transformée en drawer coulissant (mobile uniquement)

Sur max-width: 768px, la sidebar est repositionnée en position: fixed (hors flux), glissant depuis la gauche via transform: translateX(-100%)translateX(0). Elle n'interfère plus avec l'ordre de lecture du contenu.

Comportement du drawer :

2. Bouton d'accès au drawer placé dans le contenu, avant le <h1>

Le bouton sidebar-toggle est rendu dans <main>, juste avant le titre de page — uniquement sur les pages possédant une sidebar. Il n'est jamais présent dans le header ni sur les pages sans sidebar.

Justification :

immédiatement avant de lire

Style du bouton : fond background-subtle + bordure + icône panel-left + label "Navigation" (FR/EN) — lisible comme action, pas juste une icône opaque.


Alternatives rejetées

AlternativeRaison du rejet
Bouton dans le header (toujours visible)Présent sur pages sans sidebar — trompeur et inutile
Sidebar au-dessus du contenu (comportement initial)L'utilisateur lit la navigation avant la page — charge cognitive inutile
Menu déroulant intégré au top-nav mobileConfond navigation principale et secondaire

Conséquences

  • Sur desktop (> 768 px) : aucun changement — la sidebar reste dans le flux, le bouton est masqué

via display: none

  • Le JS du drawer doit être présent sur toutes les pages avec sidebar (injecté via layout())
  • Toute nouvelle page avec sidebar hérite automatiquement du comportement (rendu conditionnel dans

layout())

  • À surveiller : si une page accumule beaucoup de liens sidebar, envisager un accordéon par

groupe (ADR futur)

← ADR-052 ADR-054 →