Responsive Sliding Side Navigation with jQuery and CSS3
| File Size: | 4.88 KB |
|---|---|
| Views Total: | 10946 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
Yet another jQuery plugin to create a fully responsive & animated sliding side navigation with sub-navigation using jQuery and CSS3. Useful for creating a mobile app-like vertical navigation menu sliding out from the edge of your page and push the main content area to the left.
How to use it:
1. Create the Html for a main content area with a toggle link to open a sliding menu.
<main class="cd-main-content">
<header>
<nav id="cd-top-nav">
<ul>
<li><a href="#0">Tour</a></li>
<li><a href="#0">Login</a></li>
</ul>
</nav>
<a id="cd-menu-trigger" href="#0"><span class="cd-menu-text">Menu</span><span class="cd-menu-icon"></span></a>
</header>
</main>
2. Create the Html for a sliding navigation.
<nav id="cd-lateral-nav">
<ul class="cd-navigation">
<li class="item-has-children"> <a href="#0">Services</a>
<ul class="sub-menu">
<li><a href="#0">Brand</a></li>
<li><a href="#0">Web Apps</a></li>
<li><a href="#0">Mobile Apps</a></li>
</ul>
</li>
<!-- item-has-children -->
<li class="item-has-children"> <a href="#0">Products</a>
<ul class="sub-menu">
<li><a href="#0">Product 1</a></li>
<li><a href="#0">Product 2</a></li>
<li><a href="#0">Product 3</a></li>
<li><a href="#0">Product 4</a></li>
<li><a href="#0">Product 5</a></li>
</ul>
</li>
<!-- item-has-children -->
<li class="item-has-children"> <a href="#0">Stockists</a>
<ul class="sub-menu">
<li><a href="#0">London</a></li>
<li><a href="#0">New York</a></li>
<li><a href="#0">Milan</a></li>
<li><a href="#0">Paris</a></li>
</ul>
</li>
<!-- item-has-children -->
</ul>
<!-- cd-navigation -->
<ul class="cd-navigation cd-single-item-wrapper">
<li><a href="#0">Tour</a></li>
<li><a href="#0">Login</a></li>
<li><a href="#0">Register</a></li>
<li><a href="#0">Pricing</a></li>
<li><a href="#0">Support</a></li>
</ul>
<!-- cd-single-item-wrapper -->
<ul class="cd-navigation cd-single-item-wrapper">
<li><a class="current" href="#0">Journal</a></li>
<li><a href="#0">FAQ</a></li>
<li><a href="#0">Terms & Conditions</a></li>
<li><a href="#0">Careers</a></li>
<li><a href="#0">Students</a></li>
</ul>
<!-- cd-single-item-wrapper -->
</nav>
3. The required CSS/CSS3 styles.
.cd-img-replace {
/* replace text with a background-image */
display: inline-block;
overflow: hidden;
text-indent: 100%;
white-space: nowrap;
}
.overflow-hidden {
overflow: hidden;
}
/* --------------------------------
Main components
-------------------------------- */
.cd-main-content {
/* set a min-height and a z-index to be sure that the main element completely covers the lateral menu */
min-height: 100%;
position: relative;
background-color: #f5f4e9;
z-index: 2;
/* Force Hardware Acceleration in WebKit */
-webkit-transform: translateZ(0);
-webkit-backface-visibility: hidden;
-webkit-transition-property: -webkit-transform;
-moz-transition-property: -moz-transform;
transition-property: transform;
-webkit-transition-duration: 0.4s;
-moz-transition-duration: 0.4s;
transition-duration: 0.4s;
}
.cd-main-content.lateral-menu-is-open {
/* translate to show the lateral menu - all content needs to be put in the .cd-main-content to translate*/
-webkit-transform: translateX(-260px);
-moz-transform: translateX(-260px);
-ms-transform: translateX(-260px);
-o-transform: translateX(-260px);
transform: translateX(-260px);
}
header {
position: relative;
height: 50px;
width: 100%;
background: #4e6361;
}
@media only screen and (min-width: 768px) {
header {
height: 70px;
}
}
#cd-logo {
display: block;
float: left;
margin: 12px 0 0 20px;
}
#cd-logo img {
display: block;
}
@media only screen and (min-width: 768px) {
#cd-logo {
margin: 22px 0 0 30px;
}
}
#cd-top-nav {
position: absolute;
top: 0;
right: 120px;
height: 100%;
display: none;
}
#cd-top-nav ul {
height: 100%;
padding-top: 18px;
}
#cd-top-nav li {
display: inline-block;
margin-right: 1em;
}
#cd-top-nav a {
display: inline-block;
padding: .5em;
color: #FFF;
text-transform: uppercase;
font-weight: 600;
}
#cd-top-nav a.current {
background-color: #242e30;
}
.no-touch #cd-top-nav a:hover {
color: rgba(255, 255, 255, 0.7);
}
@media only screen and (min-width: 768px) {
#cd-top-nav {
display: block;
}
}
#cd-menu-trigger {
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 50px;
background-color: #64807d;
}
#cd-menu-trigger .cd-menu-text {
height: 100%;
text-transform: uppercase;
color: #FFF;
font-weight: 600;
display: none;
}
#cd-menu-trigger .cd-menu-icon {
/* this span is the central line in the menu menu */
display: inline-block;
position: absolute;
left: 50%;
top: 50%;
bottom: auto;
right: auto;
-webkit-transform: translateX(-50%) translateY(-50%);
-moz-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%);
-o-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
width: 18px;
height: 2px;
background-color: #FFF;/* these are the upper and lower lines in the menu menu */
}
#cd-menu-trigger .cd-menu-icon::before,
#cd-menu-trigger .cd-menu-icon:after {
content: '';
width: 100%;
height: 100%;
position: absolute;
background-color: inherit;
left: 0;
/* Force Hardware Acceleration in WebKit */
-webkit-transform: translateZ(0);
-webkit-backface-visibility: hidden;
}
#cd-menu-trigger .cd-menu-icon::before {
bottom: 5px;
}
#cd-menu-trigger .cd-menu-icon::after {
top: 5px;
}
#cd-menu-trigger.is-clicked .cd-menu-icon {
background-color: rgba(255, 255, 255, 0);
}
#cd-menu-trigger.is-clicked .cd-menu-icon::before,
#cd-menu-trigger.is-clicked .cd-menu-icon::after {
background-color: white;
}
#cd-menu-trigger.is-clicked .cd-menu-icon::before {
bottom: 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
#cd-menu-trigger.is-clicked .cd-menu-icon::after {
top: 0;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg);
}
@media only screen and (min-width: 768px) {
#cd-menu-trigger {
width: 110px;
padding-left: 1.25em;
}
#cd-menu-trigger .cd-menu-text {
display: inline-block;
line-height: 70px;
}
#cd-menu-trigger .cd-menu-icon {
left: auto;
right: 1.25em;
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
}
#cd-lateral-nav {
position: fixed;
height: 100%;
right: 0;
top: 0;
/* the secondary navigation is covered by the main element */
z-index: 1;
width: 260px;
background-color: #242e30;
overflow-y: auto;
/* smooth the scrolling on touch devices - webkit browsers */
-webkit-overflow-scrolling: touch;
/* Force Hardware Acceleration in WebKit */
-webkit-transform: translateZ(0);
-webkit-backface-visibility: hidden;
-webkit-transition-property: -webkit-transform;
-moz-transition-property: -moz-transform;
transition-property: transform;
-webkit-transition-duration: 0.4s;
-moz-transition-duration: 0.4s;
transition-duration: 0.4s;
/* this creates the subtle slide in animation of the navigation */
-webkit-transform: translateX(80px);
-moz-transform: translateX(80px);
-ms-transform: translateX(80px);
-o-transform: translateX(80px);
transform: translateX(80px);
}
#cd-lateral-nav .cd-navigation {
margin: 10px 0 16px;
}
#cd-lateral-nav .sub-menu {
padding: 0 10px 20px 15px;
display: none;
}
#cd-lateral-nav a {
display: block;
line-height: 2em;
padding: 0 16px 0 32px;
color: #aab5b7;
}
#cd-lateral-nav a.current {
background-color: #3a4a4d;
color: #FFF;
}
.no-touch #cd-lateral-nav a:hover {
color: #FFF;
}
@media only screen and (min-width: 768px) {
#cd-lateral-nav .cd-navigation {
margin: 20px 0;
}
}
#cd-lateral-nav.lateral-menu-is-open {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
/* style menu items which have a submenu */
#cd-lateral-nav .item-has-children > a {
position: relative;
text-transform: uppercase;
font-weight: 600;/* this is the right arrow to show that the item has a submenu */
}
#cd-lateral-nav .item-has-children > a::after {
content: '';
display: block;
height: 11px;
width: 8px;
position: absolute;
top: 50%;
bottom: auto;
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
transform: translateY(-50%);
right: 1em;
background: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/148866/cd-arrow-sec-exp-nav.svg") no-repeat center center;
background-size: 8px 11px;
-webkit-transition-property: -webkit-transform;
-moz-transition-property: -moz-transform;
transition-property: transform;
-webkit-transition-duration: 0.2s;
-moz-transition-duration: 0.2s;
transition-duration: 0.2s;
}
#cd-lateral-nav .item-has-children > a.submenu-open::after {
-webkit-transform: translateY(-50%) rotate(90deg);
-moz-transform: translateY(-50%) rotate(90deg);
-ms-transform: translateY(-50%) rotate(90deg);
-o-transform: translateY(-50%) rotate(90deg);
transform: translateY(-50%) rotate(90deg);
}
#cd-lateral-nav .socials {
*zoom: 1;
padding: 0 32px;
}
#cd-lateral-nav .socials:before,
#cd-lateral-nav .socials:after {
content: " ";
display: table;
}
#cd-lateral-nav .socials:after {
clear: both;
}
#cd-lateral-nav .socials a {
height: 32px;
width: 32px;
float: left;
padding: 0;
background-image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/148866/cd-socials.svg");
background-repeat: no-repeat;
background-size: 128px 64px;
background-color: #FFF;
margin-right: .5em;
border-radius: 0.25em;
}
#cd-lateral-nav .socials a.cd-twitter {
background-position: 0 0;
}
#cd-lateral-nav .socials a.cd-github {
background-position: -32px 0;
}
#cd-lateral-nav .socials a.cd-facebook {
background-position: -64px 0;
}
#cd-lateral-nav .socials a.cd-google {
background-position: -96px 0;
}
.no-touch #cd-lateral-nav .socials a:hover {
background-color: #4e6361;
}
.no-touch #cd-lateral-nav .socials a:hover.cd-twitter {
background-position: 0 -32px;
}
.no-touch #cd-lateral-nav .socials a:hover.cd-github {
background-position: -32px -32px;
}
.no-touch #cd-lateral-nav .socials a:hover.cd-facebook {
background-position: -64px -32px;
}
.no-touch #cd-lateral-nav .socials a:hover.cd-google {
background-position: -96px -32px;
}
4. Include the latest version of jQuery library at the end of your page.
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script>
5. Add the following Javascript snippets after jQuery library.
<script>jQuery(document).ready(function($){
var $lateral_menu_trigger = $('#cd-menu-trigger'),
$content_wrapper = $('.cd-main-content');
// fallback added for IE9 - transition not supported
var is_explorer_9 = navigator.userAgent.indexOf('MSIE 9') > -1;
//open-close lateral menu clicking on the menu icon
$lateral_menu_trigger.on('click', function(event){
event.preventDefault();
$lateral_menu_trigger.toggleClass('is-clicked');
$content_wrapper.toggleClass('lateral-menu-is-open').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(){
// firefox transitions break when parent overflow is changed, so we need to wait for the end of the trasition to give the body an overflow hidden
$('body').toggleClass('overflow-hidden');
});
$('#cd-lateral-nav').toggleClass('lateral-menu-is-open');
if(is_explorer_9) {
$('body').toggleClass('overflow-hidden');
}
});
//close lateral menu clicking outside the menu itself
$content_wrapper.on('click', function(event){
if( !$(event.target).is('#cd-menu-trigger, #cd-menu-trigger span') ) {
$lateral_menu_trigger.removeClass('is-clicked');
$content_wrapper.removeClass('lateral-menu-is-open').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(){
$('body').removeClass('overflow-hidden');
});
$('#cd-lateral-nav').removeClass('lateral-menu-is-open');
if(is_explorer_9) {
$('body').removeClass('overflow-hidden');
}
}
});
//open (or close) submenu items in the lateral menu. Close all the other open submenu items.
$('.item-has-children').children('a').on('click', function(event){
event.preventDefault();
$(this).toggleClass('submenu-open').next('.sub-menu').slideToggle(200).end().parent('.item-has-children').siblings('.item-has-children').children('a').removeClass('submenu-open').next('.sub-menu').slideUp(200);
});
});
</script>
This awesome jQuery plugin is developed by codyhouse. For more Advanced Usages, please check the demo page or visit the official website.











