UNPKG

4.49 kBSCSSView Raw
1// stylelint-disable function-disallowed-list
2
3%offcanvas-css-vars {
4 // scss-docs-start offcanvas-css-vars
5 --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};
6 --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};
7 --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};
8 --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};
9 --#{$prefix}offcanvas-color: #{$offcanvas-color};
10 --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};
11 --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};
12 --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};
13 --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};
14 // scss-docs-end offcanvas-css-vars
15}
16
17@each $breakpoint in map-keys($grid-breakpoints) {
18 $next: breakpoint-next($breakpoint, $grid-breakpoints);
19 $infix: breakpoint-infix($next, $grid-breakpoints);
20
21 .offcanvas#{$infix} {
22 @extend %offcanvas-css-vars;
23 }
24}
25
26@each $breakpoint in map-keys($grid-breakpoints) {
27 $next: breakpoint-next($breakpoint, $grid-breakpoints);
28 $infix: breakpoint-infix($next, $grid-breakpoints);
29
30 .offcanvas#{$infix} {
31 @include media-breakpoint-down($next) {
32 position: fixed;
33 bottom: 0;
34 z-index: $zindex-offcanvas;
35 display: flex;
36 flex-direction: column;
37 max-width: 100%;
38 color: var(--#{$prefix}offcanvas-color);
39 visibility: hidden;
40 background-color: var(--#{$prefix}offcanvas-bg);
41 background-clip: padding-box;
42 outline: 0;
43 @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));
44 @include transition(transform $offcanvas-transition-duration ease-in-out);
45
46 &.offcanvas-start {
47 top: 0;
48 left: 0;
49 width: var(--#{$prefix}offcanvas-width);
50 border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);
51 transform: translateX(-100%);
52 }
53
54 &.offcanvas-end {
55 top: 0;
56 right: 0;
57 width: var(--#{$prefix}offcanvas-width);
58 border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);
59 transform: translateX(100%);
60 }
61
62 &.offcanvas-top {
63 top: 0;
64 right: 0;
65 left: 0;
66 height: var(--#{$prefix}offcanvas-height);
67 max-height: 100%;
68 border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);
69 transform: translateY(-100%);
70 }
71
72 &.offcanvas-bottom {
73 right: 0;
74 left: 0;
75 height: var(--#{$prefix}offcanvas-height);
76 max-height: 100%;
77 border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);
78 transform: translateY(100%);
79 }
80
81 &.showing,
82 &.show:not(.hiding) {
83 transform: none;
84 }
85
86 &.showing,
87 &.hiding,
88 &.show {
89 visibility: visible;
90 }
91 }
92
93 @if not ($infix == "") {
94 @include media-breakpoint-up($next) {
95 --#{$prefix}offcanvas-height: auto;
96 --#{$prefix}offcanvas-border-width: 0;
97 background-color: transparent !important; // stylelint-disable-line declaration-no-important
98
99 .offcanvas-header {
100 display: none;
101 }
102
103 .offcanvas-body {
104 display: flex;
105 flex-grow: 0;
106 padding: 0;
107 overflow-y: visible;
108 // Reset `background-color` in case `.bg-*` classes are used in offcanvas
109 background-color: transparent !important; // stylelint-disable-line declaration-no-important
110 }
111 }
112 }
113 }
114}
115
116.offcanvas-backdrop {
117 @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);
118}
119
120.offcanvas-header {
121 display: flex;
122 align-items: center;
123 justify-content: space-between;
124 padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);
125
126 .btn-close {
127 padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);
128 margin-top: calc(var(--#{$prefix}offcanvas-padding-y) * -.5);
129 margin-right: calc(var(--#{$prefix}offcanvas-padding-x) * -.5);
130 margin-bottom: calc(var(--#{$prefix}offcanvas-padding-y) * -.5);
131 }
132}
133
134.offcanvas-title {
135 margin-bottom: 0;
136 line-height: $offcanvas-title-line-height;
137}
138
139.offcanvas-body {
140 flex-grow: 1;
141 padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);
142 overflow-y: auto;
143}