Création d'un menu de navigation latéral coulissant pour des concepts réactifs
() translation by (you can also view the original English article)
Dans ce tutoriel, vous allez créer un menu de navigation latéral extensible avec JavaScript et CSS. Le produit final apparaîtra comme indiqué ci-dessous:



Le balisage
Pour commencer, ajoutons un supplément pour notre menu latéral:
1 |
<div id="sideNavigation" class="sidenav"> |
2 |
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">×</a> |
3 |
<a href="#">About</a> |
4 |
<a href="#">Features</a> |
5 |
<a href="#">Contact Us</a> |
6 |
</div>
|
7 |
|
8 |
<nav class="topnav"> |
9 |
<a href="#" onclick="openNav()"> |
10 |
<svg width="30" height="30" id="icoOpen"> |
11 |
<path d="M0,5 30,5" stroke="#000" stroke-width="5"/> |
12 |
<path d="M0,14 30,14" stroke="#000" stroke-width="5"/> |
13 |
<path d="M0,23 30,23" stroke="#000" stroke-width="5"/> |
14 |
</svg>
|
15 |
</a>
|
16 |
</nav>
|
17 |
|
18 |
<div id="main"> |
19 |
<!-- Add all your websites page content here -->
|
20 |
</div>
|
Ici vous pouvez voir que nous avons créé un div menu de côté avec la classe sidenav
. Ensuite, nous avons ajouté la barre de navigation supérieure réelle via une balise <nav>
, et nous utilisons un SVG pour notre icône de menu latéral.
L'attribut onclick
de l'icône et le bouton de fermeture va déclencher certains JavaScript, que nous ajouterons ensuite.
N'oubliez pas de mettre tout le contenu de votre site Web dans le conteneur div id="main"
afin qu'il glisse vers la droite.
JavaScript
Ensuite, ajoutons le JavaScript pour créer les fonctions openNav
et closeNav
.
1 |
<script> |
2 |
function openNav() { |
3 |
document.getElementById("sideNavigation").style.width = "250px"; |
4 |
document.getElementById("main").style.marginLeft = "250px"; |
5 |
}
|
6 |
|
7 |
function closeNav() { |
8 |
document.getElementById("sideNavigation").style.width = "0"; |
9 |
document.getElementById("main").style.marginLeft = "0"; |
10 |
}
|
11 |
</script> |
CSS
Enfin, nous aurons besoin de créer notre page avec quelques CSS pour le menu latéral et nos liens:
1 |
/* The side navigation menu */
|
2 |
.sidenav { |
3 |
height: 100%; /* 100% Full-height */ |
4 |
width: 0; /* 0 width - change this with JavaScript */ |
5 |
position: fixed; /* Stay in place */ |
6 |
z-index: 1; /* Stay on top */ |
7 |
top: 0; |
8 |
left: 0; |
9 |
background-color: #111; /* Black*/ |
10 |
overflow-x: hidden; /* Disable horizontal scroll */ |
11 |
padding-top: 60px; /* Place content 60px from the top */ |
12 |
transition: 0.5s; /* 0.5 second transition effect to slide in the sidenav */ |
13 |
}
|
14 |
|
15 |
/* The navigation menu links */
|
16 |
.sidenav a { |
17 |
padding: 8px 8px 8px 32px; |
18 |
text-decoration: none; |
19 |
font-size: 25px; |
20 |
color: #818181; |
21 |
display: block; |
22 |
transition: 0.3s |
23 |
}
|
24 |
|
25 |
/* When you mouse over the navigation links, change their color */
|
26 |
.sidenav a:hover, .offcanvas a:focus{ |
27 |
color: #f1f1f1; |
28 |
}
|
29 |
|
30 |
/* Position and style the close button (top right corner) */
|
31 |
.sidenav .closebtn { |
32 |
position: absolute; |
33 |
top: 0; |
34 |
right: 25px; |
35 |
font-size: 36px; |
36 |
margin-left: 50px; |
37 |
}
|
38 |
|
39 |
/* Style page content - use this if you want to push the page content to the right when you open the side navigation */
|
40 |
#main { |
41 |
transition: margin-left .5s; |
42 |
padding: 20px; |
43 |
overflow:hidden; |
44 |
width:100%; |
45 |
}
|
46 |
body { |
47 |
overflow-x: hidden; |
48 |
}
|
49 |
|
50 |
/* Add a black background color to the top navigation */
|
51 |
.topnav { |
52 |
background-color: #333; |
53 |
overflow: hidden; |
54 |
}
|
55 |
|
56 |
/* Style the links inside the navigation bar */
|
57 |
.topnav a { |
58 |
float: left; |
59 |
display: block; |
60 |
color: #f2f2f2; |
61 |
text-align: center; |
62 |
padding: 14px 16px; |
63 |
text-decoration: none; |
64 |
font-size: 17px; |
65 |
}
|
66 |
|
67 |
/* Change the color of links on hover */
|
68 |
.topnav a:hover { |
69 |
background-color: #ddd; |
70 |
color: black; |
71 |
}
|
72 |
|
73 |
/* Add a color to the active/current link */
|
74 |
.topnav a.active { |
75 |
background-color: #4CAF50; |
76 |
color: white; |
77 |
}
|
78 |
|
79 |
/* On smaller screens, where height is less than 450px, change the style of the sidenav (less padding and a smaller font size) */
|
80 |
@media screen and (max-height: 450px) { |
81 |
.sidenav {padding-top: 15px;} |
82 |
.sidenav a {font-size: 18px;} |
83 |
}
|
84 |
|
85 |
a svg{ |
86 |
transition:all .5s ease; |
87 |
|
88 |
&:hover{
|
89 |
#transform:rotate(180deg); |
90 |
}
|
91 |
}
|
92 |
|
93 |
#ico{ |
94 |
display: none; |
95 |
}
|
96 |
|
97 |
.menu{ |
98 |
background: #000; |
99 |
display: none; |
100 |
padding: 5px; |
101 |
width: 320px; |
102 |
@include border-radius(5px); |
103 |
|
104 |
#transition: all 0.5s ease; |
105 |
|
106 |
a{
|
107 |
display: block; |
108 |
color: #fff; |
109 |
text-align: center; |
110 |
padding: 10px 2px; |
111 |
margin: 3px 0; |
112 |
text-decoration: none; |
113 |
background: #444; |
114 |
|
115 |
&:nth-child(1){
|
116 |
margin-top: 0; |
117 |
@include border-radius(3px 3px 0 0 ); |
118 |
}
|
119 |
&:nth-child(5){ |
120 |
margin-bottom: 0; |
121 |
@include border-radius(0 0 3px 3px); |
122 |
}
|
123 |
|
124 |
&:hover{ |
125 |
background: #555; |
126 |
}
|
127 |
}
|
128 |
}
|
Remarque: Le body {overflow-x: hidden;}
est nécessaire pour assurer qu'un défilement horizontal n'apparaisse pas lors de l'utilisation avec votre CSS existant.
Vous pouvez maintenant jeter un oeil à votre menu et essayer dans votre navigateur.
Utilisation de jQuery
Si vous voulez créer le menu latéral JavaScript à l'aide de jQuery, vous pouvez le faire en remplaçant le JavaScript que j'ai fourni précédemment par la section suivante:
1 |
$('.topnav a').click(function(){ |
2 |
$('#sideNavigation').style.width = "250px"; |
3 |
$("#main").style.marginLeft = "250px"; |
4 |
}); |
5 |
|
6 |
$('.closebtn').click(function(){ |
7 |
$('#sideNavigation').style.width = "0"; |
8 |
$("#main").style.marginLeft = "0"; |
9 |
}); |
Retrait de la glissière
Pour faire apparaître le menu sans animation de diapositive, il suffit d'apporter des modifications à la transition
de propriété CSS, comme indiqué sous une forme abrégée ci-dessous:
1 |
.sidenav { |
2 |
transition: 0s; |
3 |
}
|
4 |
|
5 |
#main { |
6 |
transition: margin-left 0s; |
7 |
}
|
Cela fera apparaître le changement instantanément car il n'y a pas de délai spécifié dans la transition
. Le défaut que nous avons utilisé est 0.5s
.
Conclusion
La création d'un menu latéral ne prend que quelques lignes de code et n'a pas besoin d'utiliser beaucoup de ressources. De plus, si jQuery est déjà sur la page pour d'autres tâches, le travail peut être effectué avec un peu moins de lignes de code et personnalisation.
Faire le code réagissant pour travailler avec différentes résolutions d'écran de dispositif est simplement un cas de modifier le CSS en ajoutant des requêtes de médias pour les cas spécifiques.
Pour aller plus loin, vous pouvez choisir votre style avec un framework CSS tel que Bootstrap ou Bulma.