<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<!------ Include the above in your HEAD tag ---------->
<link href="https://fonts.googleapis.com/css?family=Exo+2:300,400" rel="stylesheet">
<link rel="stylesheet" type="text/css" media="all" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<div id="main-nav" class="stellarnav">
<ul>
<li><a href="">Dropdown</a>
<ul>
<li><a href="#">How deep?</a>
<ul>
<li><a href="#">Deep</a>
<ul>
<li><a href="#">Even deeper</a>
<ul>
<li><li><a href="#">Item</a></li></li>
<li><li><a href="#">Item</a></li></li>
<li><li><a href="#">Item</a></li></li>
</ul>
</li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
</ul>
</li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
</ul>
</li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Here's a very long item. It can be as long as you want</a></li>
<li><a href="#">Item</a></li>
</ul>
</li>
<li><a href="">Item 2</a></li>
<li><a href="">Item 3</a></li>
<li><a href="">Item 4</a></li>
<li><a href="">Item 5</a></li>
<li><a href="">Item 6</a></li>
<li class="drop-left"><a href="">Drop Left</a>
<ul>
<li><a href="#">How deep?</a>
<ul>
<li><a href="#">Deep</a>
<ul>
<li><a href="#">Even deeper</a>
<ul>
<li><li><a href="#">Item</a></li></li>
<li><li><a href="#">Item</a></li></li>
<li><li><a href="#">Item</a></li></li>
</ul>
</li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
</ul>
</li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
</ul>
</li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
</ul>
</li>
</ul>
</div><!-- .stellar-nav -->
<script type="text/javascript">
jQuery(document).ready(function($) {
jQuery('.stellarnav').stellarNav({
theme: 'dark'
});
});
jQuery('#main-nav').stellarNav({
// adds default color to nav. (light, dark)
theme : 'plain',
// number in pixels to determine when the nav should turn mobile friendly
breakpoint: 768,
// adds a click-to-call phone link to the top of menu - i.e.: "18009084500"
phoneBtn: false,
// adds a location link to the top of menu - i.e.: "/location/", "http://site.com/contact-us/"
locationBtn: false,
// makes nav sticky on scroll
sticky : false,
// 'static' or 'top' - when set to 'top', this forces the mobile nav to be placed absolutely on the very top of page
position: 'static',
// shows dropdown arrows next to the items that have sub menus
showArrows: true,
// adds a close button to the end of nav
closeBtn : false,
// fixes horizontal scrollbar issue on very long navs
scrollbarFix: false
});
</script>
/*
* Stellarnav.js 1.2.0
* jQuery responsive multi-level dropdown menu designed to do most of the heavy CSS work for you.
* Copyright (c) 2016 Vinny Moreira - http://vinnymoreira.com
* Released under the MIT license
*/
/* all nav */
.stellarnav { position: relative; width: 100%; z-index: 9900; line-height: normal; }
.stellarnav ul { margin: 0; padding: 0; text-align: center; }
.stellarnav li { list-style: none; display: block; margin: 0; padding: 0; position: relative; line-height: normal; vertical-align: middle; }
.stellarnav li a { padding: 15px; display: block; text-decoration: none; color: #777; font-size: inherit; font-family: inherit; box-sizing: border-box; -webkit-transition: all .3s ease-out; -moz-transition: all .3s ease-out; transition: all .3s ease-out; }
/* main level */
.stellarnav > ul > li { display: inline-block; }
.stellarnav > ul > li > a { padding: 20px 40px; }
/* first level dd */
.stellarnav ul ul { top: auto; width: 220px; position: absolute; z-index: 9900; text-align: left; display: none; background: #ddd; }
.stellarnav li li { display: block; }
/* second level dd */
.stellarnav ul ul ul { top: 0; /* dd animtion - change to auto to remove */ left: 220px; }
.stellarnav > ul > li:hover > ul > li:hover > ul { opacity: 1; visibility: visible; top: 0; }
/* .drop-left */
.stellarnav > ul > li.drop-left > ul { right: 0; }
.stellarnav li.drop-left ul ul { left: auto; right: 220px; }
/* light theme */
.stellarnav.light { background: rgba(255, 255, 255, 1); }
.stellarnav.light ul ul { background: rgba(255, 255, 255, 1); }
.stellarnav.light li a { color: #000; }
.stellarnav.light .menu-toggle, .stellarnav.light .call-btn-mobile, .stellarnav.light .location-btn-mobile, .stellarnav.light .close-menu { color: rgba(0, 0, 0, 1); }
/* dark theme */
.stellarnav.dark { background: rgba(0, 0, 0, 1); }
.stellarnav.dark ul ul { background: rgba(0, 0, 0, 1); }
.stellarnav.dark li a { color: #FFF; }
.stellarnav.dark .menu-toggle, .stellarnav.dark .call-btn-mobile, .stellarnav.dark .location-btn-mobile, .stellarnav.dark .close-menu { color: rgba(255, 255, 255, 1); }
/* sticky nav */
.stellarnav.fixed { position: fixed; width: 100%; top: 0; left: 0; z-index: 9999; }
/* only used when 'scrollbarFix' is set to true in the js. This fixes horizontal scrollbar caused by the dd menus that are very long.*/
body.stellarnav-noscroll-x { overflow-x: hidden; }
/* general styling */
.stellarnav li.has-sub > a:after { content: '\f0d7'; font-family: 'FontAwesome'; margin-left: 10px; }
.stellarnav li li.has-sub > a:after { content: '\f0da'; font-family: 'FontAwesome'; margin-left: 10px; }
.stellarnav li.drop-left li.has-sub > a:after { float: left; content: '\f0d9'; font-family: 'FontAwesome'; margin-right: 10px; }
.stellarnav.hide-arrows li.has-sub > a:after, .stellarnav.hide-arrows li li.has-sub > a:after, .stellarnav.hide-arrows li.drop-left li.has-sub > a:after { display: none; }
.stellarnav .menu-toggle, .stellarnav .close-menu, .stellarnav .call-btn-mobile, .stellarnav .location-btn-mobile { display: none; text-transform: uppercase; text-decoration: none; }
.stellarnav .dd-toggle { display: none; position: absolute; top: 0; right: 0; padding: 0; width: 48px; height: 48px; text-align: center; z-index: 9999; border: 0; }
.stellarnav .dd-toggle i { position: absolute; margin: auto; top: 33%; left: 0; right: 0; -webkit-transition: transform .3s ease-out; -moz-transition: transform .3s ease-out; transition: transform .3s ease-out; }
.stellarnav.mobile > ul > li > a.dd-toggle { padding: 0; }
.stellarnav li.call-btn-mobile, .stellarnav li.location-btn-mobile { display: none; }
.stellarnav li.open > a.dd-toggle i { -webkit-transform: rotate(135deg); -ms-transform: rotate(135deg); -o-transform: rotate(135deg); transform: rotate(135deg); }
/* mobile nav */
.stellarnav .menu-toggle, .stellarnav .call-btn-mobile, .stellarnav .location-btn-mobile, .stellarnav .close-menu { color: #777; padding: 15px; box-sizing: border-box; }
.stellarnav .full { width: 100%; }
.stellarnav .half { width: 50%; }
.stellarnav .third { width: 33%; text-align: center; }
.stellarnav .location-btn-mobile.third { text-align: center; }
.stellarnav .location-btn-mobile.half { text-align: right; }
.stellarnav.light .third, .stellarnav.light .half { border-left: 1px solid rgba(0, 0, 0, .15); }
.stellarnav.light.left .third, .stellarnav.light.left .half { border-bottom: 1px solid rgba(0, 0, 0, .15); }
.stellarnav.light.right .third, .stellarnav.light.right .half { border-bottom: 1px solid rgba(0, 0, 0, .15); }
.stellarnav.light .third:first-child, .stellarnav.light .half:first-child { border-left: 0; }
.stellarnav.dark .third, .stellarnav.dark .half { border-left: 1px solid rgba(255, 255, 255, .15); }
.stellarnav.dark.left .third, .stellarnav.dark.left .half { border-bottom: 1px solid rgba(255, 255, 255, .15); }
.stellarnav.dark.right .third, .stellarnav.dark.right .half { border-bottom: 1px solid rgba(255, 255, 255, .15); }
.stellarnav.light.left .menu-toggle, .stellarnav.light.right .menu-toggle { border-bottom: 0; }
.stellarnav.dark.left .menu-toggle, .stellarnav.dark.right .menu-toggle { border-bottom: 0; }
.stellarnav.dark .third:first-child, .stellarnav.dark .half:first-child { border-left: 0; }
.stellarnav.mobile { position: static; }
.stellarnav.mobile.fixed { position: static; }
.stellarnav.mobile ul { position: relative; display: none; }
.stellarnav.mobile.active { padding-bottom: 0; }
.stellarnav.mobile.active > ul { display: block; }
.stellarnav.mobile ul { text-align: left; }
.stellarnav.mobile > ul > li { display: block; }
.stellarnav.mobile > ul > li > a { padding: 15px; }
.stellarnav.mobile ul { background: rgba(221, 221, 221, 1); }
.stellarnav.mobile ul ul { position: relative; opacity: 1; visibility: visible; width: auto; display: none; -moz-transition: none; -webkit-transition: none; -o-transition: color 0 ease-in; transition: none; }
.stellarnav.mobile ul ul ul { left: auto; top: auto; }
.stellarnav.mobile li.drop-left ul ul { right: auto; }
.stellarnav.mobile li a { border-bottom: 1px solid rgba(255, 255, 255, .15); }
.stellarnav.mobile li.has-sub a { padding-right: 50px; }
.stellarnav.mobile > ul { border-top: 1px solid rgba(255, 255, 255, .15); }
.stellarnav.mobile.light li a { border-bottom: 1px solid rgba(0, 0, 0, .15); }
.stellarnav.mobile.light > ul { border-top: 1px solid rgba(0, 0, 0, .15); }
.stellarnav.mobile li a.dd-toggle { border: 0; }
.stellarnav.mobile.light li a.dd-toggle { border: 0; }
.stellarnav.mobile .menu-toggle, .stellarnav.mobile .dd-toggle, .stellarnav.mobile .close-menu, .stellarnav.mobile .call-btn-mobile, .stellarnav.mobile .location-btn-mobile { display: inline-block; }
.stellarnav.mobile li.call-btn-mobile { border-right: 1px solid rgba(255, 255, 255, .1); box-sizing: border-box; }
.stellarnav.mobile li.call-btn-mobile, .stellarnav.mobile li.location-btn-mobile { display: inline-block; width: 50%; text-transform: uppercase; text-align: center; }
.stellarnav.mobile li.call-btn-mobile.full, .stellarnav.mobile li.location-btn-mobile.full { display: block; width: 100%; text-transform: uppercase; border-right: 0; text-align: left; }
.stellarnav.mobile li.call-btn-mobile i, .stellarnav.mobile li.location-btn-mobile i { margin-right: 5px; }
.stellarnav.mobile.light ul { background: rgba(255, 255, 255, 1); }
.stellarnav.mobile.dark ul { background: rgba(0, 0, 0, 1); }
.stellarnav.mobile.dark ul ul { background: rgba(255, 255, 255, .08); }
.stellarnav.mobile.light li.call-btn-mobile { border-right: 1px solid rgba(0, 0, 0, .1); }
.stellarnav.mobile.top { position: absolute; width: 100%; top: 0; left: 0; z-index: 9999; }
.stellarnav.mobile li.has-sub > a:after, .stellarnav.mobile li li.has-sub > a:after, .stellarnav.mobile li.drop-left li.has-sub > a:after { display: none; }
/* left and right positions */
.stellarnav.mobile.right > ul, .stellarnav.mobile.left > ul { position: absolute; top: 0; bottom: 0; width: 100%; max-width: 280px; overflow-x: hidden; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.stellarnav.mobile.right > ul { right: 0; }
.stellarnav.mobile.right .close-menu, .stellarnav.mobile.left .close-menu { display: inline-block; text-align: right; }
.stellarnav.mobile.left > ul { left: 0; }
.stellarnav.mobile.right .location-btn-mobile.half, .stellarnav.mobile.right .call-btn-mobile.half, .stellarnav.mobile.right .close-menu.half { text-align: center; }
.stellarnav.mobile.right .location-btn-mobile.third, .stellarnav.mobile.right .call-btn-mobile.third, .stellarnav.mobile.right .close-menu.third { text-align: center; }
.stellarnav.mobile.left .location-btn-mobile.half, .stellarnav.mobile.left .call-btn-mobile.half, .stellarnav.mobile.left .close-menu.half { text-align: center; }
.stellarnav.mobile.left .location-btn-mobile.third, .stellarnav.mobile.left .call-btn-mobile.third, .stellarnav.mobile.left .close-menu.third { text-align: center; }
.stellarnav.mobile.left .menu-toggle.half, .stellarnav.mobile.left .menu-toggle.third, .stellarnav.mobile.right .menu-toggle.half, .stellarnav.mobile.right .menu-toggle.third { text-align: left; }
.stellarnav.mobile.left .close-menu.third span, .stellarnav.mobile.right .close-menu.third span { display: none; }
/* left and right positions */
/* Fallback for slow javascript load */
@media only screen and (max-width : 768px) {
.stellarnav { overflow: hidden; display: block; }
.stellarnav ul { position: relative; display: none; }
}
/* mobile nav */
@media only screen and (max-width : 420px) {
.stellarnav.mobile .call-btn-mobile.third span, .stellarnav.mobile .location-btn-mobile.third span { display: none; }
}
/*
* Stellarnav.js 1.2.0
* jQuery responsive multi-level dropdown menu designed to do most of the heavy CSS work for you.
*
* Copyright (c) 2016 Vinny Moreira - http://vinnymoreira.com
*
* Released under the MIT license
*/
(function($) {
$.fn.stellarNav = function(options, width, breakpoint) {
var $nav, $width, $breakpoint;
nav = $(this);
width = $(window).width();
// default settings
var settings = $.extend( {
theme : 'plain', // adds default color to nav. (light, dark)
breakpoint: 768, // number in pixels to determine when the nav should turn mobile friendly
phoneBtn: false, // adds a click-to-call phone link to the top of menu - i.e.: "18009084500"
locationBtn: false, // adds a location link to the top of menu - i.e.: "/location/", "http://site.com/contact-us/"
sticky : false, // makes nav sticky on scroll (desktop only)
position: 'static', // 'static' or 'top' - when set to 'top', this forces the mobile nav to be placed absolutely on the very top of page
showArrows: true, // shows dropdown arrows next to the items that have sub menus
closeBtn : false, // adds a close button to the end of nav
scrollbarFix: false // fixes horizontal scrollbar issue on very long navs
}, options );
return this.each( function() {
// defines black or white themes
if (settings.theme == 'light' || settings.theme == 'dark') {
nav.addClass(settings.theme);
}
if (settings.breakpoint) {
breakpoint = settings.breakpoint;
}
// css classes for main menu mobile buttons
if( settings.phoneBtn && settings.locationBtn ) {
var cssClass = 'third';
} else if( settings.phoneBtn || settings.locationBtn ) {
var cssClass = 'half';
} else {
var cssClass = 'full';
}
// adds the toggle button to open and close nav
nav.prepend('<a href="#" class="menu-toggle ' + cssClass + '"><i class="fa fa-bars"></i> Menu</a>');
// adds a click-to-call link
if (settings.phoneBtn && !(settings.position == 'right' || settings.position == 'left')) {
var btn = '<a href="tel:'+ settings.phoneBtn +'" class="call-btn-mobile ' + cssClass + '"><i class="fa fa-phone"></i> <span>Call us</span></a>';
nav.find('a.menu-toggle').after(btn);
}
// adds a location page link to the beginning of nav
if (settings.locationBtn && !(settings.position == 'right' || settings.position == 'left')) {
var btn = '<a href="'+ settings.locationBtn +'" class="location-btn-mobile ' + cssClass + '" target="_blank"><i class="fa fa-map-marker"></i> <span>Location</span></a>';
nav.find('a.menu-toggle').after(btn);
}
// Makes nav sticky on scroll
if (settings.sticky) {
navPos = nav.offset().top;
if(width >= breakpoint) {
$(window).bind('scroll', function() {
if ($(window).scrollTop() > navPos) {
nav.addClass('fixed');
}
else {
nav.removeClass('fixed');
}
});
}
}
if (settings.position == 'top') {
nav.addClass('top');
}
if (settings.position == 'left' || settings.position == 'right') {
var closeBtn = '<a href="#" class="close-menu ' + cssClass + '"><i class="fa fa-close"></i> <span>Close</span></a>';
var phoneBtn = '<a href="tel:'+ settings.phoneBtn +'" class="call-btn-mobile ' + cssClass + '"><i class="fa fa-phone"></i></a>';
var locationBtn = '<a href="'+ settings.locationBtn +'" class="location-btn-mobile ' + cssClass + '" target="_blank"><i class="fa fa-map-marker"></i></a>';
nav.find('ul:first').prepend(closeBtn);
if (settings.locationBtn) {
nav.find('ul:first').prepend(locationBtn);
}
if (settings.phoneBtn) {
nav.find('ul:first').prepend(phoneBtn);
}
}
if (settings.position == 'right') {
nav.addClass('right');
}
if (settings.position == 'left') {
nav.addClass('left');
}
if (!settings.showArrows) {
nav.addClass('hide-arrows');
}
if (settings.closeBtn && !(settings.position == 'right' || settings.position == 'left')) {
// adds a link to end of nav to close it
nav.find('ul:first').append('<li><a href="#" class="close-menu"><i class="fa fa-close"></i> Close Menu</a></li>');
}
if (settings.scrollbarFix) {
$('body').addClass('stellarnav-noscroll-x');
}
// opens and closes menu
$('.menu-toggle').on('click', function(e) {
e.stopPropagation();
// if nav position is left or right, uses fadeToggle instead of slideToggle
if (settings.position == 'left' || settings.position == 'right') {
nav.find('ul:first').stop(true, true).fadeToggle(250);
nav.toggleClass('active');
if(nav.hasClass('active') && nav.hasClass('mobile')) {
// closes the menu when clicked outside of it
$(document).on('click', function(event) {
// ensures menu hides only on mobile nav
if(nav.hasClass('mobile')) {
if (!$(event.target).closest(nav).length) {
nav.find('ul:first').stop(true, true).fadeOut(250);
nav.removeClass('active');
}
}
});
}
} else {
// static position - normal open and close animation
nav.find('ul:first').stop(true, true).slideToggle(250);
nav.toggleClass('active');
}
});
// activates the close button
$('.close-menu').click(function() {
nav.removeClass('active');
if (settings.position == 'left' || settings.position == 'right') {
nav.find('ul:first').stop(true, true).fadeToggle(250);
} else {
nav.find('ul:first').stop(true, true).slideUp(250).toggleClass('active');
}
});
// adds toggle button to li items that have children
nav.find('li a').each(function() {
if ($(this).next().length > 0) {
$(this).parent('li').addClass('has-sub').append('<a class="dd-toggle" href="#"><i class="fa fa-plus"></i></a>');
}
});
// expands the dropdown menu on each click
nav.find('li .dd-toggle').on('click', function(e) {
e.preventDefault();
//$(this).parent('li').toggleClass('hover');
$(this).parent('li').children('ul').stop(true, true).slideToggle(250);
$(this).parent('li').toggleClass('open');
});
var resetTriggers = function() {
nav.find('li').unbind('mouseenter');
nav.find('li').unbind('mouseleave');
}
var setTriggers = function() {
nav.find('li').on('mouseenter', function(){
$(this).addClass('hover');
$(this).children('ul').stop(true, true).slideDown(250);
});
nav.find('li').on('mouseleave', function(){
$(this).removeClass('hover');
$(this).children('ul').stop(true, true).slideUp(250);
});
}
windowCheck();
// check browser width in real-time
function windowCheck() {
var browserWidth = window.innerWidth;
if(browserWidth <= breakpoint) {
// mobile/tablet nav
resetTriggers();
nav.addClass('mobile');
nav.removeClass('desktop');
// closes the menu when resizing window back to desktop
if( !nav.hasClass('active') && nav.find('ul:first').is(':visible') ) {
//nav.addClass('active');
nav.find('ul:first').hide();
}
} else {
// desktop nav
nav.addClass('desktop');
nav.removeClass('mobile');
if(nav.hasClass('active')) {
nav.removeClass('active');
}
// ensures stellarnav is visible after resizing window
if( !nav.hasClass('active') && nav.find('ul:first').is(':hidden') ) {
nav.find('ul:first').show();
}
// hides items that were open on mobile
$('li.open').removeClass('open').find('ul:visible').hide();
resetTriggers();
setTriggers();
}
}
$(window).on('resize', function() {
windowCheck();
});
});
}
}(jQuery));