// ========================================================================================= // File Name: main-menu-mixin.scss // Description: Common mixin for menus, contain dark and light version scss. // ---------------------------------------------------------------------------------------- // Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template // Author: PIXINVENT // Author URL: http://www.themeforest.net/user/pixinvent //========================================================================================== // Header navbar content and brand expanded & collapsed stats // spacing and sizing. // ================================================ // Mixins for the menu and navbar position, margin and width change @mixin main-menu-width($menu-width) { margin-left: $menu-width; } @mixin menu-navbar-width($menu-width) { float: left; width: $menu-width; } // Mixins for the menu show hide based on width @mixin vertical-menu-transform-show($transform-width) { transform: translate3d($transform-width, 0, 0); backface-visibility: hidden; perspective: 1000; } @mixin vertical-menu-transform-hide() { transform: translate3d(0, 0, 0); } // Mixins for the sub menu arrow @mixin vertical-menu-has-sub-arrow($arrow-font-size) { &.has-sub { > a:after { content: ''; background-image: url(str-replace(str-replace($chevron-right, 'currentColor', $body-color), '#', '%23')); background-repeat: no-repeat; background-position: center; background-size: $arrow-font-size; height: $arrow-font-size; width: $arrow-font-size; display: inline-block; position: absolute; right: 20px; top: 14px; transform: rotate(0deg); transition: all 0.2s ease-out; } &.open:not(.menu-item-closing) { > a:after { transform: rotate(90deg); } } } } // Used for apps @mixin content-area-wrapper-height( $contentPadding: 0rem, $navbarHeight: 0rem, $footerHeight: 0rem, $floatingNavMargin: 0rem, $horizontalMenuHeight: 0rem, $spacingSides: 1, $horizontalLayout: false ) { height: calc( 100vh - calc( calc(#{$contentPadding} * #{$spacingSides}) + #{$navbarHeight} + #{$footerHeight} + #{$floatingNavMargin} + #{$horizontalMenuHeight} ) ); height: calc( var(--vh, 1vh) * 100 - calc( calc(#{$contentPadding} * #{$spacingSides}) + #{$navbarHeight} + #{$footerHeight} + #{$floatingNavMargin} + #{$horizontalMenuHeight} ) ); // responsive size height @if $horizontalLayout { @include media-breakpoint-down(xl) { height: calc( 100vh - calc(calc(calc(#{$contentPadding} - 0.8rem) * #{$spacingSides}) + #{$navbarHeight} + #{$footerHeight}) ); height: calc( var(--vh, 1vh) * 100 - calc(calc(calc(#{$contentPadding} - 0.8rem) * #{$spacingSides}) + #{$navbarHeight} + #{$footerHeight}) ); } } @else { @include media-breakpoint-down(sm) { height: calc( 100vh - calc( calc(calc(#{$contentPadding} * #{$spacingSides}) - calc(0.8rem * #{$spacingSides})) + #{$navbarHeight} + #{$footerHeight} + #{$floatingNavMargin} + #{$horizontalMenuHeight} ) ); height: calc( var(--vh, 1vh) * 100 - calc( calc(calc(#{$contentPadding} * #{$spacingSides}) - calc(0.8rem * #{$spacingSides})) + #{$navbarHeight} + #{$footerHeight} + #{$floatingNavMargin} + #{$horizontalMenuHeight} ) ); } } } // Light & Dark menu mixin // $theme-color : Menu text color // $theme-bg : Menu background color // ================================================ @mixin menu-theme($theme-color, $theme-bg) { $main-menu-top-open-color: darken($theme-color, 10%); $main-menu-top-open-hover-bg: darken($theme-bg, 6%); $main-menu-top-open-head-bg: darken($theme-bg, 4%); $main-menu-top-active-head-bg: darken($theme-bg, 4%); //$primary $main-menu-sub-color: $theme-color; $main-menu-sub-hover-color: lighten($theme-color, 4%); $main-menu-sub-open-color: $theme-color; color: $theme-color; background: $theme-bg; .navigation { background: $theme-bg; .navigation-header { color: lighten($theme-color, 21.5%); margin: calc(#{$content-padding} + 0.286rem) 0 0.8rem ($content-padding + 0.2rem); padding: 0; line-height: 1.5; letter-spacing: 0.01rem; span { font-weight: 500; } } li { &.has-sub { > a { transition: all 0.5s ease, background 0s, color 0s; } } a { color: darken($theme-color, 4.9%); padding: $menu-padding; line-height: 1.45; span.menu-sub-title { color: lighten($theme-color, 30%); } & > * { transition: transform 0.25s ease; } } } // Menu Item Hover Animation li.nav-item { a:hover > * { transition: transform 0.25s ease; transform: translateX(5px); } ul.menu-content { li { a:hover > * { transition: transform 0.25s ease; transform: translateX(5px); } } } } > li { > a { margin: 0 15px; .label { margin-top: 4px; margin-right: 5px; } i, svg { position: relative; top: 1px; } } > ul li { &:first-of-type { margin-top: 7px !important; } &:not(.has-sub) { margin: 0 15px; } &.has-sub { > a { margin: 0 15px; } > ul > li { margin: 0 15px; } } } &.open:not(.menu-item-closing), &.sidebar-group-active { > a { color: $main-menu-top-open-color; background: $main-menu-top-open-head-bg; border-radius: 6px; } } &:not(.open) { > ul { display: none; .active { background: transparent; box-shadow: none; } } } &.active { z-index: 1; > a { background: linear-gradient(118deg, rgba($primary, 1), rgba($primary, 0.7)); box-shadow: 0 0 10px 1px rgba($primary, 0.7); color: $white; font-weight: 400; border-radius: 4px; } } .active { background: $main-menu-top-open-hover-bg; > a { color: $primary; margin-bottom: 0; } .hover, :hover { > a { background: $main-menu-top-active-head-bg; } } } ul { padding: 0; margin: 0; li { color: $main-menu-sub-color; background: transparent; > a { padding: $menu-second-level-padding; } ul { a { padding: $menu-third-level-padding; } } } .has-sub { &:not(.open) { > ul { display: none; .active { background: transparent; box-shadow: none; } } } } .open, .sidebar-group-active { > a { color: $main-menu-sub-open-color; background: $main-menu-top-active-head-bg; border-radius: 6px; } //for 2rd level menu > ul { display: block; //for 3rd level menu .open { > ul { display: block; } } } } .hover, &:hover { > a { color: $main-menu-sub-hover-color; } } .active { background: linear-gradient(118deg, rgba($primary, 1), rgba($primary, 0.7)); box-shadow: 0 0 10px 1px rgba($primary, 0.7); border-radius: 4px; z-index: 1; > a { color: $white; } } } } } } // Menu content display mixin // $menu-expanded-width : Expanded menu width // $menu-collapsed-width: Collapsed menu width // ================================================ @mixin menu-content($menu-expanded-width, $menu-collapsed-width, $theme-color, $theme-bg) { .main-menu-content { > span.menu-title, a.menu-title { right: -($menu-expanded-width); width: $menu-expanded-width; font-weight: 600; color: #fff; text-transform: uppercase; text-align: left; background-color: $primary; border-color: $primary; padding: 13px 20px; } > ul.menu-content { left: $menu-collapsed-width; width: $menu-expanded-width; transition: visibility 0.25s, opacity 0.25s; box-shadow: 1px 0px 2px rgba($black, 0.1); border-bottom: 2px solid rgba($black, 0.2); border-left: 1px solid rgba($black, 0.02); li { white-space: nowrap; position: relative; a { display: block; padding: 8px 20px 8px 20px; } @include vertical-menu-has-sub-arrow(1rem); } } } }