Skip to content

Instantly share code, notes, and snippets.

@caputomarcos
Created July 10, 2022 04:33
Show Gist options
  • Save caputomarcos/4cd11aba67099e44898e4c0e0fc9faf9 to your computer and use it in GitHub Desktop.
Save caputomarcos/4cd11aba67099e44898e4c0e0fc9faf9 to your computer and use it in GitHub Desktop.
Rounded Hexagon Menu
ul.menu
li.active
a.menu-handle
.menu-handle-container
.menu-handle-content
i.menu-handle-hamburger ☰
strong.menu-handle-icon
i.fa.fa-home
ul.sub-menu
li.menu-item
div
div
i.fa.fa-file-alt
strong Summary
li.menu-item
div
div
i.fa.fa-user
strong Account Profile
li.menu-item
div
.color-
i.fa.fa-wrench
strong Integration
li.menu-item
div
div
i.fa.fa-inbox
strong Messages Archives
li.menu-item
div
div
i.fa.fa-file-pdf
strong Files
li.menu-item
div
div
i.fa.fa-users
strong Team Directory
li.menu-item
div
div
i.fa.fa-chart-bar
strong Statistics
li.menu-item
div
div
i.fa.fa-magic
strong Customize
li.menu-item
div
div
i.fa.fa-cogs
strong Team Settings
$('.menu>li').on('click', this.toggleClass('active'));
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
@mixin colorize($color) {
&:hover, &:focus, &.active {
> div, > div:before, >div:after {
@if hue($color) > 20 {
background: $color;
}
}
> div > div > strong {
@if hue($color) > 20 {
color: white;
}
@else {
color: invert($color);
}
}
}
> div > div {
-webkit-transition: color 0s;
transition: color 0s;
color: $color;
}
}
@mixin hexagon($height, $background-color:#ccc, $color:#000, $border-color:none) {
-webkit-transition: all cubic-bezier(1,-0.08,.57,1) 0.3s;
transition: all cubic-bezier(1,-0.08,.57,1) 0.3s;
width: calc(#{$height} * 0.63);
height: $height;
display: inline-block;
vertical-align: middle;
padding: 0 calc(#{$height} * 0.26);
position: relative;
> div {
-webkit-transition: all cubic-bezier(1,-0.08,.57,1) 0.3s;
transition: all cubic-bezier(1,-0.08,.57,1) 0.3s;
height: 100%;
background: $background-color;
position: relative;
border-radius: calc(#{$height} * 0.1);
@if variable-exists(border-color) {
border: solid 1px $border-color;
}
&:before, &:after {
-webkit-transition: all cubic-bezier(1,-0.08,.57,1) 0.3s;
transition: all cubic-bezier(1,-0.08,.57,1) 0.3s;
content: "";
position: absolute;
top: calc(#{$height} * 0.08);
background: $background-color;
width: calc(#{$height} * 0.85);
height: calc(#{$height} * 0.85);
border-radius: calc(#{$height} * 0.1);
@if variable-exists(border-color) {
box-shadow: inset 2px 2px 0px $border-color;
}
z-index: -1;
}
&:before {
left: calc(#{$height} / -2.557);
right: initial;
-webkit-transform: matrix(0.355, -0.583, 0.365, 0.583, 0, 0);
-ms-transform: matrix(0.355, -0.583, 0.365, 0.583, 0, 0);
transform: matrix(0.355, -0.583, 0.365, 0.583, 0, 0);
}
&:after {
left: initial;
right: calc(#{$height} / -2.557);
-webkit-transform: matrix(-0.355, 0.583, -0.365, -0.583, 0, 0);
-ms-transform: matrix(-0.355, 0.583, -0.365, -0.583, 0, 0);
transform: matrix(-0.355, 0.583, -0.365, -0.583, 0, 0);
}
> div {
-webkit-transition: all cubic-bezier(1,-0.08,.57,1) 0.3s;
transition: all cubic-bezier(1,-0.08,.57,1) 0.3s;
height: 100%;
position: relative;
left: calc(#{$height} * -0.28);
width: 113%;
min-width: calc(#{$height} * 1.17);
line-height: $height;
text-align: center;
font-family: Lato,Roboto,appleLogo,Trebuchet MS;
font-weight: bold;
overflow: hidden;
> i {
display: inline-block;
-webkit-transition: all 0s;
transition: all 0s;
opacity: 1;
width: 100%;
font-size: calc(#{$height} * 0.5);
height: 100%;
vertical-align: middle;
line-height: $height;
}
> strong {
-webkit-transition: opacity 0.5s;
transition: opacity 0.5s;
opacity: 0;
line-height: normal;
font-size: calc(#{$height} / 3);
display: inline-block;
vertical-align: middle;
}
}
}
}
$color: #639cf5 #7bc180 #ffcf16 #9d7ca9 #639cf5 #da7a7b #7bc180 #ffcf16 #ffffff;
html, body {
width: 100%;
height: 100%;
}
body {
background: #518E8C;
margin: 0;
font-size: 0;
display: flex;
align-items: center;
justify-content: center;
transform: scale(1.5);
overflow: hidden;
}
.menu {
display: inline-block;
position: relative;
transform: scale(1);
min-width: 400px;
> li {
-webkit-transition: width 1.8s;
transition: width 1.8s;
display: inline-block;
white-space: nowrap;
min-width: 117px;
width: 0%;
overflow: hidden;
&:hover, &:focus, &.active {
-webkit-transition: width 0.2s;
transition: width 0.2s;
width: 100%;
.menu-handle {
> .menu-handle-container {
&, > &:before, > &:after {
background: darken(#aaa, 20%);
}
}
> .menu-handle-container > .menu-handle-content > .menu-handle-hamburger {
opacity: 0;
}
> .menu-handle-container > .menu-handle-content > .menu-handle-icon {
opacity: 1;
cursor: pointer;
}
&:hover, &:focus, &.active {
+ .sub-menu .menu-item {
opacity: 1;
}
}
}
.menu-item {
opacity: 1;
}
}
.menu-handle {
@include hexagon(100px, #aaa);
cursor: default;
margin-right: 2px;
> .menu-handle-container > .menu-handle-content {
transition: all 0.3s;
font-size: 55px;
color: black;
top: -6px;
white-space: nowrap;
}
> .menu-handle-container > .menu-handle-content > .menu-handle-hamburger {
transition: all cubic-bezier(1, -0.08, .57, 1) 0.3s;
opacity: 1;
font-style: initial;
left: 1px;
position: absolute;
top: 5px;
}
> .menu-handle-container > .menu-handle-content > .menu-handle-icon {
-webkit-transition: all cubic-bezier(1, -0.08, .57, 1) 0.3s;
transition: all cubic-bezier(1, -0.08, .57, 1) 0.3s;
opacity: 0;
color: white;
font-size: 58px;
left: 1px;
position: absolute;
top: 20px;
width: 100%;
height: 100%;
}
}
.sub-menu {
display: inline-block;
padding-left: 0px;
}
.menu-item {
@include hexagon(50px);
-webkit-transition: all 0.3s;
transition: all 0.3s;
opacity: 0;
font-size: 12px;
display: inline-block;
&:hover, &:focus, &.active {
width: 200px;
cursor: pointer;
> div > div > i {
opacity: 0;
width: 0;
}
> div > div > strong {
-webkit-transition: opacity 0.8s;
transition: opacity 0.8s;
position: relative;
opacity: 1;
left: -2%;
}
}
&:nth-child(3n+1) {
top: -26px;
left: -12px;
margin-right: -25px;
&:hover, &:focus, &.active {
+ .menu-item {
left: -212px;
}
}
}
&:nth-child(3n+2) {
left: -44px;
top: 28px;
margin-right: -62px;
}
&:nth-child(3n+3) {
top: 0;
left: 9px;
margin-right: 11px;
}
$delay: 0.1s;
$transition-delay: 9 * $delay;
$n: 1;
@each $i in $color {
&:nth-child(#{$n}) {
@include colorize($i);
$tmp: $transition-delay;
$transition-delay: $tmp - $delay;
-webkit-transition: opacity $transition-delay, width 0.4s, left 0.4s;
transition: opacity $transition-delay, width 0.4s, left 0.4s;
}
$n: $n+1;
}
}
$delay: 0.2s;
$transition-delay-hover: 0s;
$n: 1;
@each $i in $color {
&:hover, &:focus, &.active {
.menu-item:nth-child(#{$n}) {
$tmp: $transition-delay-hover;
$transition-delay-hover: $tmp + $delay;
-webkit-transition: opacity $transition-delay-hover, width 0.4s, left 0.4s;
transition: opacity $transition-delay-hover, width 0.4s, left 0.4s;
}
$n: $n+1;
}
}
}
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment