Advertisement
  1. Web Design
  2. HTML/CSS
  3. CSS

Création d'un menu de navigation latéral coulissant pour des concepts réactifs

Scroll to top
Read Time: 5 min

() 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:

Sliding Side Navigation MenuSliding Side Navigation MenuSliding Side Navigation Menu

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()">&times;</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.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.