Sur cet exemple, il s’agit de faire une barre latérale cachée avec un menu burger sans JavaScript.
Une pensée pour ie8
Ici, on utilise la propriété transform, pour ne pas avoir de problèmes avec ie8 (internet explorer 8), la navigation reste accessible sans la transformation.
Flexbox ne marche pas sous ie8, j’ai donc ajouté display:inline-block; et vertical-align:top;. Enfin le SVG ne passe pas sous ie8, le burger est donc invisible.
:target et transition
:target détecte si l’url à un # (une ancre) avec l’id de l’élément en target.
Transition permet de faire une animation en quelques lignes.
Pour approfondir : https://bitsofco.de/the-target-trick/
Exemple
Pour la partie HTML, c’est le href="#wrap" qui va déclencher la bascule CSS
Dans le CSS, il faudra jouer avec :not et :target
/* quand il n'y a pas de #wrap dans l'url (jenseign.com.com/page.html) */
#wrap:not(:target) {
transform: translate3d(-335px, 0, 0); /* cache l'élément #wrap */
}
/* quand il y a un #wrap dans l'url (jenseign.com.com/page.html#wrap) */
#wrap:target {
transform: translate3d(0, 0, 0); /* affiche l'élément */
}
démo
See the Pen menu burger by Benoît Wimart (@benoitwimart) on CodePen.
[update] Checked ?
Une autre technique consiste à jouer avec les cases à cocher (checkbox), les labels (
- La case à cocher est liée à son label
- La case à cocher est un frère (ou une sœur) du bloc modifié
input ~ #wrap
See the Pen menu burger :checked by Benoît Wimart (@benoitwimart) on CodePen.
Plus simple avec JavaScript ?
En pratique, la plupart des interactions sont « pilotées » avec du JavaScript. Pour un autre exemple en JavaScript, rendez-vous sur cette page.