@mixin underline-from-center() { display: inline-block; vertical-align: middle; transform: translateZ(0); backface-visibility: hidden; box-shadow: 0 0 1px transparent; position: relative; overflow: hidden; &:before { content: ''; position: absolute; z-index: -1; height: 2px; bottom: 0; left: 51%; right: 51%; background: $theme-color; transition-duration: 0.2s; transition-property: right, left; transition-timing-function: ease-out; } &.active, &:active, &:focus, &:hover { &:before { right: 0; left: 0; } } } @mixin mobile-menu-icon() { @keyframes clickfirst { 0% { transform: translateY(6px) rotate(0deg); } 100% { transform: translateY(0) rotate(45deg); } } @keyframes clickmid { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes clicklast { 0% { transform: translateY(-6px) rotate(0deg); } 100% { transform: translateY(0) rotate(-45deg); } } @keyframes outfirst { 0% { transform: translateY(0) rotate(-45deg); } 100% { transform: translateY(-6px) rotate(0deg); } } @keyframes outmid { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes outlast { 0% { transform: translateY(0) rotate(45deg); } 100% { transform: translateY(6px) rotate(0deg); } } span { position: absolute; left: calc((100% - 20px) / 2); top: calc((100% - 1px) / 2); width: 20px; height: 1px; background-color: $theme-color; &:nth-child(1) { transform: translateY(6px) rotate(0deg); } &:nth-child(3) { transform: translateY(-6px) rotate(0deg); } } &.icon-click { span:nth-child(1) { animation-duration: 0.5s; animation-fill-mode: both; animation-name: clickfirst; } span:nth-child(2) { animation-duration: 0.2s; animation-fill-mode: both; animation-name: clickmid; } span:nth-child(3) { animation-duration: 0.5s; animation-fill-mode: both; animation-name: clicklast; } } &.icon-out { span:nth-child(1) { animation-duration: 0.5s; animation-fill-mode: both; animation-name: outfirst; } span:nth-child(2) { animation-duration: 0.2s; animation-fill-mode: both; animation-name: outmid; } span:nth-child(3) { animation-duration: 0.5s; animation-fill-mode: both; animation-name: outlast; } } }