// Mixins to allow creation of additional custom drawer sizes when using the defaults at the same time // //---- // Example 1: creates a media responsive kitchen-sink-drawer that pairs with mdb-drawer-open-lg and allows for triggers mdb-drawer-open && mdb-drawer-closed // // Used with
// // .kitchen-sink-drawer:not(.mdb-drawer-closed) { // @each $breakpoint in (xs lg) { // // xs gives us the static marker class i.e. mdb-drawer-open && mdb-drawer-closed, while lg gives us a responsive open/overlay // @include mdb-drawer-x-closed(500px); // @include mdb-drawer-x-open-up(500px, $breakpoint); // } // // Create a responsive overlay at mdb-drawer-overlay-md - this specificity is required // @include mdb-drawer-x-overlay-down(md); // } //---- // Example 2: creates a NON-responsive kitchen-sink-drawer and allows for triggers mdb-drawer-open && mdb-drawer-closed // // Used with
// // .kitchen-sink-drawer-triggered:not(.mdb-drawer-closed) { // @include mdb-drawer-x-closed(500px); // closed by default, also can be triggered with mdb-drawer-closed // @include mdb-drawer-x-open(500px); // triggered with mdb-drawer-open // @include mdb-drawer-x-overlay(); // overlay by default, no other classes necessary // } @mixin mdb-drawer-x-closed($size) { @each $side in (left right) { &.mdb-drawer-fixed-#{$side} { > .mdb-layout-drawer { // position top: 0; #{$side}: 0; width: $size; height: 100%; @if $side == left { transform: translateX(-$size - 10px); // initial position of drawer (closed), way off screen } @else { transform: translateX($size + 10px); // initial position of drawer (closed), way off screen } } > .mdb-layout-content { margin-#{$side}: 0; } } } } @mixin mdb-drawer-y-closed($size) { @each $side in (top bottom) { &.mdb-drawer-fixed-#{$side} { > .mdb-layout-drawer { // position #{$side}: 0; left: 0; width: 100%; height: $size; @if $side == top { transform: translateY(-$size - 10px); // initial position of drawer (closed), way off screen } @else { transform: translateY($size + 10px); // initial position of drawer (closed), way off screen } } > .mdb-layout-content { margin-#{$side}: 0; } } } } @function mdb-drawer-breakpoint-name($breakpoint) { // e.g. &, &-sm, &-md, &-lg $name: "&-#{$breakpoint}"; @if $breakpoint == xs { $name: "&"; } @return $name; } @mixin mdb-drawer-x-open($size) { @each $side in (left right) { &.mdb-drawer-fixed-#{$side} { // Push - drawer will push the header and content (default behavior) &, &.mdb-drawer-push { > .mdb-layout-header { width: calc(100% - #{$size}); margin-#{$side}: $size; } > .mdb-layout-drawer { transform: translateX(0); } > .mdb-layout-content { margin-#{$side}: $size; } } } } } @mixin mdb-drawer-y-open($size) { @each $side in (top bottom) { &.mdb-drawer-fixed-#{$side} { // 1. Push - drawer will push the header or content > .mdb-layout-header { @if $side == top { // only add margin-top on a header when the drawer is at the top margin-#{$side}: $size; } } > .mdb-layout-drawer { transform: translateY(0); } > .mdb-layout-content { @if $side == bottom { // only add margin-bottom on content when the drawer is at the bottom margin-#{$side}: $size; } } } } } // breakpoint based open to a particular size @mixin mdb-drawer-x-open-up($size, $breakpoint) { // e.g. &, &-sm, &-md, &-lg $name: mdb-drawer-breakpoint-name($breakpoint); &.mdb-drawer-open { #{unquote($name)} { // mdb-drawer-open, mdb-drawer-open-sm, mdb-drawer-open-md, mdb-drawer-open-lg @if $breakpoint == xs { // mdb-drawer-open marker class (non-responsive) @include mdb-drawer-x-open($size); } @else { // responsive class @include media-breakpoint-up($breakpoint) { // mdb-drawer-fixed-(left and right) styles @include mdb-drawer-x-open($size); } } } } } // breakpoint based open to a particular size @mixin mdb-drawer-y-open-up($size, $breakpoint) { // e.g. &, &-sm, &-md, &-lg $name: mdb-drawer-breakpoint-name($breakpoint); &.mdb-drawer-open { #{unquote($name)} { // mdb-drawer-open, mdb-drawer-open-sm, mdb-drawer-open-md, mdb-drawer-open-lg @if $breakpoint == xs { // mdb-drawer-open marker class (non-responsive) @include mdb-drawer-y-open($size); } @else { // responsive class @include media-breakpoint-up($breakpoint) { // mdb-drawer-fixed-(left and right) styles @include mdb-drawer-y-open($size); } } } } } @mixin mdb-drawer-x-overlay() { @each $side in (left right) { &.mdb-drawer-fixed-#{$side} { > .mdb-layout-header, > .mdb-layout-content { width: 100%; margin-#{$side}: 0; overflow: hidden; } } } } @mixin mdb-drawer-y-overlay() { @each $side in (top bottom) { &.mdb-drawer-fixed-#{$side} { > .mdb-layout-header, > .mdb-layout-content { overflow: hidden; } > .mdb-layout-header { @if $side == top { // only add margin-top on a header when the drawer is at the top margin-#{$side}: 0; } } > .mdb-layout-content { @if $side == bottom { // only add margin-bottom on content when the drawer is at the bottom margin-#{$side}: 0; } } } } } @mixin mdb-drawer-x-overlay-down($breakpoint) { // e.g. &, &-sm, &-md, &-lg $name: mdb-drawer-breakpoint-name($breakpoint); // // Overlay - left/right responsive overlay classes and marker class // &.mdb-drawer-overlay { #{unquote($name)} { // mdb-drawer-overlay, mdb-drawer-overlay-sm, mdb-drawer-overlay-md, mdb-drawer-overlay-lg // x - left/right @if $breakpoint == xs { // overlay marker class (non-responsive) // Must double up on the .mdb-drawer-overlay class to increase specificity otherwise the // responsive mdb-drawer-open-* media queries above win (and overlay is ignored) &.mdb-drawer-overlay { @include mdb-drawer-x-overlay() } } @else { @include media-breakpoint-down($breakpoint) { // overlay responsive class @include mdb-drawer-x-overlay() } } } } } @mixin mdb-drawer-y-overlay-down($breakpoint) { // e.g. &, &-sm, &-md, &-lg $name: mdb-drawer-breakpoint-name($breakpoint); // // Overlay - top/bottom responsive overlay classes and marker class // &.mdb-drawer-overlay { #{unquote($name)} { // mdb-drawer-overlay, mdb-drawer-overlay-sm, mdb-drawer-overlay-md, mdb-drawer-overlay-lg //// y - top/bottom @if $breakpoint == xs { // overlay marker class (non-responsive) // Must double up on the .mdb-drawer-overlay class to increase specificity otherwise the // responsive mdb-drawer-open-* media queries above win (and overlay is ignored) &.mdb-drawer-overlay { @include mdb-drawer-y-overlay(); } } @else { @include media-breakpoint-down($breakpoint) { // overlay responsive class @include mdb-drawer-y-overlay(); } } } } }