mirror of https://github.com/ColorlibHQ/AdminLTE
575 lines
12 KiB
SCSS
575 lines
12 KiB
SCSS
//
|
|
// General: Mixins
|
|
//
|
|
|
|
|
|
// Cards Variant
|
|
@mixin cards-variant($name, $color) {
|
|
.card-#{$name} {
|
|
&:not(.card-outline) {
|
|
> .card-header {
|
|
background-color: $color;
|
|
border-bottom: 0;
|
|
|
|
&,
|
|
a {
|
|
color: color-yiq($color);
|
|
}
|
|
|
|
a.active {
|
|
color: color-yiq($white);
|
|
}
|
|
}
|
|
}
|
|
|
|
&.card-outline {
|
|
border-top: 3px solid $color;
|
|
|
|
.nav-item {
|
|
border-bottom: 0;
|
|
|
|
&:first-child .nav-link {
|
|
margin-left: -1px;
|
|
border-left: 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
&.card-outline-tabs {
|
|
border-top: 0;
|
|
|
|
> .card-header {
|
|
.nav-item {
|
|
&:first-child .nav-link {
|
|
margin-left: -1px;
|
|
border-left: 0;
|
|
}
|
|
}
|
|
|
|
a {
|
|
border-top: 3px solid transparent;
|
|
|
|
&:hover {
|
|
border-top: $nav-tabs-border-width solid $nav-tabs-border-color;
|
|
margin-top: 2px;
|
|
}
|
|
|
|
&.active {
|
|
&:hover {
|
|
margin-top: 0;
|
|
}
|
|
|
|
border-top: 3px solid $color;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.bg-#{$name},
|
|
.bg-gradient-#{$name},
|
|
.card-#{$name}:not(.card-outline) {
|
|
.btn-tool {
|
|
color: rgba(color-yiq($color), 0.8);
|
|
|
|
&:hover {
|
|
color: color-yiq($color);
|
|
}
|
|
}
|
|
}
|
|
|
|
.card.bg-#{$name},
|
|
.card.bg-gradient-#{$name} {
|
|
.bootstrap-datetimepicker-widget {
|
|
.table td,
|
|
.table th {
|
|
border: none;
|
|
}
|
|
|
|
table thead tr:first-child th:hover,
|
|
table td.day:hover,
|
|
table td.hour:hover,
|
|
table td.minute:hover,
|
|
table td.second:hover {
|
|
background: darken($color, 8%);
|
|
color: color-yiq($color);
|
|
}
|
|
|
|
table td.today::before {
|
|
border-bottom-color: color-yiq($color);
|
|
}
|
|
|
|
table td.active,
|
|
table td.active:hover {
|
|
background: lighten($color, 10%);
|
|
color: color-yiq($color);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Sidebar Color
|
|
@mixin sidebar-color($color) {
|
|
.nav-sidebar > .nav-item {
|
|
& > .nav-link.active {
|
|
background-color: $color;
|
|
color: color-yiq($color);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Sidebar Mini Breakpoints
|
|
@mixin sidebar-mini-breakpoint() {
|
|
// A fix for text overflow while transitioning from sidebar mini to full sidebar
|
|
.nav-sidebar,
|
|
.nav-sidebar > .nav-header,
|
|
.nav-sidebar .nav-link {
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
}
|
|
|
|
// When the sidebar is collapsed...
|
|
&.sidebar-collapse {
|
|
.d-hidden-mini {
|
|
display: none;
|
|
}
|
|
|
|
// Apply the new margins to the main content and footer
|
|
.content-wrapper,
|
|
.main-footer,
|
|
.main-header {
|
|
margin-left: $sidebar-mini-width !important;
|
|
}
|
|
|
|
// Make the sidebar headers
|
|
.nav-sidebar .nav-header {
|
|
display: none;
|
|
}
|
|
|
|
.nav-sidebar .nav-link p {
|
|
width: 0;
|
|
}
|
|
|
|
.sidebar .user-panel > .info,
|
|
.nav-sidebar .nav-link p,
|
|
.brand-text {
|
|
margin-left: -10px;
|
|
opacity: 0;
|
|
visibility: hidden;
|
|
}
|
|
|
|
.logo-xl {
|
|
opacity: 0;
|
|
visibility: hidden;
|
|
}
|
|
|
|
.logo-xs {
|
|
display: inline-block;
|
|
opacity: 1;
|
|
visibility: visible;
|
|
}
|
|
|
|
// Modify the sidebar to shrink instead of disappearing
|
|
.main-sidebar {
|
|
overflow-x: hidden;
|
|
|
|
&,
|
|
&::before {
|
|
// Don't go away! Just shrink
|
|
margin-left: 0;
|
|
width: $sidebar-mini-width;
|
|
}
|
|
|
|
.user-panel {
|
|
.image {
|
|
float: none;
|
|
}
|
|
}
|
|
|
|
&:hover,
|
|
&.sidebar-focused {
|
|
width: $sidebar-width;
|
|
|
|
.nav-sidebar.nav-child-indent .nav-treeview {
|
|
padding-left: 1rem;
|
|
}
|
|
|
|
.brand-link {
|
|
width: $sidebar-width;
|
|
}
|
|
|
|
.user-panel {
|
|
text-align: left;
|
|
|
|
.image {
|
|
float: left;
|
|
}
|
|
}
|
|
|
|
.user-panel > .info,
|
|
.nav-sidebar .nav-link p,
|
|
.brand-text,
|
|
.logo-xl {
|
|
display: inline-block;
|
|
margin-left: 0;
|
|
opacity: 1;
|
|
visibility: visible;
|
|
}
|
|
|
|
.nav-flat {
|
|
.nav-icon {
|
|
margin-left: 0;
|
|
}
|
|
|
|
.nav-treeview {
|
|
.nav-icon {
|
|
margin-left: -.2rem;
|
|
}
|
|
}
|
|
}
|
|
|
|
.logo-xs {
|
|
opacity: 0;
|
|
visibility: hidden;
|
|
}
|
|
|
|
.brand-image {
|
|
margin-right: .5rem;
|
|
}
|
|
|
|
// Make the sidebar links, menus, labels, badges
|
|
// and angle icons disappear
|
|
.sidebar-form,
|
|
.user-panel > .info {
|
|
display: block !important;
|
|
-webkit-transform: translateZ(0);
|
|
}
|
|
|
|
.nav-sidebar > .nav-item > .nav-link > span {
|
|
display: inline-block !important;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Make an element visible only when sidebar mini is active
|
|
.visible-sidebar-mini {
|
|
display: block !important;
|
|
}
|
|
|
|
&.layout-fixed {
|
|
.main-sidebar:hover {
|
|
.brand-link {
|
|
width: $sidebar-width;
|
|
}
|
|
}
|
|
|
|
.brand-link {
|
|
width: $sidebar-mini-width;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Navbar Variant
|
|
@mixin navbar-variant($color, $font-color: rgba(255, 255, 255, 0.8), $hover-color: #f6f6f6, $hover-bg: rgba(0, 0, 0, 0.1)) {
|
|
background-color: $color;
|
|
|
|
.nav > li > a {
|
|
color: $font-color;
|
|
}
|
|
|
|
.nav > li > a:hover,
|
|
.nav > li > a:active,
|
|
.nav > li > a:focus,
|
|
.nav .open > a,
|
|
.nav .open > a:hover,
|
|
.nav .open > a:focus,
|
|
.nav > .active > a {
|
|
background: $hover-bg;
|
|
color: $hover-color;
|
|
}
|
|
|
|
// Add color to the sidebar toggle button
|
|
.sidebar-toggle {
|
|
color: $font-color;
|
|
|
|
&:hover,
|
|
&:focus {
|
|
background: $hover-bg;
|
|
color: $hover-color;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Logo color Variant
|
|
@mixin logo-variant($bg-color, $color: #fff, $border-bottom-color: transparent, $border-bottom-width: 0) {
|
|
background-color: $bg-color;
|
|
border-bottom: $border-bottom-width solid $border-bottom-color;
|
|
color: $color;
|
|
|
|
&:hover,
|
|
&:focus {
|
|
background-color: darken($bg-color, 1%);
|
|
}
|
|
}
|
|
|
|
// Direct Chat Variant
|
|
@mixin direct-chat-variant($bg-color, $color: #fff) {
|
|
.right > .direct-chat-text {
|
|
background: $bg-color;
|
|
border-color: $bg-color;
|
|
color: color-yiq($bg-color);
|
|
|
|
&::after,
|
|
&::before {
|
|
border-left-color: $bg-color;
|
|
}
|
|
}
|
|
|
|
@each $name, $color in $theme-colors {
|
|
&.bg-#{$name},
|
|
&.bg-gradient-#{$name} {
|
|
.direct-chat-timestamp {
|
|
@if (color-yiq($color) == $yiq-text-dark) {
|
|
color: lighten(color-yiq($color), 10%);
|
|
} @else {
|
|
color: darken(color-yiq($color), 20%);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@each $name, $color in $colors {
|
|
&.bg-#{$name},
|
|
&.bg-gradient-#{$name} {
|
|
.direct-chat-timestamp {
|
|
@if (color-yiq($color) == $yiq-text-dark) {
|
|
color: lighten(color-yiq($color), 10%);
|
|
} @else {
|
|
color: darken(color-yiq($color), 20%);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Background Variant
|
|
@mixin background-variant($name, $color) {
|
|
.bg-#{$name} {
|
|
background-color: #{$color} !important;
|
|
|
|
&,
|
|
> a {
|
|
color: color-yiq($color) !important;
|
|
}
|
|
|
|
&.btn {
|
|
&:hover {
|
|
border-color: darken($color, 10%);
|
|
color: darken(color-yiq($color), 7.5%);
|
|
}
|
|
|
|
&:not(:disabled):not(.disabled):active,
|
|
&:not(:disabled):not(.disabled).active,
|
|
&:active,
|
|
&.active {
|
|
background-color: darken($color, 10%) !important;
|
|
border-color: darken($color, 12.5%);
|
|
color: color-yiq(darken($color, 10%));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Background Gradient Variant
|
|
@mixin background-gradient-variant($name, $color) {
|
|
.bg-gradient-#{$name} {
|
|
@include bg-gradient-variant('&', $color);
|
|
color: color-yiq($color);
|
|
|
|
&.btn {
|
|
&.disabled,
|
|
&:disabled,
|
|
&:not(:disabled):not(.disabled):active,
|
|
&:not(:disabled):not(.disabled).active,
|
|
.show > &.dropdown-toggle {
|
|
background-image: none !important;
|
|
}
|
|
|
|
&:hover {
|
|
@include bg-gradient-variant('&', darken($color, 7.5%));
|
|
border-color: darken($color, 10%);
|
|
color: darken(color-yiq($color), 7.5%);
|
|
}
|
|
|
|
&:not(:disabled):not(.disabled):active,
|
|
&:not(:disabled):not(.disabled).active,
|
|
&:active,
|
|
&.active {
|
|
@include bg-gradient-variant('&', darken($color, 10%));
|
|
border-color: darken($color, 12.5%);
|
|
color: color-yiq(darken($color, 10%));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Custom Switch Variant
|
|
@mixin custom-switch-variant($name, $color) {
|
|
&.custom-switch-off-#{$name} {
|
|
& .custom-control-input ~ .custom-control-label::before {
|
|
background: #{$color};
|
|
border-color: darken($color, 20%);
|
|
}
|
|
|
|
& .custom-control-input:focus ~ .custom-control-label::before {
|
|
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
|
|
}
|
|
|
|
& .custom-control-input ~ .custom-control-label::after {
|
|
background: darken($color, 25%);
|
|
}
|
|
}
|
|
|
|
&.custom-switch-on-#{$name} {
|
|
& .custom-control-input:checked ~ .custom-control-label::before {
|
|
background: #{$color};
|
|
border-color: darken($color, 20%);
|
|
}
|
|
|
|
& .custom-control-input:checked:focus ~ .custom-control-label::before {
|
|
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
|
|
}
|
|
|
|
& .custom-control-input:checked ~ .custom-control-label::after {
|
|
background: lighten($color, 30%);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Custom Range Variant
|
|
@mixin custom-range-variant($name, $color) {
|
|
&.custom-range-#{$name} {
|
|
&:focus {
|
|
outline: none;
|
|
|
|
&::-webkit-slider-thumb {
|
|
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
|
|
}
|
|
|
|
&::-moz-range-thumb {
|
|
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
|
|
}
|
|
|
|
&::-ms-thumb {
|
|
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
|
|
}
|
|
}
|
|
|
|
&::-webkit-slider-thumb {
|
|
background-color: $color;
|
|
|
|
&:active {
|
|
background-color: lighten($color, 35%);
|
|
}
|
|
}
|
|
|
|
&::-moz-range-thumb {
|
|
background-color: $color;
|
|
|
|
&:active {
|
|
background-color: lighten($color, 35%);
|
|
}
|
|
}
|
|
|
|
&::-ms-thumb {
|
|
background-color: $color;
|
|
|
|
&:active {
|
|
background-color: lighten($color, 35%);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Toast Variant
|
|
@mixin toast-variant($name, $color) {
|
|
&.bg-#{$name} {
|
|
background: rgba($color, .9) !important;
|
|
@if (color-yiq($color) == $yiq-text-light) {
|
|
|
|
.close {
|
|
color: color-yiq($color);
|
|
text-shadow: 0 1px 0 #000;
|
|
}
|
|
}
|
|
|
|
.toast-header {
|
|
background: rgba($color, .85);
|
|
color: color-yiq($color);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Accent Variant
|
|
@mixin accent-variant($name, $color) {
|
|
&.accent-#{$name} {
|
|
$link-color: $color;
|
|
$link-hover-color: darken($color, 15%);
|
|
$pagination-active-bg: $color;
|
|
$pagination-active-border-color: $color;
|
|
|
|
a {
|
|
color: $link-color;
|
|
|
|
@include hover {
|
|
color: $link-hover-color;
|
|
}
|
|
}
|
|
|
|
.page-item {
|
|
&.active .page-link {
|
|
background-color: $pagination-active-bg;
|
|
border-color: $pagination-active-border-color;
|
|
}
|
|
|
|
&.disabled .page-link {
|
|
background-color: $pagination-disabled-bg;
|
|
border-color: $pagination-disabled-border-color;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ETC
|
|
@mixin translate($x, $y) {
|
|
transform: translate($x, $y);
|
|
}
|
|
|
|
// Different radius each side
|
|
@mixin border-radius-sides($top-left, $top-right, $bottom-left, $bottom-right) {
|
|
border-radius: $top-left $top-right $bottom-left $bottom-right;
|
|
}
|
|
|
|
@mixin calc($property, $expression) {
|
|
#{$property}: calc(#{$expression});
|
|
}
|
|
|
|
@mixin rotate($value) {
|
|
transform: rotate($value);
|
|
}
|
|
|
|
@mixin animation($animation) {
|
|
animation: $animation;
|
|
}
|
|
|
|
// Gradient background
|
|
@mixin gradient($color: #F5F5F5, $start: #EEE, $stop: #FFF) {
|
|
background: $color;
|
|
background: -webkit-gradient(linear, left bottom, left top, color-stop(0, $start), color-stop(1, $stop));
|
|
background: -ms-linear-gradient(bottom, $start, $stop);
|
|
background: -moz-linear-gradient(center bottom, $start 0%, $stop 100%);
|
|
background: -o-linear-gradient($stop, $start);
|
|
}
|
|
|