Keyboard Friendly Push Menu v2
by Aaron Kahlhamer
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery.transit/0.9.9/jquery.transit.min.js"></script>
<ul id="top" class="lp-top-styles">
<li><a href="#" name="#women">Women <span>↑</span></a></li>
<li><a href="#" name="#accessories">Accessories <span>↑</span></a></li>
<li><a href="#" name="#jewelry">Jewelry <span>↑</span></a></li>
<li><a href="#" name="#shoes">Shoes <span>↑</span></a></li>
<li><a href="#" name="#men">Men <span>↑</span></a></li>
<li><a href="#" name="#for-the-home">For the Home <span>↑</span></a></li>
</ul>
<div class="lp-sub-menu">
<ul id="women">
<li><a href="#">Women</a></li>
<li><a href="#">Women's Plus</a></li>
<li><a href="#">Petites</a></li>
</ul>
<ul id="accessories">
<li><a href="#">Women</a></li>
<li><a href="#">Men</a></li>
</ul>
<ul id="jewelry">
<li><a href="#">No Jewelry</a></li>
</ul>
<ul id="shoes">
<li><a href="#">Women</a></li>
<li><a href="#">Men</a></li>
</ul>
<ul id="men">
<li><a href="#">Men's</a></li>
<li><a href="#">Big & Tall</a></li>
<li><a href="#">Accessories</a></li>
</ul>
<ul id="for-the-home">
<li><a href="#">Bed</a></li>
<li><a href="#">Bath</a></li>
<li><a href="#">Décor</a></li>
<li><a href="#">Kitchen</a></li>
<li><a href="#">Dining & Entertaining</a></li>
</ul>
</div>
CSS
*{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}ul{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}
body, div, ul, li, a, img, span {
margin:0;
padding:0;
}
body {
background-color:rgba(21, 37, 62, .3);
font-family: Helvetica, Arial, sans-serif;
font-size:.9em;
}
/*------------------------------------*\
$NAV
\*------------------------------------*/
.lp-top-styles {
background-color: rgba(21, 37, 62, 1);
color: #fff;
position:relative;
text-align: center;
width:100%;
z-index: 2;
}
.lp-top-styles li {
display:inline-block;
text-align: center;
width:16%;
}
.lp-top-styles li:first-child,
.lp-top-styles li:first-child {
width:17%;
}
.lp-top-styles a {
color: #fff;
display:block;
line-height: 270%;
padding: 0.42em 0.7em;
position:relative;
text-decoration: none;
width:100%;
}
.lp-top-styles a:hover,
.lp-top-styles a:focus {
background-color: rgba(255, 255, 255, .1);
}
.lp-top-styles span {
visibility: hidden;
}
/*------------------------------------*\
$SUB-NAV
\*------------------------------------*/
.lp-sub-menu {
background-color: rgba(21, 37, 62, .4);
float:left;
height:0;
overflow:hidden;
width:100%;
}
.lp-sub-menu ul {
float: left;
position:absolute;
visibility:hidden;
width:30%;
}
.lp-sub-menu ul:last-child {
right:.6%;
}
.lp-sub-menu ul a {
color: #000;
display: block;
line-height: 320%;
padding:0 10%;
text-decoration: none;
text-transform: uppercase;
white-space: nowrap;
}
.lp-sub-menu ul a:hover,
.lp-sub-menu ul a:focus {
background-color: rgba(0,0,0,0.3);
}
/*------------------------------------*\
$TEMPLATE
\*------------------------------------*/
.lp-container {
float:left;
padding: 4em...
JavaScript
$(document).ready(function() {
$('.lp-sub-menu ul').each(function(){
var height = $(this).height(),
oid = $(this).attr('id');
$(this).transition({ y: + - + height + 'px' });
$(this).find('a:last').focusout(function(){
$( "[name|='#"+oid+"']" ).focus();
});
});
var heights = $('.lp-sub-menu > ul').map(function ()
{
return $(this).height();
}).get(),
maxHeight = Math.max.apply(null, heights);
$('#top').on('click focus', 'a', function(e){
"use strict";
e.preventDefault();
var ahrefname = this.name,
eLeft = $(this).offset().left,
percent = 100 / $(window).width() * eLeft,
submenuHeight = $(ahrefname).height();
if ($(ahrefname).siblings().hasClass('active-sub-menu')) {
$(this).parents('ul').find('a').removeClass('active-menu').find('span').css({'visibility' : ''});
$(ahrefname).siblings().transition({ y: + - + maxHeight + 'px'}).delay(10).queue(function(next){
$(ahrefname).siblings().removeClass('active-sub-menu').css({'margin-left' : ''});
next();
});
$('.lp-sub-menu').transition({ height: + submenuHeight + 'px'});
$(ahrefname).css({'margin-left' : percent + '%'}).delay(4).queue(function(next){
$(ahrefname).addClass('active-sub-menu').transition({ y: + 0 + 'px'});
next();
});
$(this).addClass('active-menu').find('span').css({'visibility' : 'visible'});
} else if ($(ahrefname).hasClass('active-sub-menu')) {
$('.lp-sub-menu').transition({ height: + - + submenuHeight + 'px' });
$(ahrefname).removeClass('active-sub-menu').transition({ y: + 0 + 'px'}).css({'margin-left' : ''});
$(this).removeClass('active-menu').find('span').css({'visibility' : ''});
} else {
$('.lp-sub-menu').transition({ height: + submenuHeight + 'px' });
$(ahrefname).find('a').focus();
$(ahrefname).css({'margin-left' : percent + '%'}).delay(4).queue(function(next){
$(ahrefname).addClass('active-sub-menu').transition({ y: + 0 +...