Main Nav
Main Example
#example style='height: 100px'
.mod-main-nav-panel
.main-nav-container
.logo
a href='#'
img alt="PolicyGenius" src='images/pg-logo-tab.svg'
.nav-panel-wrapper
.primary-panel
.primary-panel-wrapper
ul.menu.primary-nav
li.has-children
span.menu-header
| Top Level Header 1
div.submenu-wrapper
ul.submenu
li.has-content
span.submenu-header
| List Content - A
div.submenu-wrapper
ul.menu.secondary-panel
li.menu-header.back
span
| List Content - A
li.intro.has-cta
p
| Lorem ipsum dolor sit amet, sed omnes adolescens no, has ullum senserit consetetur eu.
strong<
| Eu vix hinc imperdiet.
.cta-container
.cta
button.button.action
| Button Text
span.info
| Lorem ipsum dolor sit amet.
img.info-image src='holder.js/124x124?auto=yes'
li.list
h3.menu-header
| List Header 1
ul
li
a href='#'
| Link 1
li
a href='#'
| Link 2
li.list
h3.menu-header
| List Header 2
ul
li
a href='#'
| Link 1
li
a href='#'
| Link 2
li.list
h3.menu-header
| List Header 3
ul
li
a href='#'
| Link 1
li
a href='#'
| Link 2
li.mobile-scroll-buffer
.footer-wrapper
.footer
.info
| Lorem ipsum.
div.image-row
img src='holder.js/100px100p?auto=yes&text="Image Row Component"'
li.has-content
span.submenu-header
| Blog Content - A
div.submenu-wrapper
ul.menu.secondary-panel
li.menu-header.back
span
| Blog Content - A
li.intro
p
| Lorem ipsum dolor sit amet, sed omnes adolescens no, has ullum senserit consetetur eu.
strong<
| Eu vix hinc imperdiet.
.tag-container
a.button.tag href='#'
| Tag
li.blog-articles
img src='holder.js/100px200?auto=yes&text="Blog Articles Area"'
li.mobile-scroll-buffer
li.has-content
span.submenu-header
| List Content
div.submenu-wrapper
ul.menu.secondary-panel
li.menu-header.back
span
| List Content - B
li.intro
p
| Lorem ipsum dolor sit amet, sed omnes adolescens no, has ullum senserit consetetur eu.
strong<
| Eu vix hinc imperdiet.
.tag-container
a.button.tag href='#'
| Tag
li.list
h3.menu-header
| List Header 1
ul
li
a href='#'
| Link 1
li
a href='#'
| Link 2
li.list
h3.menu-header
| List Header 2
ul
li
a href='#'
| Link 1
li
a href='#'
| Link 2
li.list
h3.menu-header
| List Header 3
ul
li
a href='#'
| Link 1
li
a href='#'
| Link 2
li.mobile-scroll-buffer
li.has-content
span.submenu-header
| Blog Content - B
div.submenu-wrapper
ul.menu.secondary-panel
li.menu-header.back
span
| Blog Content - B
li.intro.has-cta
p
| Lorem ipsum dolor sit amet, sed omnes adolescens no, has ullum senserit consetetur eu.
strong<
| Eu vix hinc imperdiet.
.cta-container
.cta
button.button.action
| Button Text
span.info
| Lorem ipsum dolor sit amet.
img.info-image src='holder.js/124x124?auto=yes'
li.blog-articles
img src='holder.js/100px100p?auto=yes&text="Blog Articles Area"'
li.mobile-scroll-buffer
.footer-wrapper
.footer
.info
| Lorem ipsum.
div.image-row
img src='holder.js/100px100p?auto=yes&text="Image Row Component"'
li
a.submenu-header href='a'
| Link
li
a.menu-header href='#'
| Top-Level Link
ul.menu.secondary-nav
li.nav-header
a href='#'
| Link 1
li.nav-header
a href='#'
| Link 2
li.mobile-scroll-buffer
.search
div.icon
input.search-input type='text'
.close
button.hamburger type="button"
span.hamburger-box
span.hamburger-inner
Full-width State Variants
These state variants show the main nav in it's various states. This allows us to easily review all states and aids in testing.
Notes:
- Full-width examples hidden @ window width < 992px
- Some functionality has been disabled for the examples below
Searching
#example-searching style='height: 100px'
// Create Searching Example:
(function() {
// Clone main example
var $clone = $('#example > .mod-main-nav-panel').clone();
// Get element to put clone into
var $example = $('#example-searching');
// Append clone
$example.append($clone);
// Set classes to create state
$example.find('.mod-main-nav-panel')
.addClass('searching');
$example.find('.hamburger')
.addClass('is-active');
})();
First Menu Open
#example-first-menu-open style='height: 100px'
// Create First Menu Open Example:
(function() {
// Clone main example
var $clone = $('#example > .mod-main-nav-panel').clone();
// Get element to put clone into
var $example = $('#example-first-menu-open')
// Append clone
$example.append($clone);
// Set classes to create state
$example.find('.has-children').first()
.addClass('active');
})();
Second Menu Open - List
#example-second-menu-open--list style='height: 500px'
// Create Second Menu Open - List Example:
(function() {
// Clone main example
var $clone = $('#example > .mod-main-nav-panel').clone();
// Get element to put clone into
var $example = $('#example-second-menu-open--list')
// Append clone
$example.append($clone);
// Set classes to create state
$example.find('.has-children').first()
.addClass('active');
$example.find('.has-children').first()
.find('.has-content').first()
.addClass('active');
})();
Second Menu Open - Blog
#example-second-menu-open--blog style='height: 400px'
// Create Second Menu Open - Blog Example:
(function() {
// Clone main example
var $clone = $('#example > .mod-main-nav-panel').clone();
// Get element to put clone into
var $example = $('#example-second-menu-open--blog')
// Append clone
$example.append($clone);
// Set classes to create state
$example.find('.has-children').first()
.addClass('active');
$example.find('.has-children').first()
.find('.has-content').eq(1)
.addClass('active');
})();
Simple Example
Proin aliquam tortor Aliquam sapien enim
Suspendisse molestie vel
div style='height: 100px;'
.mod-main-nav-panel.simple
.main-nav-container
.logo
a href='#'
img alt="PolicyGenius" src='images/pg-logo-tab.svg'
.nav-panel-wrapper
.text-wrapper
.text
i
| Proin aliquam tortor
b Aliquam sapien enim
.text.hidden-for-small-only
b Suspendisse molestie vel
Examples Mobile and Tablet State Variants
Notes:
- Mobile examples hidden @ window width > 992px
- Some functionality has been disabled for the examples below
Open
#mobile-example-open style='height: 100vh; margin-top: 50px; overflow: hidden;'
// Create Open Example:
(function() {
// Clone main example
var $clone = $('#example > .mod-main-nav-panel').clone();
// Get element to put clone into
var $example = $('#mobile-example-open');
// Append clone
$example.append($clone);
// Set classes to create state
$example.find('.mod-main-nav-panel')
.addClass('clicked');
$example.find('.hamburger')
.addClass('is-active');
})();
Open Second Panel - List
#mobile-example-second-panel-list style='height: 100vh; margin-top: 50px; overflow: hidden;'
// Create Open Second Panel - List Example
(function() {
// Clone main example
var $clone = $('#example > .mod-main-nav-panel').clone();
// Get element to put clone into
var $example = $('#mobile-example-second-panel-list');
// Append clone
$example.append($clone);
// Set classes to create state
$example.find('.mod-main-nav-panel')
.addClass('clicked');
$example.find('.hamburger')
.addClass('is-active');
$example.find('.primary-panel')
.addClass('mobile-collapsed');
$example.find('.has-content').first()
.addClass('mobile-active');
})();
Open Second Panel - Blog
#mobile-example-second-panel-blog style='height: 100vh; margin-top: 50px; overflow: hidden;'
// Create Open Second Panel - Blog Examples
(function() {
// Clone main example
var $clone = $('#example > .mod-main-nav-panel').clone();
// Get element to put clone into
var $example = $('#mobile-example-second-panel-blog');
// Append clone
$example.append($clone);
// Set classes to create state
$example.find('.mod-main-nav-panel')
.addClass('clicked');
$example.find('.hamburger')
.addClass('is-active');
$example.find('.primary-panel')
.addClass('mobile-collapsed');
$example.find('.has-content').eq(1)
.addClass('mobile-active');
})();
Example Javascript
Hamburger JS
$('.hamburger').click(function() {
if ($(this).parents('.mod-main-nav-panel').hasClass('searching')) {
$(this).parents('.mod-main-nav-panel').removeClass('searching');
$(this).removeClass('is-active');
} else {
$(this).parents('.mod-main-nav-panel').toggleClass('clicked');
$(this).toggleClass('is-active');
}
return false;
});
Menu Aim Plugin Implementation
We use the jQuery-menu-aim plugin to make sure that a hover from one menu item to the next is intentional.
The plugin is loaded in the <head>
to allow Hologram javascript to work correctly.
var pg_menuAim = {};
pg_menuAim.activate = function(menu_item) {
$(menu_item).addClass('active');
};
pg_menuAim.deactivate = function(menu_item) {
$(menu_item).removeClass('active');
};
pg_menuAim.exitMenu = function(menu) {
$(menu).children().removeClass('active');
};
$(".submenu").menuAim({
activate: pg_menuAim.activate,
deactivate: pg_menuAim.deactivate,
exitMenu: pg_menuAim.exitMenu,
submenuDirection: 'down',
submenuSelector: '.has-content',
tolerance: 300
});
Mobile Specific JS
$('.has-content .submenu-header').click(function() {
var $thisModule = $(this).parents('.mod-main-nav-panel');
$thisModule.find('.primary-panel').addClass('mobile-collapsed');
$thisModule.find('.has-content').removeClass('mobile-active');
$(this).parents('.has-content').addClass('mobile-active');
return false;
});
$('.back').click(function() {
var $thisModule = $(this).parents('.mod-main-nav-panel');
$thisModule.find('.primary-panel').removeClass('mobile-collapsed');
return false;
});
Full-width Specific JS
$('.has-children').click(function() {
$(this).siblings('.has-children').removeClass('active');
$(this).toggleClass('active');
return false;
});
$('.search .icon').click(function() {
var $thisModule = $(this).parents('.mod-main-nav-panel');
$thisModule.addClass('searching');
$thisModule.find('.hamburger').addClass('is-active');
$thisModule.find('.search-input').focus();
return false;
});
Additional JS for the examples above
javascript:
// Make sure that whatever example the user
// is interacting with is visible above the other examples
$('.codeExample').hover(function() {
// Hover in
$(this).css('position', 'relative');
$(this).css('z-index', 1000);
}, function() {
// Hover out
$(this).css('z-index', 1);
});
// Hide mobile examples on large screens
// Hide full-width examples on small screens
// Declare function
var hideExamples = function() {
if (window.innerWidth <= 1024) {
$('[id^="example-"]').hide();
$('[id^="mobile-example-"]').show();
} else {
$('[id^="example-"]').show();
$('[id^="mobile-example-"]').hide();
}
};
// Run function on page load
hideExamples();
// Run function when user resizes
$(window).resize(function() {
hideExamples();
});