Responsive Off-Canvas Slide Menu with jQuery and CSS3
| File Size: | 3.58 KB |
|---|---|
| Views Total: | 4235 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
Yet another jQuery & CSS3 responsive off-canvas sliding menu system that supports 3-tier sub-menus based on nested Html lists. As you click the menu button, a vertical sidebar menu slides out from the left side of your browser window with an overlay covering your main content.
How to use it:
1. Create a toggle button to open the off-canvas menu.
<div id="menu-toggle"> <div id="menu-icon"> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> </div> Menu </div>
2. Create an overlay for the main content that will focus your visitors on the off-canvas menu.
<div id="menu-overlay"></div>
3. Create the Html for a multi-level off-canvas menu using nested Html unordered lists.
<ul id="menu">
<li><a href="#">Visit My Site</a></li>
<li><a href="#">No children...</a></li>
<li><a href="#">Hey - this one has some kids!</a>
<ul>
<li><a href="#">I'm a kid!</a></li>
<li><a href="#">I'm a kid!</a></li>
<li><a href="#">Got kids of my own...</a>
<ul>
<li><a href="#">I'm a grandkid!</a></li>
<li><a href="#">I'm a grandkid!</a></li>
<li><a href="#">I'm a grandkid!</a></li>
</ul>
</li>
</ul>
</li>
</ul>
4. Wrap the main content in a container with unique ID of 'page-content'
<div id="page-content"> Your main content goes here </div>
5. The CSS/CSS3 rules to style the off-canvas menu.
#menu-toggle {
position: fixed;
padding: 20px 20px 20px 65px;
width: 100%;
left: 0;
top: 0;
background: rgba(255,255,255,.9);
color: #444444;
z-index: 5;
}
#menu-toggle.open { left: 400px; }
#menu-icon {
width: 45px;
height: 35px;
position: absolute;
left: 10px;
top: 10px;
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transition: .5s ease-in-out;
-moz-transition: .5s ease-in-out;
-o-transition: .5s ease-in-out;
transition: .5s ease-in-out;
cursor: pointer;
}
#menu-icon span {
display: block;
position: absolute;
height: 5px;
width: 50%;
background: #00aeef;
opacity: 1;
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transition: .25s ease-in-out;
-moz-transition: .25s ease-in-out;
-o-transition: .25s ease-in-out;
transition: .25s ease-in-out;
}
#menu-icon span:nth-child(even) { left: 50%; }
#menu-icon span:nth-child(odd) { left: 0px; }
#menu-icon span:nth-child(1),
#menu-icon span:nth-child(2) { top: 5px; }
#menu-icon span:nth-child(3),
#menu-icon span:nth-child(4) { top: 15px; }
#menu-icon span:nth-child(5),
#menu-icon span:nth-child(6) { top: 25px; }
#menu-icon.open span:nth-child(1),
#menu-icon.open span:nth-child(6) {
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
#menu-icon.open span:nth-child(2),
#menu-icon.open span:nth-child(5) {
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg);
}
#menu-icon.open span:nth-child(1) {
left: 5px;
top: 8px;
}
#menu-icon.open span:nth-child(2) {
left: calc(50% - 5px);
top: 8px;
}
#menu-icon.open span:nth-child(3) {
left: -50%;
opacity: 0;
}
#menu-icon.open span:nth-child(4) {
left: 100%;
opacity: 0;
}
#menu-icon.open span:nth-child(5) {
left: 5px;
top: 21px;
}
#menu-icon.open span:nth-child(6) {
left: calc(50% - 5px);
top: 21px;
}
/* MENU STYLES */
ul#menu,
#menu ul {
list-style-type: none;
padding: 0;
margin: 0;
}
#menu {
background: #222222;
width: 400px;
position: fixed;
top: 0;
bottom: 0;
left: -400px;
z-index: 4;
}
#menu li { position: relative; }
#menu.open { left: 0; }
#menu a {
display: block;
padding: 15px;
text-decoration: none;
color: #929292;
}
#menu a:hover { color: white; }
#menu > .parent > ul {
position: fixed;
top: 0;
bottom: 0;
left: -100%;
width: 355px;
}
#menu > .parent > ul > .parent > ul {
position: fixed;
top: 0;
bottom: 0;
left: -100%;
width: 310px;
}
#menu > .parent.open > ul {
left: 0;
background: #333333;
}
#menu > .parent.open > ul > .parent.open > ul {
left: 0;
background: #444444;
}
.submenu-toggle {
position: absolute;
right: 0px;
top: 0px;
cursor: pointer;
width: 45px;
height: 45px;
text-indent: -5000px;
overflow: hidden;
}
.submenu-toggle.open {
background: rgba(255,255,255,.1);
height: 100%;
z-index: 5000;
top: 0;
}
.submenu-toggle:before,
.submenu-toggle:after { -webkit-transition: .5s ease-in-out; }
.submenu-toggle:before {
content: '';
display: block;
position: absolute;
height: 16px;
width: 16px;
top: 12px;
right: 15px;
border-top: 5px solid #929292;
border-right: 5px solid #929292;
-webkit-transform: rotate(45deg);
}
.submenu-toggle:after {
content: '';
display: block;
position: absolute;
height: 16px;
width: 16px;
top: 12px;
left: 50px;
border-top: 5px solid #929292;
border-right: 5px solid #929292;
-webkit-transform: rotate(-135deg);
}
.submenu-toggle:hover:before,
.submenu-toggle:hover:after { border-color: white; }
.submenu-toggle.open:before { right: 23px; }
.submenu-toggle.open:after { left: 23px; }
#menu-overlay {
position: fixed;
width: 100%;
background: red;
top: 55px;
bottom: 0;
left: 0;
z-index: 0;
background: rgba(255,255,255,.0);
}
#menu-overlay.open {
z-index: 3;
background: rgba(255,255,255,.9);
}
6. Include the latest version of jQuery javascript library at the bottom of your page.
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
7. The jQuery script to enable the off-canvas menu.
$(document).ready(function(){
// NAVIGATION MENU
// menu icon states, opening main nav
$('#menu-icon').click(function(){
$(this).toggleClass('open');
$('#menu,#menu-toggle,#page-content,#menu-overlay').toggleClass('open');
$('#menu li,.submenu-toggle').removeClass('open');
});
// clicking on overlay closes menu
$('#menu-overlay').click(function(){
$('*').removeClass('open');
});
// add child menu toggles and parent class
$('#menu li').has('ul').addClass('parent').prepend('<div class="submenu-toggle">open</div>');
// toggle child menus
$('.submenu-toggle').click(function(){
var currentToggle=$(this);
currentToggle.parent().toggleClass('open');
currentToggle.toggleClass('open');
});
});
This awesome jQuery plugin is developed by designcouch. For more Advanced Usages, please check the demo page or visit the official website.











