Menu

How TO – Side Navigation


Previous


Next

Learn how to create an animated, closable side navigation menu.






×
About
Services
Clients
Contact

Animated Sidenav Example

Click on the element below to open the side navigation menu.

☰ open

Try it Yourself

<!DOCTYPE html>
<html>
<head>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<style>
body {
font-family: “Lato”, sans-serif;
}

.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}

.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}

.sidenav a:hover {
color: #f1f1f1;
}

.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}

@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
</style>
</head>
<body>

<div id=”mySidenav”>
<a href=”javascript:void(0)” onclick=”closeNav()”>&times;</a>
<a href=”#”>About</a>
<a href=”#”>Services</a>
<a href=”#”>Clients</a>
<a href=”#”>Contact</a>
</div>

<h2>Animated Sidenav Example</h2>
<p>Click on the element below to open the side navigation menu.</p>
<span style=”font-size:30px;cursor:pointer” onclick=”openNav()”>&#9776; open</span>

<script>
function openNav() {
document.getElementById(“mySidenav”).style.width = “250px”;
}

function closeNav() {
document.getElementById(“mySidenav”).style.width = “0”;
}
</script>

</body>
</html>

Create an Animated Side Navigation

Step 1) Add HTML:

Example

<div id=”mySidenav” class=”sidenav”>
  <a href=”javascript:void(0)” class=”closebtn” onclick=”closeNav()”>&times;</a>
  <a href=”#”>About</a>
  <a href=”#”>Services</a>
  <a href=”#”>Clients</a>
  <a href=”#”>Contact</a>
</div>

<!– Use any element to open the sidenav –>
<span onclick=”openNav()”>open</span>

<!– Add all page content inside this div if you want the side nav to push page content to the right (not used if you only want the sidenav to sit on top of the page –>
<div id=”main”>
  …
</div>

Step 2) Add CSS:

Example

/* The side navigation menu */
.sidenav {
  height: 100%; /* 100% Full-height */
  width: 0; /* 0 width – change this with JavaScript */
  position: fixed; /* Stay in place */
  z-index: 1; /* Stay on top */
  top: 0; /* Stay at the top */
  left: 0;
  background-color: #111; /* Black*/
  overflow-x: hidden; /* Disable horizontal scroll */
  padding-top: 60px; /* Place content 60px from the top */
  transition: 0.5s; /* 0.5 second transition effect to slide in the sidenav */
}

/* The navigation menu links */
.sidenav a {
  padding: 8px 8px 8px 32px;
  text-decoration: none;
  font-size: 25px;
  color: #818181;
  display: block;
  transition: 0.3s;
}

/* When you mouse over the navigation links, change their color */
.sidenav a:hover {
  color: #f1f1f1;
}

/* Position and style the close button (top right corner) */
.sidenav .closebtn {
  position: absolute;
  top: 0;
  right: 25px;
  font-size: 36px;
  margin-left: 50px;
}

/* Style page content – use this if you want to push the page content to the right when you open the side navigation */
#main {
  transition: margin-left .5s;
  padding: 20px;
}

/* On smaller screens, where height is less than 450px, change the style of the sidenav (less padding and a smaller font size) */
@media screen and (max-height: 450px) {
  .sidenav {padding-top: 15px;}
  .sidenav a {font-size: 18px;}
}

Step 3) Add JavaScript:

The example below slides in the side navigation, and makes it 250px wide:

Sidenav Overlay Example

<!DOCTYPE html>
<html>
<head>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<style>
body {
font-family: “Lato”, sans-serif;
}

.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}

.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}

.sidenav a:hover {
color: #f1f1f1;
}

.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}

@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
</style>
</head>
<body>

<div id=”mySidenav”>
<a href=”javascript:void(0)” onclick=”closeNav()”>&times;</a>
<a href=”#”>About</a>
<a href=”#”>Services</a>
<a href=”#”>Clients</a>
<a href=”#”>Contact</a>
</div>

<h2>Animated Sidenav Example</h2>
<p>Click on the element below to open the side navigation menu.</p>
<span style=”font-size:30px;cursor:pointer” onclick=”openNav()”>&#9776; open</span>

<script>
function openNav() {
document.getElementById(“mySidenav”).style.width = “250px”;
}

function closeNav() {
document.getElementById(“mySidenav”).style.width = “0”;
}
</script>

</body>
</html>

The example below slides in the side navigation, and pushes the page content to the right (the value used to set the width of the sidenav is also used to set the left margin of the “page content”):

 

Sidenav Push Content

<!DOCTYPE html>
<html>
<head>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<style>
body {
font-family: “Lato”, sans-serif;
}

.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}

.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}

.sidenav a:hover {
color: #f1f1f1;
}

.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}

#main {
transition: margin-left .5s;
padding: 16px;
}

@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
</style>
</head>
<body>

<div id=”mySidenav”>
<a href=”javascript:void(0)” onclick=”closeNav()”>&times;</a>
<a href=”#”>About</a>
<a href=”#”>Services</a>
<a href=”#”>Clients</a>
<a href=”#”>Contact</a>
</div>

<div id=”main”>
<h2>Sidenav Push Example</h2>
<p>Click on the element below to open the side navigation menu, and push this content to the right.</p>
<span style=”font-size:30px;cursor:pointer” onclick=”openNav()”>&#9776; open</span>
</div>

<script>
function openNav() {
document.getElementById(“mySidenav”).style.width = “250px”;
document.getElementById(“main”).style.marginLeft = “250px”;
}

function closeNav() {
document.getElementById(“mySidenav”).style.width = “0”;
document.getElementById(“main”).style.marginLeft= “0”;
}
</script>

</body>
</html>

The example below also slides in the side navigation, and pushes the page content to the right, only this time, we add a black background color with a 40% opacity to the body element, to “highlight” the side navigation:

 

Sidenav Push Content w/ opacity

<!DOCTYPE html>
<html>
<head>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<style>
body {
font-family: “Lato”, sans-serif;
transition: background-color .5s;
}

.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}

.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}

.sidenav a:hover {
color: #f1f1f1;
}

.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}

#main {
transition: margin-left .5s;
padding: 16px;
}

@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
</style>
</head>
<body>

<div id=”mySidenav”>
<a href=”javascript:void(0)” onclick=”closeNav()”>&times;</a>
<a href=”#”>About</a>
<a href=”#”>Services</a>
<a href=”#”>Clients</a>
<a href=”#”>Contact</a>
</div>

<div id=”main”>
<h2>Sidenav Push Example</h2>
<p>Click on the element below to open the side navigation menu, and push this content to the right. Notice that we add a black see-through background-color to body when the sidenav is opened.</p>
<span style=”font-size:30px;cursor:pointer” onclick=”openNav()”>&#9776; open</span>
</div>

<script>
function openNav() {
document.getElementById(“mySidenav”).style.width = “250px”;
document.getElementById(“main”).style.marginLeft = “250px”;
document.body.style.backgroundColor = “rgba(0,0,0,0.4)”;
}

function closeNav() {
document.getElementById(“mySidenav”).style.width = “0”;
document.getElementById(“main”).style.marginLeft= “0”;
document.body.style.backgroundColor = “white”;
}
</script>

</body>
</html>

The example below slides in the side navigation from the left and covers the whole page (100% width):

 

Sidenav Full-width

<!DOCTYPE html>
<html>
<head>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<style>
body {
font-family: “Lato”, sans-serif;
}

.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
text-align:center;
}

.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;

}

.sidenav a:hover{
color: #f1f1f1;
}

.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}

@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
</style>
</head>
<body>

<div id=”mySidenav”>
<a href=”javascript:void(0)” onclick=”closeNav()”>&times;</a>
<a href=”#”>About</a>
<a href=”#”>Services</a>
<a href=”#”>Clients</a>
<a href=”#”>Contact</a>
</div>

<h2>Animated Sidenav Example Full Width</h2>
<p>Click on the element below to open the navigation menu.</p>
<span style=”font-size:30px;cursor:pointer” onclick=”openNav()”>&#9776; open</span>

<script>
function openNav() {
document.getElementById(“mySidenav”).style.width = “100%”;
}

function closeNav() {
document.getElementById(“mySidenav”).style.width = “0”;
}
</script>

</body>
</html>

The example below opens and close the side navigation menu without animations:

 

Sidenav without Animation

<!DOCTYPE html>
<html>
<head>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<style>
body {
font-family: “Lato”, sans-serif;
}

.sidenav {
display: none;
height: 100%;
width: 250px;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
padding-top: 60px;
}

.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
}

.sidenav a:hover {
color: #f1f1f1;
}

.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}

@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
</style>
</head>
<body>

<div id=”mySidenav”>
<a href=”javascript:void(0)” onclick=”closeNav()”>&times;</a>
<a href=”#”>About</a>
<a href=”#”>Services</a>
<a href=”#”>Clients</a>
<a href=”#”>Contact</a>
</div>

<h2>Sidenav Example</h2>
<p>Click on the element below to open the side navigation menu.</p>
<span style=”font-size:30px;cursor:pointer” onclick=”openNav()”>&#9776; open</span>

<script>
function openNav() {
document.getElementById(“mySidenav”).style.display = “block”;
}

function closeNav() {
document.getElementById(“mySidenav”).style.display = “none”;
}
</script>

</body>
</html>

The example below shows how to create a right-sided navigation menu:

 

Right-sided navigation:

<!DOCTYPE html>
<html>
<head>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<style>
body {
font-family: “Lato”, sans-serif;
}

.sidenav {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
right: 0;
background-color: #111;
overflow-x: hidden;
transition: 0.5s;
padding-top: 60px;
}

.sidenav a {
padding: 8px 8px 8px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
transition: 0.3s;
}

.sidenav a:hover {
color: #f1f1f1;
}

.sidenav .closebtn {
position: absolute;
top: 0;
right: 25px;
font-size: 36px;
margin-left: 50px;
}

@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
</style>
</head>
<body>

<div id=”mySidenav”>
<a href=”javascript:void(0)” onclick=”closeNav()”>&times;</a>
<a href=”#”>About</a>
<a href=”#”>Services</a>
<a href=”#”>Clients</a>
<a href=”#”>Contact</a>
</div>

<h2>Right-sided Navigation</h2>
<p>Click on the element below to open the right-sided navigation menu.</p>
<span style=”font-size:30px;cursor:pointer” onclick=”openNav()”>&#9776; open</span>

<script>
function openNav() {
document.getElementById(“mySidenav”).style.width = “250px”;
}

function closeNav() {
document.getElementById(“mySidenav”).style.width = “0”;
}
</script>

</body>
</html>

The example below shows how to create a side navigation menu that is always shown (fixed):

 

Always show sidenav:

<!DOCTYPE html>
<html>
<head>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<style>
body {
font-family: “Lato”, sans-serif;
}

.sidenav {
height: 100%;
width: 200px;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #111;
overflow-x: hidden;
padding-top: 20px;
}

.sidenav a {
padding: 6px 6px 6px 32px;
text-decoration: none;
font-size: 25px;
color: #818181;
display: block;
}

.sidenav a:hover {
color: #f1f1f1;
}

.main {
margin-left: 200px; /* Same as the width of the sidenav */
}

@media screen and (max-height: 450px) {
.sidenav {padding-top: 15px;}
.sidenav a {font-size: 18px;}
}
</style>
</head>
<body>

<div>
<a href=”#”>About</a>
<a href=”#”>Services</a>
<a href=”#”>Clients</a>
<a href=”#”>Contact</a>
</div>

<div>
<h2>Sidenav Example</h2>
<p>This sidenav is always shown.</p>
</div>

</body>
</html>


Previous


Next

Scroll to Top