Créer une navigation responsive sans JavaScript
Un menu hamburger fonctionnel avec uniquement du HTML et du CSS : c'est possible, et bien plus simple qu'on ne le croit.

La plupart des tutoriels sur les menus hamburger embarquent un fichier JavaScript, quelques dizaines de lignes d'événements et une dépendance de plus à maintenir. Pourtant, la combinaison d'une case à cocher HTML et de quelques règles CSS suffit à obtenir un résultat propre, accessible et performant.
Le principe repose sur un élément `<input type="checkbox">` couplé à un `<label>`. Quand l'utilisateur clique sur l'icône hamburger, qui est en réalité le label, l'état coché ou non coché de la case change. CSS peut détecter ce changement grâce au sélecteur `:checked` et au combinateur `~` pour afficher ou masquer le menu.
Structurer le HTML correctement
Commencez par placer la checkbox et son label avant l'élément `<nav>` dans le DOM, car le combinateur `~` ne remonte pas dans l'arbre. Donnez un `id` à votre checkbox et reliez-la au label via l'attribut `for`. Masquez visuellement la checkbox avec `position: absolute; opacity: 0` plutôt qu'avec `display: none`, afin de conserver l'accessibilité clavier.
Votre `<nav>` reçoit par défaut `max-height: 0; overflow: hidden; transition: max-height 0.3s ease`. Quand la checkbox est cochée, la règle `input:checked ~ nav` lui applique `max-height: 400px`. L'animation se fait toute seule, sans une seule ligne de JS.
Soigner l'accessibilité
Ajoutez un attribut `aria-expanded` sur le label et mettez-le à jour… attendez, on voulait éviter le JS. La solution : utilisez l'attribut `aria-controls` sur le label et acceptez que pour l'accessibilité avancée, une ligne de JS reste la meilleure option. Pour un projet simple ou un prototype rapide, la version pure CSS est largement suffisante.
Pensez également à tester votre menu au clavier : la touche Espace doit ouvrir et fermer le menu puisque l'élément actif est bien un `<input>`. Sur les lecteurs d'écran, annoncez clairement l'état du menu grâce à un texte masqué visuellement mais présent dans le DOM.
Cette technique fonctionne sur tous les navigateurs modernes et même sur des navigateurs plus anciens qui supportent `:checked`. Elle réduit le poids de la page, supprime une dépendance et améliore le temps de rendu initial, trois bonnes raisons de l'adopter sur vos projets légers.
À lire aussi

Déployer un site statique gratuitement avec Netlify
De votre dépôt Git à une URL en ligne en moins de cinq minutes : le guide pas-à-pas pour mettre votre premier site en production.

Tester sa solution dans une vraie ville : les programmes pilotes qui existent
Avant de convaincre un client, une startup urbaine doit d'abord convaincre une ville de la laisser essayer, voici où trouver ce terrain d'expérimentation.

Ville circulaire : les programmes qui accompagnent le réemploi urbain
Entre matériaux de réemploi, chantiers bas carbone et logistique du dernier kilomètre, un écosystème de programmes d'accompagnement structure désormais l'économie circulaire urbaine en France.