Skip to content

Instantly share code, notes, and snippets.

@Poordeveloper
Created November 10, 2015 12:13
Show Gist options
  • Save Poordeveloper/1ce6583519cc6667e73e to your computer and use it in GitHub Desktop.
Save Poordeveloper/1ce6583519cc6667e73e to your computer and use it in GitHub Desktop.
Hamburger Animated Icon
button.ham
span.bar
span.bar
span.bar
$('button').on('click', function() {
var $btn = $(this);
if ($btn.hasClass('closed') || !$btn.hasClass('opened')) {
$btn.removeClass('closed');
setTimeout(function() {
// Little hack in order to restart CSS animations ...
$btn.addClass('opened');
}, 1);
} else if ($btn.hasClass('opened')) {
$btn.removeClass('opened');
setTimeout(function() {
// Little hack in order to restart CSS animations ...
$btn.addClass('closed');
}, 1);
}
});
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
// DOCUMENT
*
box-sizing: border-box
html, body
background: #31AA39
height: 100%
body
display: flex
justify-content: center
align-items: center
// .HAM
.ham
display: block
background: none
position: relative
min-width: 150px
min-height: 150px
padding: 0
border: 0
border-radius: 100%
outline: none
cursor: pointer
transition: all 250ms
&:before
content: ''
position: absolute
top: -9px
left: -9px
width: 100%
height: 100%
border: 9px solid #fff
border-radius: 100%
clip-path: polygon(100% 50%, 100% 50%, 100% 50%, 100% 50%, 50% 50%)
> .bar
display: block
background: #fff
position: absolute
left: 22px
width: 70%
height: 10px
border-radius: 6px
transition: all 350ms
&:first-child
top: 25%
transition-delay: 400ms
transform-origin: top right
&:nth-child(2)
top: 47%
transition-delay: 300ms
&:last-child
bottom: 25%
transition-delay: 400ms
transform-origin: bottom right
// .HAM.OPENED
.ham.opened
&:before
animation: open-close 400ms 300ms forwards ease-in
&:active
transform: scale(.85)
> .bar
transition-delay: 0ms
&:first-child
left: 5px
transform: rotate(-44deg)
&:nth-child(2)
left: 150px
width: 0%
&:last-child
bottom: 22%
left: 5px
transform: rotate(44deg)
// .HAM.CLOSED
.ham.closed
&:before
animation: open-close 400ms forwards reverse ease-out
// OPEN-CLOSE ANIMATION
@keyframes open-close
0%
clip-path: polygon(100% 50%, 100% 50%, 100% 50%, 100% 50%, 50% 50%)
25%
clip-path: polygon(100% 50%, 100% 0%, 50% 0%, 50% 0%, 50% 0%)
50%
clip-path: polygon(100% 50%, 100% 0%, 0% 0%, 0% 50%, 50% 50%)
75%
clip-path: polygon(100% 50%, 100% 0%, 0% 0%, 0% 100%, 50% 100%)
100%
clip-path: polygon(100% 50%, 100% 0%, 0% 0%, 0% 100%, 100% 100%)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment