Let’s say you need a burger button to toggle your primary menu which as the class primary-menu
The HTML markup
<span class="menu-toggle" data-toggle=".primary-menu"> <span class="menu-toggle-lines"></span> </span> <nav class="primary-menu"> .... your menu items .... </nav>
The CSS you need is the following:
$space: 10px;
$width: 30px;
$lines_height: 4px;
$width_small: 25px;
$width_smaller: 15px;
.menu-toggle {
width: $width;
height: $width;
position: absolute;
display: block;
top: 15px;
right: 15px;
z-index: 999;
cursor: pointer;
&:hover {
.menu-toggle-lines {
width: $width_small;
}
.menu-toggle-lines:before,
.menu-toggle-lines:after {
width: $width_smaller;
margin-left: -1 * $width_smaller / 2;
}
}
&.active {
.menu-toggle-lines {
background-color: rgba(0, 0, 0, 0.0);
transition-delay: 0.2s;
&:before {
margin-top: 0;
transform: rotate(45deg);
transition-delay: 0s, 0.2s;
}
&:after {
margin-top: 0;
transform: rotate(-45deg);
transition-delay: 0s, 0.2s;
}
}
}
}
.menu-toggle-lines {
height: $lines_height;
background-color: $c_white;
display: block;
position: relative;
top: 50%;
transform: translateY(-50%);
width: $width;
margin: 0 auto;
transition-property: margin, transform, width;
transition-duration: 0s;
transition-delay: 0.2s;
transition: width 1s;
&:before,
&:after {
position: absolute;
z-index: 10;
content: '';
width: $width;
height: $lines_height;
background-color: $c_white;
display: block;
left: 50%;
margin-left: -1 * $width/2;
transition-property: margin, transform, width;
transition-duration: 0.2s;
transition-delay: 0.2s, 0s;
}
&:before {
margin-top: -1 * $space;
}
&:after {
margin-top: $space;
}
}and the JS you need:
$('.menu-toggle').on('click', (e) => {
$(e.currentTarget).toggleClass('active');
$($(e.currentTarget).data('toggle')).toggleClass('active');
});
See example in codepen http://codepen.io/rizopoulos/pen/EyQRQz