Android's Material Design hamburger animation built in CSS (with a sprinkle of JS).
A Pen by Chris Wheatley on CodePen.
<section class="wrapper"> | |
<section class="material-design-hamburger"> | |
<button class="material-design-hamburger__icon"> | |
<span class="material-design-hamburger__layer"></span> | |
</button> | |
</section> | |
<section class="menu menu--off"> | |
<div>Android's Material Design Hamburger Animation</div> | |
<div>Adapted for the web by <a href="https://swirlycheetah.com" target="_blank">Chris Wheatley</a></div> | |
<div><a href="https://github.com/swirlycheetah/material-design-hamburger" target="_blank">Available on GitHub</a></div> | |
<div><a href="https://twitter.com/swirlycheetah" target="_blank">Follow me on Twitter @swirlycheetah</a></div> | |
</section> | |
</section> |
Android's Material Design hamburger animation built in CSS (with a sprinkle of JS).
A Pen by Chris Wheatley on CodePen.
(function() { | |
'use strict'; | |
document.querySelector('.material-design-hamburger__icon').addEventListener( | |
'click', | |
function() { | |
var child; | |
document.body.classList.toggle('background--blur'); | |
this.parentNode.nextElementSibling.classList.toggle('menu--on'); | |
child = this.childNodes[1].classList; | |
if (child.contains('material-design-hamburger__icon--to-arrow')) { | |
child.remove('material-design-hamburger__icon--to-arrow'); | |
child.add('material-design-hamburger__icon--from-arrow'); | |
} else { | |
child.remove('material-design-hamburger__icon--from-arrow'); | |
child.add('material-design-hamburger__icon--to-arrow'); | |
} | |
}); | |
})(); |
@import url(http://fonts.googleapis.com/css?family=Roboto); | |
body { | |
background: #009688; | |
} | |
.wrapper { | |
height: 100%; | |
transition: all 300ms ease-in-out; | |
margin: 1em 0; | |
padding: 0; | |
} | |
.background--blur { | |
background: #004d40; | |
} | |
.menu { | |
font-size:2em; | |
font-family: 'Roboto', sans-serif; | |
color: #333; | |
} | |
.menu div { | |
margin: 1em; | |
padding-bottom: 1em; | |
border-bottom: 1px solid #ccc; | |
} | |
.menu a { | |
text-decoration: none; | |
color: #3367d6; | |
} | |
.menu a:hover { | |
text-decoration: underline; | |
} | |
.menu div:last-child { | |
border: 0; | |
} | |
.menu--off { | |
position: absolute; | |
left: -50%; | |
width: 50%; | |
display: block; | |
background: #eee; | |
min-height: 600px; | |
height: 125%; | |
margin-top: 1em; | |
transition: all 300ms; | |
} | |
.menu--on { | |
left: 0; | |
box-shadow: 8px 8px 20px 0 rgba(0, 0, 0, 0.2); | |
transition: all 300ms; | |
} | |
.material-design-hamburger button { | |
display: block; | |
border: none; | |
background: none; | |
outline: 0; | |
} | |
.material-design-hamburger__icon { | |
padding: 3rem 1rem; | |
cursor: pointer; | |
} | |
.material-design-hamburger__layer { | |
display: block; | |
width: 100px; | |
height: 10px; | |
background: #eee; | |
position: relative; | |
animation-duration: 300ms; | |
animation-timing-function: ease-in-out; | |
} | |
.material-design-hamburger__layer:before, .material-design-hamburger__layer:after { | |
display: block; | |
width: inherit; | |
height: 10px; | |
position: absolute; | |
background: inherit; | |
left: 0; | |
content: ''; | |
animation-duration: 300ms; | |
animation-timing-function: ease-in-out; | |
} | |
.material-design-hamburger__layer:before { | |
bottom: 200%; | |
} | |
.material-design-hamburger__layer:after { | |
top: 200%; | |
} | |
.material-design-hamburger__icon--to-arrow { | |
animation-name: material-design-hamburger__icon--slide; | |
animation-fill-mode: forwards; | |
} | |
.material-design-hamburger__icon--to-arrow:before { | |
animation-name: material-design-hamburger__icon--slide-before; | |
animation-fill-mode: forwards; | |
} | |
.material-design-hamburger__icon--to-arrow:after { | |
animation-name: material-design-hamburger__icon--slide-after; | |
animation-fill-mode: forwards; | |
} | |
.material-design-hamburger__icon--from-arrow { | |
animation-name: material-design-hamburger__icon--slide-from; | |
} | |
.material-design-hamburger__icon--from-arrow:before { | |
animation-name: material-design-hamburger__icon--slide-before-from; | |
} | |
.material-design-hamburger__icon--from-arrow:after { | |
animation-name: material-design-hamburger__icon--slide-after-from; | |
} | |
@keyframes material-design-hamburger__icon--slide { | |
0% { | |
} | |
100% { | |
transform: rotate(180deg); | |
} | |
} | |
@keyframes material-design-hamburger__icon--slide-before { | |
0% { | |
} | |
100% { | |
transform: rotate(45deg); | |
margin: 3% 37%; | |
width: 75%; | |
} | |
} | |
@keyframes material-design-hamburger__icon--slide-after { | |
0% { | |
} | |
100% { | |
transform: rotate(-45deg); | |
margin: 3% 37%; | |
width: 75%; | |
} | |
} | |
@keyframes material-design-hamburger__icon--slide-from { | |
0% { | |
transform: rotate(-180deg); | |
} | |
100% { | |
} | |
} | |
@keyframes material-design-hamburger__icon--slide-before-from { | |
0% { | |
transform: rotate(45deg); | |
margin: 3% 37%; | |
width: 75%; | |
} | |
100% { | |
} | |
} | |
@keyframes material-design-hamburger__icon--slide-after-from { | |
0% { | |
transform: rotate(-45deg); | |
margin: 3% 37%; | |
width: 75%; | |
} | |
100% { | |
} | |
} |