Dans ce tutoriel je vous propose d'apprendre à créer le fameux menu responsive (vous savez, la petite icone "hamburger" avec ses 3 petites barres qui apparait sur les mobiles). Pour ce tutoriel nous allons faire un menu qui se révèle par le côté, à la manière des applications mobiles natives.
Le code HTML
Pour préparer notre effet nous allons devoir créer une structure HTML spécifique à notre objectif. Ce code va varier suivant l'effet que vous souhaitez donner.
Faisons un petit point sur les balises, car à première vue cela fait beaucoup de code HTML pour rien.
.site-container, cette div nous permettra de mettre unoverflow:hidden;pour éviter les scrollbar latérales lorsque le site sortira du cadre ;.site-pusher, c'est sur cet élément que nous allons appliquer le glissement via untransform: translateX(___px);.header, vous le devinez ce sera notre header, enposition: fixedsur les bureau etstaticsur les mobiles ( fixed + mobile = :( ) ;.header__icon, sera notre icône que l'on affichera seulement sur mobile ;.menu, le menu qui va se transformer sur mobile sera simplement enfloat: left;.site-content, englobera notre contenu et sera enoverflow-y: scrolletposition: absolutesur mobile ce qui permettra d'isoler le contenu du reste de la structure.
Le CSS
Le principe de notre menu est relativement simple. Dans le cas d'une grande résolution le .menu sera simplement aligné en float: left dans le header.
En revanche lorsque la résolution devient petite nous allons retravailler la structure de notre site :
Un petit peu de JS
Donc là on a notre structure qui fonctionne au redimensionnement, en revanche il n'est pas encore possible d'afficher le menu en cliquant sur notre icône. Nous allons gérer les animations en CSS mais il nous faut écrire un peu de JS pour arriver à détecter le clic sur notre icône.
Et encore du CSS
Avec notre petit bout de Javascript on a maintenant une classe sur le body qui nous permet de savoir si oui ou non le menu doit être affiché. Le plus dur est déjà fait, lorsque le body aura la class .with--sidebar, il suffit de bouger .site-pusher en modifiant sa transformation CSS.
Conclusion et idées
Je vous propose ici un effet particulier qui consiste à faire bouger tous le site pour y afficher le menu mais on peut aller plus loin :
- permettre l'affichage du menu en utilisant un mouvement de swipe (avec la librairie HammerJS par exemple ;
- utiliser un effet différent en faisant par exemple apparaitre le menu sous le contenu comme sur certaines applis iOS (il faudra alors sortir header.header du
.site-pusher(cf vidéo) ; - animer l'icône hamburger en utilisant un SVG plutôt que les
box-shadow.
Voila de quoi vous amuser !