Based on https://dribbble.com/shots/2776607-menu-transition
A Pen by Ruslan Pivovarov on CodePen.
| <div class='container'> | |
| <div class='burger'> | |
| <div class='burger__line-top'></div> | |
| <div class='burger__line-mid'></div> | |
| <div class='burger__menu'> | |
| <p>MENU</p> | |
| </div> | |
| </div> | |
| <div class='stuff'><a href='http://codepen.io/mrspok407/' class='pens' target="_blank">Check out my other pens</a><a href="https://twitter.com/mrspok407" target="_blank"><i class="fa fa-twitter" aria-hidden="true"></i></a></div> | |
| </div> | 
| $(document).ready(function() { | |
| var $burger = $('.burger'), | |
| $topLine = $('.burger__line-top'), | |
| $midLine = $('.burger__line-mid'), | |
| $menuLine = $('.burger__menu'), | |
| anim = false; | |
| var changeClasses = { | |
| addActive: function() { | |
| for (var i = 0; i <= 2; i++) { | |
| $burger.children().eq(i).removeClass('reverseLine' + (i + 1)).addClass('activeLine' + (i + 1)); | |
| } | |
| }, | |
| addReverse: function() { | |
| for (var i = 0; i <= 2; i++) { | |
| $burger.children().eq(i).removeClass('activeLine' + (i + 1)).addClass('reverseLine' + (i + 1)); | |
| } | |
| } | |
| } | |
| var timeouts = { | |
| initial: function(child, Y, rot, scale) { | |
| $burger.children().eq(child).css('transform', 'translateY(' + Y + 'px) rotate(' + rot + 'deg) scale(' + scale + ',1)'); | |
| }, | |
| afterActive: function() { | |
| // ES6 | |
| setTimeout(()=> { | |
| this.initial(0, 12, 45, 1.40); | |
| this.initial(1, -12, -45, 1.40); | |
| this.initial(2, 35, 0, 1); | |
| $burger.children().eq(2).css('opacity', '0'); | |
| anim = true; | |
| }, 1300); | |
| // With bind() | |
| // setTimeout(function() { | |
| // this.initial(0, 12, 45, 1.40); | |
| // this.initial(1, -12, -45, 1.40); | |
| // this.initial(2, 35, 0, 1); | |
| // $burger.children().eq(2).css('opacity', '0'); | |
| // anim = true; | |
| // }.bind(this), 1300); | |
| }, | |
| beforeReverse: function() { | |
| setTimeout(()=> { | |
| for (var i = 0; i <= 2; i++) { | |
| this.initial(i, 0, 0, 1); | |
| } | |
| $burger.children().eq(2).css('opacity', '1'); | |
| anim = false; | |
| }, 1300); | |
| } | |
| } | |
| $burger.on('click', function() { | |
| if (!anim) { | |
| changeClasses.addActive(); | |
| timeouts.afterActive(); | |
| } else if (anim) { | |
| changeClasses.addReverse(); | |
| timeouts.beforeReverse(); | |
| } | |
| }); | |
| }); | 
| <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> | 
| *, | |
| *:after, | |
| *:before { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| .stuff { | |
| position: absolute; | |
| bottom: 30px; | |
| width: 100%; | |
| text-align: center; | |
| .pens { | |
| margin-right: 20px; | |
| text-decoration: none; | |
| font-size: 20px; | |
| font-family: 'Open Sans', sans serif; | |
| color: #f2f2f2; | |
| &:hover { | |
| text-decoration: underline; | |
| } | |
| } | |
| .fa-twitter { | |
| position: relative; | |
| top: 8px; | |
| color: #1DA1F2; | |
| font-size: 50px; | |
| } | |
| } | |
| .container { | |
| width: 100%; | |
| height: 100vh; | |
| background-color: #FF6100; | |
| } | |
| .activeLine1 { | |
| transform-origin: left center; | |
| animation: activeTop 1.3s forwards; | |
| @keyframes activeTop { | |
| 20% { | |
| transform: translateY(-6px) rotate(0deg) | |
| } | |
| 40% { | |
| transform: translateY(15px) rotate(48deg) scale(1.40, 1) | |
| } | |
| 60% { | |
| transform: translateY(7px) rotate(42deg) scale(1.40, 1) | |
| } | |
| 100% { | |
| transform: translateY(12px) rotate(45deg) scale(1.40, 1) | |
| } | |
| } | |
| } | |
| .activeLine2 { | |
| transform-origin: right center; | |
| animation: activeMid 1.3s forwards; | |
| @keyframes activeMid { | |
| 20% { | |
| transform: translateY(-8px) rotate(0deg) | |
| } | |
| 40% { | |
| transform: translateY(-3px) rotate(-45deg) scale(1.30, 1) | |
| } | |
| 60% { | |
| transform: translateY(-18px) rotate(-45deg) scale(1.40, 1) | |
| } | |
| 100% { | |
| transform: translateY(-12px) rotate(-45deg) scale(1.40, 1) | |
| } | |
| } | |
| } | |
| .activeLine3 { | |
| animation: activeMenu .5s forwards; | |
| @keyframes activeMenu { | |
| 40% { | |
| transform: translateY(-7px); | |
| opacity: 1 | |
| } | |
| 60% { | |
| transform: translateY(-7px); | |
| opacity: 1 | |
| } | |
| 70% { | |
| opacity: 1 | |
| } | |
| 100% { | |
| transform: translateY(35px); | |
| opacity: 0 | |
| } | |
| } | |
| } | |
| .reverseLine1 { | |
| transform-origin: left center; | |
| animation: reverseTop 1.5s forwards; | |
| @keyframes reverseTop { | |
| 15% { | |
| transform: translateY(3px) rotate(-3deg) scale(1, 1) | |
| } | |
| 30% { | |
| transform: translateY(-14px) rotate(-10deg) scale(1, 1) | |
| } | |
| 40% { | |
| transform: translateY(4px) rotate(5deg) scale(1, 1) | |
| } | |
| 60% { | |
| transform: translateY(-2px) rotate(-3deg) scale(1, 1) | |
| } | |
| 100% { | |
| transform: translateY(0px) rotate(0deg) | |
| } | |
| } | |
| } | |
| .reverseLine2 { | |
| transform-origin: right center; | |
| animation: reverseMid 1.5s forwards; | |
| @keyframes reverseMid { | |
| 20% { | |
| transform: translateY(0px) rotate(13deg) scale(1, 1) | |
| } | |
| 40% { | |
| transform: translateY(-6px) rotate(-9deg) scale(1, 1) | |
| } | |
| 60% { | |
| transform: translateY(8px) rotate(6deg) scale(1, 1) | |
| } | |
| 100% { | |
| transform: translateY(0px) rotate(0deg) | |
| } | |
| } | |
| } | |
| .reverseLine3 { | |
| transform-origin: right center; | |
| animation: reverseMenu 1.65s forwards; | |
| @keyframes reverseMenu { | |
| 30% { | |
| transform: translateY(-20px) rotate(0deg) scale(1, 1); | |
| opacity: 1; | |
| } | |
| 40% { | |
| transform: translateY(9px) rotate(-10deg) scale(1, 1); | |
| opacity: 1; | |
| } | |
| 60% { | |
| transform: translateY(-5px) rotate(5deg) scale(1, 1); | |
| opacity: 1; | |
| } | |
| 100% { | |
| transform: translateY(0px) rotate(0deg); | |
| opacity: 1; | |
| } | |
| } | |
| } | |
| .burger { | |
| position: absolute; | |
| left: 0; | |
| right: 0; | |
| top: 0; | |
| bottom: 0; | |
| margin: auto; | |
| width: 71px; | |
| height: 71px; | |
| cursor: pointer; | |
| &__line-top { | |
| width: 100%; | |
| height: 8px; | |
| border-radius: 5px; | |
| background-color: #fff; | |
| box-shadow: 0 0 1px 0 #fff; | |
| } | |
| &__line-mid { | |
| margin-top: 17px; | |
| width: 100%; | |
| height: 8px; | |
| border-radius: 5px; | |
| background-color: #fff; | |
| box-shadow: 0 0 1px 0 #fff; | |
| } | |
| &__menu { | |
| margin-top: 10px; | |
| p { | |
| text-align: center; | |
| font: { | |
| size: 20px; | |
| family: 'Open Sans', sans-serif; | |
| weight: 900; | |
| } | |
| color: #fff; | |
| text-shadow: 0 0 1px #fff; | |
| letter-spacing: 3px; | |
| } | |
| } | |
| } | 
Based on https://dribbble.com/shots/2776607-menu-transition
A Pen by Ruslan Pivovarov on CodePen.