Aller au contenu principal

Navigation principale (Navigation)

Utilisez la navigation principale pour les grandes rubriques du site.

attention

Ce composant nécessite une licence Pro valide en production.

InformationValeur
NiveauPro
Composants Twigdsfr:nav, dsfr:nav:item, dsfr:nav:menu, dsfr:nav:mega

Usage

  • L’élément actif porte aria-current.
  • Les menus déroulants doivent contenir des liens.

Modes d'utilisation

Navigation principale · exemple principal
<twig:dsfr:nav>
<twig:dsfr:nav:item label="Accueil" href="/" active />
<twig:dsfr:nav:menu label="Dossiers" id="nav-files">
<twig:dsfr:nav:item label="Tous les dossiers" href="/dossiers" />
<twig:dsfr:nav:item label="Créer un dossier" href="/dossiers/nouveau" />
</twig:dsfr:nav:menu>
<twig:dsfr:nav:mega
id="nav-services"
label="Services"
:categories="[
{label: 'Démarches', items: [
{label: 'État civil', href: '/services/etat-civil'},
{label: 'Urbanisme', href: '/services/urbanisme'}
]}
]"
/>
</twig:dsfr:nav>

API publique

ComposantRôle
dsfr:navComposant principal de cette page.
dsfr:nav:itemSous-composant public utilisable en composition Twig.
dsfr:nav:menuSous-composant public utilisable en composition Twig.
dsfr:nav:megaSous-composant public utilisable en composition Twig.

Configuration

OptionTypeDéfaut / requisValeurs et usage
idstringSelon composantIdentifiant HTML, normalisé et utilisé par aria-controls quand nécessaire.
ariaLabelstringMenu principalLibellé accessible de la navigation.
itemsarray|string[]Items simples ou menus.
dsfr:nav:itempropshref, active, target, iconLien direct.
dsfr:nav:menuprops + slotid, label, active, expandedMenu déroulant dont le contenu est composé avec des liens dsfr:nav:item.
dsfr:nav:megaprops + slotid, label, active, expanded, categories, leaderMéga-menu DSFR pour les navigations riches.

Guide d'intégration

QuestionRéponse
Famille DSFRNavigation
Quand l'utiliserQuand l’usager doit se repérer, changer de section ou parcourir une liste de pages.
Quand éviterPour déclencher une action métier immédiate : utilisez plutôt un bouton.
API publiqueUtilisez uniquement les composants Twig listés sur cette page : dsfr:nav, dsfr:nav:item, dsfr:nav:menu, dsfr:nav:mega.
Documentation DSFRConsultez aussi la bibliothèque officielle : Système de Design de l'État.
Navigation principale : composition Twig et données items

Variantes de navigation principale

  • navigation principale avec attributs HTML pass-through pour id, class, data-* et aria-* quand le template le permet.

Points de contrôle propres à ce composant

  • L’élément actif porte aria-current.
  • Les menus déroulants doivent contenir des liens.
  • Vérifiez un cas vide, un cas avec plusieurs entrées et un cas avec données dynamiques pour items.
  • Testez la composition avec dsfr:nav:item, dsfr:nav:menu, dsfr:nav:mega sans copier les templates internes.

Accessibilité navigation

  • Le libellé de navigation doit être explicite avec ariaLabel ou un titre visible.
  • La page courante doit être indiquée avec active, current ou aria-current selon le composant.
  • Les panneaux contrôlés par JavaScript DSFR doivent avoir des id uniques et stables.

Intégration Symfony/Twig pour dsfr:nav

  • Passez items avec la syntaxe : pour conserver le type tableau : :items="items".
  • Composez avec les sous-composants publics dsfr:nav:item, dsfr:nav:menu, dsfr:nav:mega quand le rendu doit être plus précis que les props.
  • Ajoutez vos attributs applicatifs (data-controller, data-action, aria-*, class) sur dsfr:nav quand ils concernent son nœud racine.
  • Gardez des id prévisibles pour dsfr:nav, surtout dans les listes ou formulaires répétés.

Checklist de recette

  • navigation clavier complète
  • état actif visible
  • liaison aria-controls vers un élément existant
  • rendu vérifié en thème clair et sombre ;
  • rendu vérifié sur mobile, tablette et desktop ;
  • aucune erreur dans le profiler DSFR ni dans l'inspecteur d'accessibilité du navigateur.

Erreurs fréquentes

SymptômeCorrection
Les données items ne sont pas prises en compteAjoutez : devant la prop Twig : :items.
Les classes DSFR semblent incomplètesUtilisez les props du composant plutôt que des classes ajoutées à la main.
Un panneau, menu ou état actif ne fonctionne pasVérifiez que le JavaScript DSFR est chargé et que les identifiants HTML sont uniques.
Le composant rend en local mais pas en productionVérifiez la licence avec php bin/console dsfr:license:validate.