Skip to content

Instantly share code, notes, and snippets.

@haimingpro
Created January 15, 2015 02:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haimingpro/73aaa081dddd2b8f7851 to your computer and use it in GitHub Desktop.
Save haimingpro/73aaa081dddd2b8f7851 to your computer and use it in GitHub Desktop.
Material Design Hamburger
<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>

Material Design Hamburger

Android's Material Design hamburger animation built in CSS (with a sprinkle of JS).

A Pen by Chris Wheatley on CodePen.

License.

(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% {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment