A responsive dropdown navbar with animated hamburger menu icon. Built with Sass.
Created
April 3, 2017 20:23
-
-
Save anonymous/565c6ad582ed998f60165ce8211c198f to your computer and use it in GitHub Desktop.
Responsive Dropdown Navigation Bar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Navigation Variables | |
$content-width: 1000px; | |
$breakpoint: 800px; | |
$nav-height: 70px; | |
$nav-background: #262626; | |
$nav-font-color: #ffffff; | |
$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: $breakpoint) { | |
// 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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment