A responsive dropdown navbar with animated hamburger menu icon. Built with Sass.
A Pen by Tania Rascia 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="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
| // Navigation Variables | |
| $content-width: 1000px; | |
| $breakpoint: 799px; | |
| $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: 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; | |
| } |