A responsive dropdown navbar with animated hamburger menu icon. Built with Sass.
A Pen by anthony rivera on CodePen.
<section class="navigation"> | |
<div class="nav-container"> | |
<div class="brand"> | |
<a href="#!">Logo</a> | |
</div> | |
<nav> | |
<div class="nav-mobile"><a id="nav-toggle" href="#!"><span></span></a></div> | |
<ul class="nav-list"> | |
<li> | |
<a href="#!">Home</a> | |
</li> | |
<li> | |
<a href="#!">About</a> | |
</li> | |
<li> | |
<a href="#!">Services</a> | |
<ul class="nav-dropdown"> | |
<li> | |
<a href="#!">Web Design</a> | |
</li> | |
<li> | |
<a href="#!">Web Development</a> | |
</li> | |
<li> | |
<a href="#!">Graphic Design</a> | |
</li> | |
</ul> | |
</li> | |
<li> | |
<a href="#!">Pricing</a> | |
</li> | |
<li> | |
<a href="#!">Portfolio</a> | |
<ul class="nav-dropdown"> | |
<li> | |
<a href="#!">Web Design</a> | |
</li> | |
<li> | |
<a href="#!">Web Development</a> | |
</li> | |
<li> | |
<a href="#!">Graphic Design</a> | |
</li> | |
</ul> | |
</li> | |
<li> | |
<a href="#!">Contact</a> | |
</li> | |
</ul> | |
</nav> | |
</div> | |
</section> | |
<article> | |
<h2>Navigation</h2> | |
<p>Responsive Dropdown Navigation Bar.</p> | |
<p>Want to see how it's made? <a href="http://www.taniarascia.com/responsive-dropdown-navigation-bar/">Read the tutorial!</a></p> | |
</article> |
(function($) { // Begin jQuery | |
$(function() { // DOM ready | |
// If a link has a dropdown, add sub menu toggle. | |
$('nav ul li a:not(:only-child)').click(function(e) { | |
$(this).siblings('.nav-dropdown').toggle(); | |
// Close one dropdown when selecting another | |
$('.nav-dropdown').not($(this).siblings()).hide(); | |
e.stopPropagation(); | |
}); | |
// Clicking away from dropdown will remove the dropdown class | |
$('html').click(function() { | |
$('.nav-dropdown').hide(); | |
}); | |
// Toggle open and close nav styles on click | |
$('#nav-toggle').click(function() { | |
$('nav ul').slideToggle(); | |
}); | |
// Hamburger to X toggle | |
$('#nav-toggle').on('click', function() { | |
this.classList.toggle('active'); | |
}); | |
}); // end DOM ready | |
})(jQuery); // end jQuery |
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
// Navigation Variables | |
$content-width: 100%; | |
$breakpoint: 799px; | |
$nav-height: 70px; | |
$nav-background: white; | |
$nav-font-color: black; | |
$link-hover-color: #2581DC; | |
// Outer navigation wrapper | |
.navigation { | |
height: $nav-height; | |
background: $nav-background; | |
} | |
// Logo and branding | |
.brand { | |
position: absolute; | |
padding-left: 20px; | |
float: left; | |
line-height: $nav-height; | |
text-transform: uppercase; | |
font-size: 1.4em; | |
a, | |
a:visited { | |
color: $nav-font-color; | |
text-decoration: none; | |
} | |
} | |
// Container with no padding for navbar | |
.nav-container { | |
max-width: $content-width; | |
margin: 0 auto; | |
} | |
// Navigation | |
nav { | |
float: right; | |
ul { | |
list-style: none; | |
margin: 0; | |
padding: 0; | |
li { | |
float: left; | |
position: relative; | |
a, | |
a:visited { | |
display: block; | |
padding: 0 20px; | |
line-height: $nav-height; | |
background: $nav-background; | |
color: $nav-font-color; | |
text-decoration: none; | |
&:hover { | |
background: $link-hover-color; | |
color: $nav-font-color; | |
} | |
&:not(:only-child):after { | |
padding-left: 4px; | |
content: ' ▾'; | |
} | |
} // Dropdown list | |
ul li { | |
min-width: 190px; | |
a { | |
padding: 15px; | |
line-height: 20px; | |
} | |
} | |
} | |
} | |
} | |
// Dropdown list binds to JS toggle event | |
.nav-dropdown { | |
position: absolute; | |
display: none; | |
z-index: 1; | |
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.15); | |
} | |
/* Mobile navigation */ | |
// Binds to JS Toggle | |
.nav-mobile { | |
display: none; | |
position: absolute; | |
top: 0; | |
right: 0; | |
background: $nav-background; | |
height: $nav-height; | |
width: $nav-height; | |
} | |
@media only screen and (max-width: 798px) { | |
// Hamburger nav visible on mobile only | |
.nav-mobile { | |
display: block; | |
} | |
nav { | |
width: 100%; | |
padding: $nav-height 0 15px; | |
ul { | |
display: none; | |
li { | |
float: none; | |
a { | |
padding: 15px; | |
line-height: 20px; | |
} | |
ul li a { | |
padding-left: 30px; | |
} | |
} | |
} | |
} | |
.nav-dropdown { | |
position: static; | |
} | |
} | |
@media screen and (min-width: $breakpoint) { | |
.nav-list { | |
display: block !important; | |
} | |
} | |
#nav-toggle { | |
position: absolute; | |
left: 18px; | |
top: 22px; | |
cursor: pointer; | |
padding: 10px 35px 16px 0px; | |
span, | |
span:before, | |
span:after { | |
cursor: pointer; | |
border-radius: 1px; | |
height: 5px; | |
width: 35px; | |
background: $nav-font-color; | |
position: absolute; | |
display: block; | |
content: ''; | |
transition: all 300ms ease-in-out; | |
} | |
span:before { | |
top: -10px; | |
} | |
span:after { | |
bottom: -10px; | |
} | |
&.active span { | |
background-color: transparent; | |
&:before, | |
&:after { | |
top: 0; | |
} | |
&:before { | |
transform: rotate(45deg); | |
} | |
&:after { | |
transform: rotate(-45deg); | |
} | |
} | |
} | |
// Page content | |
article { | |
max-width: $content-width; | |
margin: 0 auto; | |
padding: 10px; | |
} |