formateur informatique

Menus avec sous menus par les styles CSS

Accueil  >  Technique  >  CSS  >  CSS Astuces  >  Menus avec sous menus par les styles CSS
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Inscription Newsletter
Sujets que vous pourriez aussi aimer :


Menu avec sous menus en Css

Dans ce nouveau volet sur les styles Css, nous allons apprendre à créer les réglages nécessaires pour architecturer des éléments Html classiques sous forme de menus.

Menus Css avec sous menus

Dans l'exemple finalisé illustré par la capture, au passage de la souris sur des rubriques, celles-ci changent de couleurs et sont cliquables. Et lorsqu'elles proposent du contenu enfant, elles déploient automatiquement un sous menu lui aussi constitué de rubriques interactives.



Fichiers Css et Html
Pour la construction de cette solution, nous proposons de débuter à partir de sources offrant déjà une organisation et des réglages, certes non aboutis. Comme vous pouvez le voir, la décompression fournit le fichier de la page Web. Il est nommé index.htm. Il est accompagné de ses ressources dont les feuilles de styles dans le sous dossier css.
  • Double cliquer sur le fichier index.htm pour l'ouvrir dans le navigateur par défaut,
Structure Html désorganisée pour la construction des menus animés par les styles Css

Vous l'avez compris, en visualisant cette ébauche Html, nous savons qu'il reste du chemin à parcourir pour mettre en place ces menus Css. Les rubriques y apparaissent totalement désorganisées.
  • A la racine du dossier de décompression, cliquer droit sur le fichier index.htm,
  • Dans le menu contextuel, choisir de l'ouvrir avec un éditeur comme le Notepad ++,
En entête de code tout d'abord, vous notez la présence de deux déclaratives à des feuilles de styles, placées comme nous le disions dans le sous dossier css.

...
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<link rel="stylesheet" href="css/mes-styles.css">
<link rel="stylesheet" href="css/les-styles.css">

<body>
...


La première gère l'organisation globale de la page Html. C'est la seconde, nommée les-styles.css, que nous allons exploiter pour organiser ces rubriques en menus.

Plus bas dans le code Html et plus précisément dans le calque d'identifiant auCentre, vous notez la présence d'une construction relativement complexe.

...
<div id="auCentre">
<!--
Implémentation
-->
<h2>Barre de navigation avec sous menu</h2>

<div class="barre">
<a href="https://www.bonbache.fr/" class="element rubrique">Accueil</a>
<a href="https://www.bonbache.fr/... .php" class="element rubrique">Livres</a>
<div class="menu">
<div class="rubrique">Technique</div>
<div class="sousMenu contenu">
<a href="https://www.bonbache.fr/... .html" class="element rubrique">CSS</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Javascript</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">PHP</a>
</div>
</div>
<div class="menu">
<div class="rubrique">Bureautique</div>
<div class="sousMenu contenu">
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Access</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Excel</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Word</a>
</div>
</div>
</div>


</div>
...


Cette architecture consiste en une imbrication de calques (balises Div). Chaque rubrique est inscrite dans une ancre (Balise <a href). Et chacune de ces ancres est associée aux deux mêmes styles : element et rubrique. Nous devons les travailler pour ordonner les alignements et faire réagir les zones au passage de la souris.

Chaque sous menu est encapsulé dans un calque associé au style menu. Lui aussi doit gérer les alignements, notamment à la verticale et le passage de la souris. Chaque calque de sous menu est attaché à deux styles : sousMenu et contenu. Ils doivent se charger de réglages Css plus conventionnels pour l'aspect de ces sous rubriques.
  • A la racine du dossier de décompression, double cliquer sur le sous dossier css,
  • Dès lors, cliquer droit sur le fichier les-styles.css,
  • Dans le menu contextuel, choisir de l'ouvrir avec un éditeur comme le Notepad ++,
Quelques styles sont déjà présents. Ils sont bien utilisés par certains objets Html du menu. Mais pour l'instant, ils se contentent de réglages plutôt classiques, notamment de police mais aussi d'alignement et de dimension.



Alignement des rubriques
A ce stade donc, en raison de l'enchevêtrement des calques, certains de ces ajustements ne sont pas encore opérationnels.
  • Après le dernier double style .contenu .element, créer le style Css suivant :
.menu
{
float:left;
}


Le style menu est affecté à chaque calque parent imbriquant les sous menus. Avec l'attribut float réglé à left, nous rendons ces calques flottants et nous les autorisons à se positionner les uns à côté des autres, dans la limite de l'espace disponible en largeur.
  • Enregistrer les modifications (CTRL + S) puis revenir sur le navigateur Web,
  • Actualiser son cache avec le raccourci clavier CTRL + F5,
Positionner les calques Html les uns à côté des autres grâce à la propriété float des styles Css

Comme vous le constatez, ce simple réglage Css a déjà considérablement impacté l'organisation. Même si des ajustements sont encore à entreprendre, toutes les rubriques des menus sont positionnées les unes à côté des autres. Les sous menus suivent avec un certain décalage qu'il convient de corriger.

Masquer les sous menus
Le style sousMenu est affecté à toutes lesrubriques appartenant à un menu parent. Nous devons le retravailler pour des questions de mise en forme mais aussi pour cacher ces liens tant que le passage de la souris n'a pas ordonné de les afficher.
  • Après le style menu, créer le style Css sousMenu comme suit :
.sousMenu
{
display:none;
position:absolute;
min-width:160px;
z-index:1;
border:#666 1px solid;
color:#666;
box-shadow:3px 3px #ccc;
}


Avec le style display réglé à none, nous commençons par masquer ces éléments enfants. La valeur absolute du style position leur permet de flotter en dehors des calques, soit au-dessus des éléments potentiellement inscrits juste en-dessous dans la page. Ensuite, la largeur minimale est fixée à 160 pixels. L'attribut z-index permet de positionner ces éléments au-dessus des autres lorsqu'ils se chevauchent. Nous parlions effectivement du contenu textuel de la page. Nous pourrions forcer cette valeur si d'aventure d'autres éléments étaient présents au même emplacement. Ensuite et classiquement, nous définissons la bordure et la couleur de police. Enfin, grâce à l'attribut box-shadow, nous signons une légère ombre portée dans un gris très clair, question de relief. Les décalages à l'horizontale et à la verticale sont fixés à 3 pixels en premier et deuxième argument.
  • Enregistrer les modifications (CTRL + S) puis revenir sur le navigateur Web,
  • Actualiser son cache avec le raccourci clavier CTRL + F5,
Masquer les sous menus Html avec les styles Css

Nous ne sommes pas encore au bout du compte, mais comme vous le constatez, nous progressons bien étape par étape. Les éléments sont toujours alignés sur la même horizontale, certes moins espacés, du fait de la disparition des rubriques des sous menus.

Espacements et mise en forme
Précisément, nous devons maintenant nous soucier de l'apparence de ces rubriques parentes. Il s'agit de les laisser respirer et de leur donner un peu d'allure. Souvenez-vous, le style rubrique est l'un des deux styles associés à chaque lien cliquable.
  • Revenir dans l'éditeur Notepad sur la feuille de styles,
  • Après le style sousMenu, créer le style Css rubrique comme suit :
.rubrique
{
font:inherit;
color:inherit;
padding:8px 16px;
text-decoration:none;
background-color:#ccc;
cursor:pointer;
}


Avec les attributs font et color réglés sur inherit, nous récupérons la police et la couleur de texte du calque parent. Il s'agit d'un gris foncé. Grâce à l'attribut padding, nous agissons sur l'espacement du texte à l'horizontale (8px) et à la verticale pour un alignement centré en hauteur (16px). La valeur none de l'attribut text-decoration permet de masquer les soulignements usuels des liens hypertextes. Puis, nous réglons la couleur de fond sur un gris clair et transformons l'aspect du pointeur de la souris. L'utilisateur comprend ainsi qu'il s'agit de rubriques cliquables.
  • Enregistrer les modifications (CTRL + S) puis revenir sur le navigateur Web,
  • Actualiser son cache avec le raccourci clavier CTRL + F5,
Alignements et mise en forme des rubriques des menus par les styles Css

Cette fois le résultat est plus proche. Les rubriques ont fière allure. Elles sont correctement disposées et espacées et elles sont homogènes dans leur présentation. Il reste à les faire réagir au passage de la souris et à déployer les sous menus lorsqu'ils existent.



Aspect au passage de la souris
Pour un menu digne de ce nom, il est important que les éléments réagissent au passage de la souris. Et pour cela, nous proposons d'influer sur la couleur de fond et sur la couleur du texte.
  • Revenir dans l'éditeur Notepad sur la feuille de styles,
  • A la suite du style rubrique, créer le style dérivé rubrique:hover, comme suit :
.rubrique:hover
{
background-color:#993333;
color:#fff;
}


L'extension hover est un gestionnaire d'événements pour déclencher les réglages uniquement au survol de la souris sur l'élément concerné et affecté à ce style rubrique. Nous basculons la couleur de fond sur un rouge rubis et la couleur de texte sur du blanc, afin de bien le faire ressortir.
  • Enregistrer les modifications (CTRL + S) puis revenir sur le navigateur Web,
  • Actualiser son cache avec le raccourci clavier CTRL + F5,
Comme vous pouvez l'apprécier, les rubriques principales du menu s'illuminent effectivement au passage de la souris. Elles reprennent leur aspect originel dès lors que le pointeur quitte la zone d'influence.

Bref, nous sommes en train de toucher au but. Mais il reste à déployer les sous menus.

Changer la couleur du menu Html au passage de la souris

Déployer les sous menus
Pour déployer les sous menus, nous devons simplement les rendre visibles. Cet événement intervient au survol du calque parent régi par le style menu. Mais la modification doit bien intervenir dans le style sousMenu qui dicte le comportement des rubriques cachées. C'est donc un double style dérivé que nous devons entreprendre.
  • Revenir dans l'éditeur Notepad sur la feuille de styles,
  • Sous le style rubrique:hover, créer le double style suivant :
.menu:hover .sousMenu{display:block}

Au passage de la souris (hover) sur un calque dirigé par le style menu, nous appliquons le réglage display:block dans le style sousMenu. Cette action a pour effet d'annuler la valeur none attribuée dans le style sousMenu d'origine. Avec cette valeur, les rubriques peuvent s'afficher les unes en-dessous des autres comme l'impose la construction Html.
  • Enregistrer les modifications (CTRL + S) puis revenir sur le navigateur Web,
  • Actualiser son cache avec le raccourci clavier CTRL + F5,
Menus Html avec sous menus qui apparaissent au passage de la souris grâce aux styles Css

Cette fois la solution est aboutie. Avec quelques réglages Css relativement simples, nous avons structuré l'organisation du menu et nous lui avons donné vie. Comme ces styles Css régissent les branches de ces menus, ils peuvent maintenant évoluer à souhait. Nous pouvons par exemple ajouter un troisième menu avec sousmenu et ce, avec une simplicité déconcertante.
  • Revenir dans l'éditeur Notepad sur la page index.htm,
  • Copier le dernier menu puis le coller en-dessous, à l'intérieur du calque du style barre,
...
<div class="barre">
<a href="https://www.bonbache.fr/" class="element rubrique">Accueil</a>
<a href="https://www.bonbache.fr/livres-formations- ... -a-telecharger.php" class="element rubrique">Livres</a>
<div class="menu">
<div class="rubrique">Technique</div>
<div class="sousMenu contenu">
<a href="https://www.bonbache.fr/... .html" class="element rubrique">CSS</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Javascript</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">PHP</a>
</div>
</div>
<div class="menu">
<div class="rubrique">Bureautique</div>
<div class="sousMenu contenu">
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Access</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Excel</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Word</a>
</div>
</div>
<div class="menu">
<div class="rubrique">Thème</div>
<div class="sousMenu contenu">
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Rubrique 1</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Rubrique 2</a>
<a href="https://www.bonbache.fr/... .html" class="element rubrique">Rubrique 3</a>
</div>
</div>

</div>
...
  • Enregistrer les modifications (CTRL + S) puis revenir sur le navigateur Web,
  • Actualiser son cache avec le raccourci clavier CTRL + F5,
Nouveau menu avec sous menu ajouté automatiquement dans la page Html grâce aux styles Css

Comme vous pouvez l'apprécier, le nouveau menu régulé par les styles Css est aussitôt parfaitement intégré. Il réagit comme les autres et déploie son sous menu au survol de la souris.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn