Formateur

Coder comme un PRO

Coder comme un PRO

Formateur Web depuis 11 ans dans la filière Webdesign, je vous propose de booster vos connaissances pour réaliser des sites web.

Cours par Webcam

Matières abordées

Niveaux

Contact

Vous êtes intéressez par la formation?
Contactez-moi.

Share on facebook
Facebook
Share on google
Google+
Share on twitter
Twitter
Share on linkedin
LinkedIn

Menu déroulant pour écran tactile

Ne perdez pas vos internautes en mode tactile. Nous vous proposons donc un menu ergonomique qui permet d’accéder au liens qui déroulent même sur les tablettes ou les téléphones mobiles.

Commençons par mettre en place la structure HTML :

<nav>
  <ul>
    <li><a href="#">Accueil</a></li>
    <li class="deroule"><a href="#">About <span class="fleche"></span></a>
      <ul>
        <li><a href="#" onclick="alert(2)">about 1</a></li>
        <li><a href="#">about 2</a></li>
        <li><a href="#">about 3</a></li>
      </ul>
    </li>
    <li class="deroule"><a href="#">Services <span class="fleche"></span></a>
      <ul>
        <li><a href="#">services 1</a></li>
        <li><a href="#">services 2</a></li>
        <li><a href="#">services 3</a></li>
        <li><a href="#">services 4</a></li>
        <li><a href="#">services 5</a></li>
      </ul>
    </li>
    <li><a href="#">Blog</a></li>
    <li><a href="#">Contact</a></li>
  </ul>
</nav>

Un menu n’est rien d’autre qu’une liste de liens. Et pour créer un sous-menu, il suffit seulement d’imbriquer une liste dans une autre liste. Par ailleurs, la balise <span class="fleche"></span> sera utilisée pour éditer la flèche du bas pour les liens contenant des sous-liens.

Présentons maintenant tout ceci avec le CSS :

/* reset */
*{
  box-sizing: border-box;
}
ul{
  list-style-type: none;
  margin: 0;
  padding: 0;
}

/* custom menu */
nav:after{
  content: "";
  clear: both;
  display: block;
}
nav a{
  display: block;
  text-decoration: none;
  white-space: nowrap;
}
nav ul ul{
  background-color: #fff;
  display: none;
  position: absolute;
  min-width: 100%;
}
nav>ul{
  display: flex;
}
nav>ul>li{
  position: relative;
  margin: 1px;
  flex-grow: 1;
}
nav ul ul li+li{
  border-top: 1px solid white;
}
nav ul li a{
  background-color: silver;
  padding: 10px 20px;
  color: black;
  text-align: center;
}
nav>ul>li>a{
  background-color: rgb(63,70,76);
  color: white;
} 
nav ul ul a{
  background-color:  rgb(282,97,1);
  color: white;
}
.fleche {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 4px;
  vertical-align: middle;
  border-top: 6px solid;
  border-right: 6px solid transparent;
  border-left: 6px solid transparent;
}

La mise en page du menu repose sur la technologie Flex et les positions. Nous cachons les sous-menu avec display : none.

Le rôle de Javascript est de faire apparaître ou disparaître les sous-menus selon le comportement de l’internaute :

  • s’il clique sur un lien contenant un sous-menu caché : ce dernier doit s’afficher
  • s’il clique à nouveau sur un lien contenant un sous-menu ouvert: ce dernier doit se cacher
  • s’il clique sur un autre lien : le sous-menu précédemment ouvert doit se cacher
  • s’il clique n’importe ou sur la page en dehors du sous-menu : ce dernier doit se fermer
  • s’il ‘scrolle’ la page : le sous-menu précédemment ouvert doit se cacher

La programmation de cette algorithmie donne le code suivant :

(function() {
  var tabMenu = document.querySelectorAll('.deroule');
  var tabD = document.querySelectorAll('ul ul');
  function deroule(e){
    e.stopPropagation(); 
    obj = this.querySelector('ul');
    if(!this.open){
      tabMenu.forEach(ferme);
      obj.style.display = "block";
      this.open = true;
    }else{
      obj.style.display = "none";
      this.open = false;
    }
  }
  var ferme = function(obj,i){
    tabD[i].style.display = "none";
    obj.open = false;
  }
  var init = function(obj){
    obj.addEventListener("click",deroule);
    obj.open = false;
  }
  tabMenu.forEach(init);
  window.addEventListener("click",function(){
    tabMenu.forEach(ferme);
  });
  window.addEventListener("scroll",function(){
    tabMenu.forEach(ferme);
  });
})();

Testez par vous-même ce code sur Codepen.

A lire aussi

tutowebdesign

Afficher du contenu au scroll

Afficher du contenu au scroll Voici un effet impressionnant et pourtant très facile à mettre en place sur vos pages. Le principe consiste à faire

Lire »
tutowebdesign

Créer un menu latéral animé

Créer un menu latéral animé Idéal pour les formats mobiles, voici un menu latéral animé facile à faire dont l’ouverture est déclenchée par Javascript. Commençons

Lire »
MegaphoNews - Closer Than Ever

The leading news agency comes to your smartphone.  Download now.

Politique d'utilisation des cookies

En poursuivant votre navigation sur ce site, vous acceptez l’utilisation de cookies. Les cookies nous permettent de personnaliser le contenu, les sorties et d’optimiser notre trafic.