- Overview
- Documents
Closing door menu where 2 sides of the menu come together offscreen to create the final menu. I’ve created 4 variations, 2 vertical and 2 horizontal menus, each with 2 different animations: normal and bounce.
Source: webdesigncrowd.com
1. INCLUDE JS FILE
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
2. HTML
This is the horizontal style. It has a left menu with text links, and a right part of the menu with icon links. Also the middle logo can also be a brand link.
<div class="menu">
<div class="left-menu">
<a class="menu-button" href="#"><i class="fa fa-times"></i>Close Menu</a>
<ul>
<li><a href="">Important Link 1</a></li>
<li><a href="">Important Link 2</a></li>
<li><a href="">Other Link</a></li>
<li><a href="">Social Media Link</a></li>
</ul>
<div class="circle"><a href="http://www.webdesigncrowd.com"><img src="http://www.webdesigncrowd.com/wp-content/themes/tanzaku/images/logo.png"></a></div>
</div>
<div class="right-preview">
<a href=""><img src="images/icon-book.png"></a>
<a href=""><img src="images/icon-clock.png"></a>
<a href=""><img src="images/icon-pencil.png"></a>
</div>
</div>
3. CSS
Here is the style for the horizontal menu. Basically it achieves the effect using transitions.
/* Closing Door Menu */
.menu {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: -1;
}
/* Horizontal */
.menu .left-menu {
width: 30%;
height: 100%;
position: absolute;
display: table;
border-right: 1px solid #444;
z-index: 1;
left: -50%;
background-color: #444;
-webkit-transition: .4s;
transition: .4s;
}
.menu .left-menu a.menu-button {
position: absolute;
left: 0;
right: 0;
top: 20px;
text-align: center;
font-size: 11px;
text-transform: uppercase;
}
.menu .left-menu a.menu-button i {
font-size: 28px;
margin: -3.5px 10px 0 0;
vertical-align: middle;
}
.menu .left-menu ul {
display: table-cell;
width: 100%;
vertical-align: middle;
text-align: left;
}
.menu .left-menu li {
font-size: 28px;
line-height: 30px;
margin: 10px;
}
.menu.in .left-menu { left: 0; }
.menu.bounce.in .left-menu {
-moz-animation-name:bounce-right;
-moz-animation-duration:.8s;
-moz-animation-fill-mode:backwards;
-webkit-animation-name:bounce-right;
-webkit-animation-duration:.8s;
-webkit-animation-fill-mode:backwards;
animation-name:bounce-right;
animation-duration:.8s;
animation-fill-mode:backwards;
}
.menu .circle {
height: 150px;
width: 150px;
border-radius: 50%;
background-color: #CCC;
position: absolute;
top: 50%;
right: 0;
margin-right: -75px;
margin-top: -75px;
}
.menu .circle a {
position: relative;
top: 50px;
margin: 0;
/* IE 8 */
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
/* IE 5-7 */
filter: alpha(opacity=80);
/* Netscape */
-moz-opacity: 0.8;
/* Safari 1.x */
-khtml-opacity: 0.8;
/* Good browsers */
opacity: 0.8;
}
.menu .right-preview {
width: 70%;
height: 100%;
position: absolute;
right: -70%;
background-color: #ffb9b5;
z-index: 0;
-webkit-transition: .4s;
transition: .4s;
}
.menu .right-preview a {
position: relative;
top: 50%;
margin-top: -64px;
height: 128px;
display: inline-block;
padding: 0 50px;
-webkit-transition: .2s;
transition: .2s;
}
.menu .right-preview a:hover {
top: 48%;
}
.menu.in .right-preview { right: 0; }
.menu.bounce.in .right-preview {
-moz-animation-name:bounce-left;
-moz-animation-duration:.8s;
-moz-animation-fill-mode:backwards;
-webkit-animation-name:bounce-left;
-webkit-animation-duration:.8s;
-webkit-animation-fill-mode:backwards;
animation-name:bounce-left;
animation-duration:.8s;
animation-fill-mode:backwards;
}
3. BOUNCE ANIMATION
Here is the keyframe animation for the horizontal bounce animation. It basically uses alternating ease-in, ease-out animations to bring the menu down and back up and down so it looks like it’s bouncing.
@-webkit-keyframes bounce-right {
0% { left:-30%; -webkit-animation-timing-function:ease-in; }
37% { left:0; -webkit-animation-timing-function:ease-out; }
55% { left:-7.5%; -webkit-animation-timing-function:ease-in; }
73% { left:0; -webkit-animation-timing-function:ease-out; }
82% { left:-2.1%; -webkit-animation-timing-function:ease-in; }
91% { left:0; -webkit-animation-timing-function:ease-out; }
96% { left:-0.6%; -webkit-animation-timing-function:ease-in; }
100% { left:0; }
}
@-moz-keyframes bounce-right {
0% { left:-30%; -moz-animation-timing-function:ease-in; }
37% { left:0; -moz-animation-timing-function:ease-out; }
55% { left:-7.5%; -moz-animation-timing-function:ease-in; }
73% { left:0; -moz-animation-timing-function:ease-out; }
82% { left:-2.1%; -moz-animation-timing-function:ease-in; }
91% { left:0; -moz-animation-timing-function:ease-out; }
96% { left:-0.6%; -moz-animation-timing-function:ease-in; }
100% { left:0; }
}
@keyframes bounce-right {
0% { left:-30%; -moz-animation-timing-function:ease-in; }
37% { left:0; -moz-animation-timing-function:ease-out; }
55% { left:-7.5%; -moz-animation-timing-function:ease-in; }
73% { left:0; -moz-animation-timing-function:ease-out; }
82% { left:-2.1%; -moz-animation-timing-function:ease-in; }
91% { left:0; -moz-animation-timing-function:ease-out; }
96% { left:-0.6%; -moz-animation-timing-function:ease-in; }
100% { left:0; }
}
/* left */
@-webkit-keyframes bounce-left {
0% { right:-70%; -webkit-animation-timing-function:ease-in; }
37% { right:0; -webkit-animation-timing-function:ease-out; }
55% { right:-17.5%; -webkit-animation-timing-function:ease-in; }
73% { right:0; -webkit-animation-timing-function:ease-out; }
82% { right:-4.9%; -webkit-animation-timing-function:ease-in; }
91% { right:0; -webkit-animation-timing-function:ease-out; }
96% { right:-1.4%; -webkit-animation-timing-function:ease-in; }
100% { right:0; }
}
@-moz-keyframes bounce-left {
0% { right:-70%; -moz-animation-timing-function:ease-in; }
37% { right:0; -moz-animation-timing-function:ease-out; }
55% { right:-17.5%; -moz-animation-timing-function:ease-in; }
73% { right:0; -moz-animation-timing-function:ease-out; }
82% { right:-4.9%; -moz-animation-timing-function:ease-in; }
91% { right:0; -moz-animation-timing-function:ease-out; }
96% { right:-1.4%; -moz-animation-timing-function:ease-in; }
100% { right:0; }
}
@keyframes bounce-left {
0% { right:-70%; -moz-animation-timing-function:ease-in; }
37% { right:0; -moz-animation-timing-function:ease-out; }
55% { right:-17.5%; -moz-animation-timing-function:ease-in; }
73% { right:0; -moz-animation-timing-function:ease-out; }
82% { right:-4.9%; -moz-animation-timing-function:ease-in; }
91% { right:0; -moz-animation-timing-function:ease-out; }
96% { right:-1.4%; -moz-animation-timing-function:ease-in; }
100% { right:0; }
}
4. JAVASCRIPT
(function($){
$(function(){
$('.menu-button').click(function (e){
e.preventDefault();
var menu = $('.menu');
if (menu.hasClass('in')) {
setTimeout(function (){
menu.css('z-index', '-1');
}, 400); // how long do you want the delay to be?
}
else {
menu.css('z-index', '1');
}
menu.toggleClass('in');
});
}); // end of document ready
})(jQuery); // end of jQuery name space
JS Tutorial
