Skip to content

Instantly share code, notes, and snippets.

@SuperCipher
Created July 13, 2017 14:53
Show Gist options
  • Save SuperCipher/75715f226218262517360ea4612fb896 to your computer and use it in GitHub Desktop.
Save SuperCipher/75715f226218262517360ea4612fb896 to your computer and use it in GitHub Desktop.
Material Design Menu
<div class="material-menu-wrapper">
<div class="material-menu">
<div class="material-btn">
<div class="material-hamburger">
<div class="material-patty"></div>
<div class="material-patty"></div>
<div class="material-patty"></div>
</div>
</div>
<div class="material-content">
<nav>
<ul>
<li><a href="">Home</a></li>
<li><a href="">About</a></li>
<li><a href="">Work</a></li>
<li><a href="">Contact</a></li>
</ul>
</nav>
</div>
</div>
</div>
<main>
<p>Dynamically <span class="highlight">procrastinate</span> B2C users after installed base benefits.</p>
</main>

Material Design Menu

Material design inspired 'growing' menu? Not sure what to call it to be honest.

No jQuery used.

A Pen by Arjan Jassal on CodePen.

License.

var circle = document.querySelector('.material-btn');
var link = document.querySelector('.material-content').querySelectorAll('li');
var ham = document.querySelector('.material-hamburger');
var main = document.querySelector('main');
var win = window;
function openMenu(event) {
circle.classList.toggle('active');
ham.classList.toggle('material-close');
main.classList.toggle('active');
for (var i = 0; i < link.length; i++) {
link[i].classList.toggle('active');
}
event.preventDefault();
event.stopImmediatePropagation();
}
function closeMenu() {
if (circle.classList.contains('active')) {
circle.classList.remove('active');
for (var i = 0; i < link.length; i++) {
link[i].classList.toggle('active');
}
ham.classList.remove('material-close');
main.classList.remove('active');
}
}
circle.addEventListener('click', openMenu, false);
win.addEventListener('click', closeMenu, false);
* {
box-sizing: border-box;
}
body {
font-family: 'Roboto', 'Arial', sans-serif;
height: 100vh;
line-height: 1.3;
background: tomato;
overflow: hidden;
text-rendering: geometricPrecision;
-webkit-font-smoothing: antialiased;
}
.material-menu-wrapper {
position: absolute;
bottom: 0;
right: 0;
height: 100vh;
width: 40vw;
overflow: hidden;
}
.material-menu {
position: relative;
z-index: 1;
width: 100%;
height: 100%;
background: transparent;
}
.material-btn {
will-change: transform;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
position: absolute;
z-index: 1;
bottom: 20px;
right: 20px;
width: 75px;
height: 75px;
background: transparent;
cursor: pointer;
&.active {
&:before {
transform: scale(18);
@media (min-height: 800px) {
transform: scale(25);
}
}
}
&:active {
&:before {
opacity: 0.75;
}
}
&:before {
content: "";
position: absolute;
top: 0;
left: 0;
z-index: -1;
width: 75px;
height: 75px;
background: white;
border-radius: 50%;
box-shadow: 0 5px 10px rgba(black, 0.5);
cursor: pointer;
transform-origin: center 70%;
transform: scale(1);
transition: all 0.35s ease-out;
}
}
.material-content {
padding: 10% 15%;
position: absolute;
z-index: 3;
top: 0;
right: 0;
}
nav {
ul {
list-style-type: none;
padding: 0;
text-align: right;
}
li {
will-change: transform, opacity;
margin: 25px 0;
transform: translateY(100px);
opacity: 0;
transition: all 0.4s ease-out;
&.active {
transform: translateY(0);
opacity: 1;
}
}
@for $i from 1 through 4 {
li:nth-child(#{$i}) {
transition-delay: $i * .1s;
}
}
a {
text-decoration: none;
font-size: 5vw;
color: tomato;
font-weight: 300;
}
}
.material-hamburger {
transition: all .3s ease-out;
.material-patty {
will-change: transform, opacity;
width: 32px;
height: 3px;
margin: 0 0 6px 0;
background: lighten(black, 20);
opacity: 1;
transform: translate(0) rotate(0deg);
transition: all .2s ease-out;
&:last-child {
margin-bottom: 0;
}
}
&.material-close {
transform: rotate(-180deg);
.material-patty:nth-child(1) {
transform: translate(-10px, 4px) rotate(-45deg) scale(0.5, 1);
}
.material-patty:nth-child(3) {
transform: translate(-10px, -4px) rotate(45deg) scale(0.5, 1);
}
}
}
main {
will-change: transform, opacity;
width: 80vw;
height: 100vw;
padding: 10vw;
overflow: hidden;
transition: all .35s ease-out;
&.active {
opacity: 0;
transform: translate(-700px, 0px);
}
p {
color: white;
font-size: 4vw;
font-weight: 300;
.highlight {
background: white;
color: tomato;
font-size: 4vw;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment