]> BookStack Code Mirror - bookstack/blob - resources/assets/sass/_layout.scss
Actioned some todo items, Cleaned old grid css
[bookstack] / resources / assets / sass / _layout.scss
1
2 /**
3  * Generic content container
4  */
5 .container {
6   max-width: $xxl;
7   margin-left: auto;
8   margin-right: auto;
9   padding-left: $-m;
10   padding-right: $-m;
11   &.small {
12     max-width: 840px;
13   }
14   &.very-small {
15     max-width: 480px;
16   }
17 }
18
19 /**
20  * Core grid layout system
21  */
22 .grid {
23   display: grid;
24   grid-column-gap: $-l;
25   grid-row-gap: $-l;
26   &.half {
27     grid-template-columns: 1fr 1fr;
28   }
29   &.third {
30     grid-template-columns: 1fr 1fr 1fr;
31   }
32   &.left-focus {
33     grid-template-columns: 2fr 1fr;
34   }
35   &.right-focus {
36     grid-template-columns: 1fr 3fr;
37   }
38   &.gap-xl {
39     grid-column-gap: $-xl;
40     grid-row-gap: $-xl;
41   }
42   &.gap-xxl {
43     grid-column-gap: $-xxl;
44     grid-row-gap: $-xxl;
45   }
46   &.v-center {
47     align-items: center;
48   }
49 }
50
51 @include smaller-than($m) {
52   .grid.third {
53     grid-template-columns: 1fr 1fr;
54   }
55   .grid.half, .grid.left-focus, .grid.right-focus {
56     grid-template-columns: 1fr;
57   }
58   .grid.half.collapse-xs {
59     grid-template-columns: 1fr 1fr;
60   }
61   .grid.gap-xl {
62     grid-column-gap: $-m;
63     grid-row-gap: $-m;
64   }
65   .grid.right-focus.reverse-collapse > *:nth-child(2) {
66     order: 0;
67   }
68   .grid.right-focus.reverse-collapse > *:nth-child(1) {
69     order: 1;
70   }
71 }
72
73 @include smaller-than($s) {
74   .grid.third {
75     grid-template-columns: 1fr;
76   }
77 }
78
79 @include smaller-than($xs) {
80   .grid.half.collapse-xs {
81     grid-template-columns: 1fr;
82   }
83 }
84
85 /**
86  * Flexbox layout system
87  */
88 body.flexbox {
89   display: flex;
90   flex-direction: column;
91   align-items: stretch;
92   height: 100%;
93   min-height: 100%;
94   max-height: 100%;
95   overflow: hidden;
96   #content {
97     flex: 1;
98     display: flex;
99     min-height: 0;
100   }
101 }
102
103 .flex-fill {
104   display: flex;
105   align-items: stretch;
106   min-height: 0;
107   max-width: 100%;
108   position: relative;
109 }
110
111 .flex {
112   min-height: 0;
113   flex: 1;
114 }
115
116
117 /**
118  * Display and float utilities
119  */
120 .block {
121   display: block;
122   position: relative;
123 }
124
125 .inline {
126   display: inline;
127 }
128
129 .block.inline {
130   display: inline-block;
131 }
132
133 .float {
134   float: left;
135   &.right {
136     float: right;
137   }
138 }
139
140 /**
141  * Visibility
142  */
143 @each $sizeLetter, $size in $screen-sizes {
144   @include smaller-than($size) {
145     .hide-under-#{$sizeLetter} {
146       display: none !important;
147     }
148   }
149   @include larger-than($size) {
150     .hide-over-#{$sizeLetter} {
151       display: none !important;
152     }
153   }
154 }
155
156 /**
157  * Inline content columns
158  */
159 .dual-column-content {
160   columns: 2;
161 }
162
163 @include smaller-than($m) {
164   .dual-column-content {
165     columns: 1;
166   }
167 }
168
169
170 /**
171  * Fixes
172  */
173 .clearfix:before,
174 .clearfix:after {
175   content: " ";
176   display: table;
177 }
178 .clearfix:after {
179   clear: both;
180 }
181
182 /**
183  * View Layouts
184  */
185 .tri-layout-container {
186   display: grid;
187   margin-left: $-xl;
188   margin-right: $-xl;
189   grid-template-columns: 1fr 4fr 1fr;
190   grid-template-areas: "a b c";
191   grid-column-gap: $-xxl;
192   .tri-layout-right {
193     grid-area: c;
194     min-width: 0;
195   }
196   .tri-layout-left {
197     grid-area: a;
198     min-width: 0;
199   }
200   .tri-layout-middle {
201     grid-area: b;
202     padding-top: $-m;
203   }
204 }
205 @include smaller-than($xxl) {
206   .tri-layout-container {
207     grid-template-areas:  "c b b"
208     "a b b";
209     grid-template-columns: 1fr 3fr;
210     grid-template-rows: max-content min-content;
211     padding-right: $-l;
212     .content-wrap.card {
213       padding: $-l $-xl;
214     }
215   }
216 }
217 @include larger-than($xxl) {
218   .tri-layout-left-contents, .tri-layout-right-contents {
219     padding: $-m;
220     position: sticky;
221     top: $-m;
222     max-height: 100vh;
223     min-height: 50vh;
224     overflow-y: scroll;
225     overflow-x: hidden;
226     scrollbar-width: none;
227     -ms-overflow-style: none;
228     &::-webkit-scrollbar {
229       display: none;
230     }
231   }
232   .tri-layout-middle-contents {
233     max-width: 940px;
234     margin: 0 auto;
235   }
236 }
237
238 @include smaller-than($l) {
239   .tri-layout-container {
240     grid-template-areas:  none;
241     grid-template-columns: 10% 90%;
242     grid-column-gap: 0;
243     .tri-layout-left-contents, .tri-layout-right-contents {
244       padding-left: $-m;
245       padding-right: $-m;
246     }
247     .tri-layout-right-contents > div, .tri-layout-left-contents > div {
248       opacity: 0.6;
249       z-index: 0;
250     }
251     .tri-layout-left > *, .tri-layout-right > * {
252       pointer-events: none;
253     }
254     .tri-layout-right, .tri-layout-left, .tri-layout-middle {
255       grid-area: none;
256       grid-column: 1/3;
257       grid-row: 1;
258     }
259     .tri-layout-middle {
260       grid-row: 1/3;
261       grid-column: 2/3;
262       z-index: 1;
263       transition: transform ease-in-out 240ms;
264     }
265     .tri-layout-left {
266       grid-row: 2;
267     }
268     &.mobile-open {
269       overflow: hidden;
270       .tri-layout-middle {
271         transform: translateX(90%);
272       }
273       .tri-layout-right  > *, .tri-layout-left > * {
274         pointer-events: auto;
275       }
276     }
277   }
278 }
279
280 .tri-layout-left-contents > div, .tri-layout-right-contents > div {
281   opacity: 0.6;
282   transition: opacity ease-in-out 120ms;
283   &:hover {
284     opacity: 1;
285   }
286 }