]> BookStack Code Mirror - bookstack/blob - resources/assets/sass/_grid.scss
Cleaned existing grid view up a little
[bookstack] / resources / assets / sass / _grid.scss
1
2 /** Flexbox styling rules **/
3 body.flexbox {
4   display: flex;
5   flex-direction: column;
6   align-items: stretch;
7   height: 100%;
8   min-height: 100%;
9   max-height: 100%;
10   overflow: hidden;
11   #content {
12     flex: 1;
13     display: flex;
14     min-height: 0;
15   }
16 }
17
18 .flex-fill {
19   display: flex;
20   align-items: stretch;
21   min-height: 0;
22   max-width: 100%;
23   position: relative;
24   &.rows {
25     flex-direction: row;
26   }
27   &.columns {
28     flex-direction: column;
29   }
30 }
31
32 .flex {
33   min-height: 0;
34   flex: 1;
35 }
36
37 .flex.scroll {
38   //overflow-y: auto;
39   display: flex;
40   &.sidebar {
41     margin-right: -14px;
42   }
43 }
44 .flex.scroll .scroll-body {
45   overflow-y: scroll;
46   flex: 1;
47 }
48
49 .flex-child > div {
50   flex: 1;
51 }
52
53
54 .tri-layout-container {
55   display: grid;
56   grid-template-columns: 1fr minmax(auto, 940px) 1fr;
57   grid-template-areas: "a b c";
58   .tri-layout-right-contents, .tri-layout-left-contents {
59     padding-right: $-xl;
60     padding-left: $-xl;
61   }
62   .tri-layout-right {
63     grid-area: c;
64   }
65   .tri-layout-left {
66     grid-area: a;
67   }
68   .tri-layout-middle {
69     grid-area: b;
70   }
71   .content-wrap.card {
72     padding: $-l $-xxl;
73     margin-left: auto;
74     margin-right: auto;
75     margin-bottom: $-xl;
76     overflow: auto;
77     &.thin {
78       width: 940px;
79       max-width: 100%;
80     }
81   }
82 }
83 @include smaller-than($xxl) {
84   .tri-layout-container {
85     grid-template-areas:  "c b b"
86                           "a b b";
87     grid-template-columns: 1fr 3fr;
88     grid-template-rows: max-content min-content;
89     padding-right: $-l;
90     .content-wrap.card {
91       padding: $-l $-l;
92     }
93   }
94 }
95 @include larger-than($xxl) {
96   .tri-layout-left-contents, .tri-layout-right-contents {
97     position: sticky;
98     top: $-m;
99     max-height: 100vh;
100     overflow-y: scroll;
101     overflow-x: visible;
102     scrollbar-width: none;
103     -ms-overflow-style: none;
104     &::-webkit-scrollbar {
105       display: none;
106     }
107   }
108 }
109
110 @include smaller-than($l) {
111   .tri-layout-container {
112     grid-template-areas:  none;
113     grid-template-columns: 10% 90%;
114     grid-column-gap: 0;
115     .tri-layout-left-contents, .tri-layout-right-contents {
116       padding-left: $-m;
117       padding-right: $-m;
118     }
119     .tri-layout-right, .tri-layout-left {
120       opacity: 0.6;
121       z-index: 0;
122     }
123     .tri-layout-left > *, .tri-layout-right > * {
124       pointer-events: none;
125     }
126     .tri-layout-right, .tri-layout-left, .tri-layout-middle {
127       grid-area: none;
128       grid-column: 1/3;
129       grid-row: 1;
130     }
131     .tri-layout-middle {
132       grid-row: 1/3;
133       grid-column: 2/3;
134       z-index: 1;
135       transition: transform ease-in-out 240ms;
136     }
137     .tri-layout-left {
138       grid-row: 2;
139     }
140     &.mobile-open {
141       overflow: hidden;
142       .tri-layout-middle {
143         transform: translateX(90%);
144       }
145       .tri-layout-right  > *, .tri-layout-left > * {
146         pointer-events: auto;
147       }
148     }
149   }
150 }
151
152 .tri-layout-left, .tri-layout-right {
153   opacity: 0.8;
154   transition: opacity ease-in-out 120ms;
155   &:hover {
156     opacity: 1;
157   }
158 }
159
160 /** Rules for all columns */
161 div[class^="col-"] img {
162   max-width: 100%;
163 }
164
165 .container {
166   max-width: $xxl;
167   margin-left: auto;
168   margin-right: auto;
169   padding-left: $-m;
170   padding-right: $-m;
171   &.fluid {
172     max-width: 100%;
173   }
174   &.medium {
175     max-width: 992px;
176   }
177   &.small {
178     max-width: 840px;
179   }
180   &.nopad {
181     padding-left: 0;
182     padding-right: 0;
183   }
184 }
185
186 .row {
187   margin-left: -$-m;
188   margin-right: -$-m;
189 }
190
191 .grid {
192   display: grid;
193   grid-column-gap: $-l;
194   grid-row-gap: $-l;
195   &.half {
196     grid-template-columns: 1fr 1fr;
197   }
198   &.third {
199     grid-template-columns: 1fr 1fr 1fr;
200   }
201 }
202
203 .grid-card {
204   display: flex;
205   flex-direction: column;
206   border: 1px solid #ddd;
207   margin-bottom: $-l;
208   border-radius: 4px;
209   overflow: hidden;
210   min-width: 100px;
211   color: $text-dark;
212   transition: border-color ease-in-out 120ms, box-shadow ease-in-out 120ms;
213   &:hover {
214     color: $text-dark;
215     text-decoration: none;
216     box-shadow: $bs-card;
217   }
218   h2 {
219     width: 100%;
220     font-size: 1.5em;
221     margin: 0 0 10px;
222   }
223   p {
224     font-size: .85em;
225     margin: 0;
226     line-height: 1.6em;
227   }
228   .grid-card-content {
229     flex: 1;
230     border-top: 0;
231     border-bottom-width: 2px;
232   }
233   .grid-card-content, .grid-card-footer {
234     padding: $-l;
235   }
236   .grid-card-content + .grid-card-footer {
237     padding-top: 0;
238   }
239 }
240
241 .bookshelf-grid-item .grid-card-content h2 a  {
242   color: $color-bookshelf;
243   fill: $color-bookshelf;
244 }
245
246 .book-grid-item .grid-card-footer {
247   p.small {
248     font-size: .8em;
249     margin: 0;
250   }
251 }
252
253 @include smaller-than($m) {
254   .grid.third {
255     grid-template-columns: 1fr 1fr;
256   }
257 }
258
259 @include smaller-than($s) {
260   .grid.third {
261     grid-template-columns: 1fr;
262   }
263 }
264
265 .float {
266   float: left;
267   &.right {
268     float: right;
269   }
270 }
271
272 .block {
273   display: block;
274   position: relative;
275 }
276
277 .inline {
278   display: inline;
279 }
280
281 .block.inline {
282   display: inline-block;
283 }
284
285
286 // TODO - Remove old BS grid system
287 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
288   position: relative;
289   min-height: 1px;
290   padding-left: $-m;
291   padding-right: $-m;
292 }
293 .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
294   float: left;
295 }
296 .col-xs-12 {
297   width: 100%;
298 }
299 .col-xs-11 {
300   width: 91.66666667%;
301 }
302 .col-xs-10 {
303   width: 83.33333333%;
304 }
305 .col-xs-9 {
306   width: 75%;
307 }
308 .col-xs-8 {
309   width: 66.66666667%;
310 }
311 .col-xs-7 {
312   width: 58.33333333%;
313 }
314 .col-xs-6 {
315   width: 50%;
316 }
317 .col-xs-5 {
318   width: 41.66666667%;
319 }
320 .col-xs-4 {
321   width: 33.33333333%;
322 }
323 .col-xs-3 {
324   width: 25%;
325 }
326 .col-xs-2 {
327   width: 16.66666667%;
328 }
329 .col-xs-1 {
330   width: 8.33333333%;
331 }
332 .col-xs-pull-12 {
333   right: 100%;
334 }
335 .col-xs-pull-11 {
336   right: 91.66666667%;
337 }
338 .col-xs-pull-10 {
339   right: 83.33333333%;
340 }
341 .col-xs-pull-9 {
342   right: 75%;
343 }
344 .col-xs-pull-8 {
345   right: 66.66666667%;
346 }
347 .col-xs-pull-7 {
348   right: 58.33333333%;
349 }
350 .col-xs-pull-6 {
351   right: 50%;
352 }
353 .col-xs-pull-5 {
354   right: 41.66666667%;
355 }
356 .col-xs-pull-4 {
357   right: 33.33333333%;
358 }
359 .col-xs-pull-3 {
360   right: 25%;
361 }
362 .col-xs-pull-2 {
363   right: 16.66666667%;
364 }
365 .col-xs-pull-1 {
366   right: 8.33333333%;
367 }
368 .col-xs-pull-0 {
369   right: auto;
370 }
371 .col-xs-push-12 {
372   left: 100%;
373 }
374 .col-xs-push-11 {
375   left: 91.66666667%;
376 }
377 .col-xs-push-10 {
378   left: 83.33333333%;
379 }
380 .col-xs-push-9 {
381   left: 75%;
382 }
383 .col-xs-push-8 {
384   left: 66.66666667%;
385 }
386 .col-xs-push-7 {
387   left: 58.33333333%;
388 }
389 .col-xs-push-6 {
390   left: 50%;
391 }
392 .col-xs-push-5 {
393   left: 41.66666667%;
394 }
395 .col-xs-push-4 {
396   left: 33.33333333%;
397 }
398 .col-xs-push-3 {
399   left: 25%;
400 }
401 .col-xs-push-2 {
402   left: 16.66666667%;
403 }
404 .col-xs-push-1 {
405   left: 8.33333333%;
406 }
407 .col-xs-push-0 {
408   left: auto;
409 }
410 .col-xs-offset-12 {
411   margin-left: 100%;
412 }
413 .col-xs-offset-11 {
414   margin-left: 91.66666667%;
415 }
416 .col-xs-offset-10 {
417   margin-left: 83.33333333%;
418 }
419 .col-xs-offset-9 {
420   margin-left: 75%;
421 }
422 .col-xs-offset-8 {
423   margin-left: 66.66666667%;
424 }
425 .col-xs-offset-7 {
426   margin-left: 58.33333333%;
427 }
428 .col-xs-offset-6 {
429   margin-left: 50%;
430 }
431 .col-xs-offset-5 {
432   margin-left: 41.66666667%;
433 }
434 .col-xs-offset-4 {
435   margin-left: 33.33333333%;
436 }
437 .col-xs-offset-3 {
438   margin-left: 25%;
439 }
440 .col-xs-offset-2 {
441   margin-left: 16.66666667%;
442 }
443 .col-xs-offset-1 {
444   margin-left: 8.33333333%;
445 }
446 .col-xs-offset-0 {
447   margin-left: 0%;
448 }
449 @media (min-width: $screen-sm) {
450   .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
451     float: left;
452   }
453   .col-sm-12 {
454     width: 100%;
455   }
456   .col-sm-11 {
457     width: 91.66666667%;
458   }
459   .col-sm-10 {
460     width: 83.33333333%;
461   }
462   .col-sm-9 {
463     width: 75%;
464   }
465   .col-sm-8 {
466     width: 66.66666667%;
467   }
468   .col-sm-7 {
469     width: 58.33333333%;
470   }
471   .col-sm-6 {
472     width: 50%;
473   }
474   .col-sm-5 {
475     width: 41.66666667%;
476   }
477   .col-sm-4 {
478     width: 33.33333333%;
479   }
480   .col-sm-3 {
481     width: 25%;
482   }
483   .col-sm-2 {
484     width: 16.66666667%;
485   }
486   .col-sm-1 {
487     width: 8.33333333%;
488   }
489   .col-sm-pull-12 {
490     right: 100%;
491   }
492   .col-sm-pull-11 {
493     right: 91.66666667%;
494   }
495   .col-sm-pull-10 {
496     right: 83.33333333%;
497   }
498   .col-sm-pull-9 {
499     right: 75%;
500   }
501   .col-sm-pull-8 {
502     right: 66.66666667%;
503   }
504   .col-sm-pull-7 {
505     right: 58.33333333%;
506   }
507   .col-sm-pull-6 {
508     right: 50%;
509   }
510   .col-sm-pull-5 {
511     right: 41.66666667%;
512   }
513   .col-sm-pull-4 {
514     right: 33.33333333%;
515   }
516   .col-sm-pull-3 {
517     right: 25%;
518   }
519   .col-sm-pull-2 {
520     right: 16.66666667%;
521   }
522   .col-sm-pull-1 {
523     right: 8.33333333%;
524   }
525   .col-sm-pull-0 {
526     right: auto;
527   }
528   .col-sm-push-12 {
529     left: 100%;
530   }
531   .col-sm-push-11 {
532     left: 91.66666667%;
533   }
534   .col-sm-push-10 {
535     left: 83.33333333%;
536   }
537   .col-sm-push-9 {
538     left: 75%;
539   }
540   .col-sm-push-8 {
541     left: 66.66666667%;
542   }
543   .col-sm-push-7 {
544     left: 58.33333333%;
545   }
546   .col-sm-push-6 {
547     left: 50%;
548   }
549   .col-sm-push-5 {
550     left: 41.66666667%;
551   }
552   .col-sm-push-4 {
553     left: 33.33333333%;
554   }
555   .col-sm-push-3 {
556     left: 25%;
557   }
558   .col-sm-push-2 {
559     left: 16.66666667%;
560   }
561   .col-sm-push-1 {
562     left: 8.33333333%;
563   }
564   .col-sm-push-0 {
565     left: auto;
566   }
567   .col-sm-offset-12 {
568     margin-left: 100%;
569   }
570   .col-sm-offset-11 {
571     margin-left: 91.66666667%;
572   }
573   .col-sm-offset-10 {
574     margin-left: 83.33333333%;
575   }
576   .col-sm-offset-9 {
577     margin-left: 75%;
578   }
579   .col-sm-offset-8 {
580     margin-left: 66.66666667%;
581   }
582   .col-sm-offset-7 {
583     margin-left: 58.33333333%;
584   }
585   .col-sm-offset-6 {
586     margin-left: 50%;
587   }
588   .col-sm-offset-5 {
589     margin-left: 41.66666667%;
590   }
591   .col-sm-offset-4 {
592     margin-left: 33.33333333%;
593   }
594   .col-sm-offset-3 {
595     margin-left: 25%;
596   }
597   .col-sm-offset-2 {
598     margin-left: 16.66666667%;
599   }
600   .col-sm-offset-1 {
601     margin-left: 8.33333333%;
602   }
603   .col-sm-offset-0 {
604     margin-left: 0%;
605   }
606 }
607 @media (min-width: $screen-md) {
608   .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
609     float: left;
610   }
611   .col-md-12 {
612     width: 100%;
613   }
614   .col-md-11 {
615     width: 91.66666667%;
616   }
617   .col-md-10 {
618     width: 83.33333333%;
619   }
620   .col-md-9 {
621     width: 75%;
622   }
623   .col-md-8 {
624     width: 66.66666667%;
625   }
626   .col-md-7 {
627     width: 58.33333333%;
628   }
629   .col-md-6 {
630     width: 50%;
631   }
632   .col-md-5 {
633     width: 41.66666667%;
634   }
635   .col-md-4 {
636     width: 33.33333333%;
637   }
638   .col-md-3 {
639     width: 25%;
640   }
641   .col-md-2 {
642     width: 16.66666667%;
643   }
644   .col-md-1 {
645     width: 8.33333333%;
646   }
647   .col-md-pull-12 {
648     right: 100%;
649   }
650   .col-md-pull-11 {
651     right: 91.66666667%;
652   }
653   .col-md-pull-10 {
654     right: 83.33333333%;
655   }
656   .col-md-pull-9 {
657     right: 75%;
658   }
659   .col-md-pull-8 {
660     right: 66.66666667%;
661   }
662   .col-md-pull-7 {
663     right: 58.33333333%;
664   }
665   .col-md-pull-6 {
666     right: 50%;
667   }
668   .col-md-pull-5 {
669     right: 41.66666667%;
670   }
671   .col-md-pull-4 {
672     right: 33.33333333%;
673   }
674   .col-md-pull-3 {
675     right: 25%;
676   }
677   .col-md-pull-2 {
678     right: 16.66666667%;
679   }
680   .col-md-pull-1 {
681     right: 8.33333333%;
682   }
683   .col-md-pull-0 {
684     right: auto;
685   }
686   .col-md-push-12 {
687     left: 100%;
688   }
689   .col-md-push-11 {
690     left: 91.66666667%;
691   }
692   .col-md-push-10 {
693     left: 83.33333333%;
694   }
695   .col-md-push-9 {
696     left: 75%;
697   }
698   .col-md-push-8 {
699     left: 66.66666667%;
700   }
701   .col-md-push-7 {
702     left: 58.33333333%;
703   }
704   .col-md-push-6 {
705     left: 50%;
706   }
707   .col-md-push-5 {
708     left: 41.66666667%;
709   }
710   .col-md-push-4 {
711     left: 33.33333333%;
712   }
713   .col-md-push-3 {
714     left: 25%;
715   }
716   .col-md-push-2 {
717     left: 16.66666667%;
718   }
719   .col-md-push-1 {
720     left: 8.33333333%;
721   }
722   .col-md-push-0 {
723     left: auto;
724   }
725   .col-md-offset-12 {
726     margin-left: 100%;
727   }
728   .col-md-offset-11 {
729     margin-left: 91.66666667%;
730   }
731   .col-md-offset-10 {
732     margin-left: 83.33333333%;
733   }
734   .col-md-offset-9 {
735     margin-left: 75%;
736   }
737   .col-md-offset-8 {
738     margin-left: 66.66666667%;
739   }
740   .col-md-offset-7 {
741     margin-left: 58.33333333%;
742   }
743   .col-md-offset-6 {
744     margin-left: 50%;
745   }
746   .col-md-offset-5 {
747     margin-left: 41.66666667%;
748   }
749   .col-md-offset-4 {
750     margin-left: 33.33333333%;
751   }
752   .col-md-offset-3 {
753     margin-left: 25%;
754   }
755   .col-md-offset-2 {
756     margin-left: 16.66666667%;
757   }
758   .col-md-offset-1 {
759     margin-left: 8.33333333%;
760   }
761   .col-md-offset-0 {
762     margin-left: 0%;
763   }
764 }
765 @media (min-width: $screen-lg) {
766   .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
767     float: left;
768   }
769   .col-lg-12 {
770     width: 100%;
771   }
772   .col-lg-11 {
773     width: 91.66666667%;
774   }
775   .col-lg-10 {
776     width: 83.33333333%;
777   }
778   .col-lg-9 {
779     width: 75%;
780   }
781   .col-lg-8 {
782     width: 66.66666667%;
783   }
784   .col-lg-7 {
785     width: 58.33333333%;
786   }
787   .col-lg-6 {
788     width: 50%;
789   }
790   .col-lg-5 {
791     width: 41.66666667%;
792   }
793   .col-lg-4 {
794     width: 33.33333333%;
795   }
796   .col-lg-3 {
797     width: 25%;
798   }
799   .col-lg-2 {
800     width: 16.66666667%;
801   }
802   .col-lg-1 {
803     width: 8.33333333%;
804   }
805   .col-lg-pull-12 {
806     right: 100%;
807   }
808   .col-lg-pull-11 {
809     right: 91.66666667%;
810   }
811   .col-lg-pull-10 {
812     right: 83.33333333%;
813   }
814   .col-lg-pull-9 {
815     right: 75%;
816   }
817   .col-lg-pull-8 {
818     right: 66.66666667%;
819   }
820   .col-lg-pull-7 {
821     right: 58.33333333%;
822   }
823   .col-lg-pull-6 {
824     right: 50%;
825   }
826   .col-lg-pull-5 {
827     right: 41.66666667%;
828   }
829   .col-lg-pull-4 {
830     right: 33.33333333%;
831   }
832   .col-lg-pull-3 {
833     right: 25%;
834   }
835   .col-lg-pull-2 {
836     right: 16.66666667%;
837   }
838   .col-lg-pull-1 {
839     right: 8.33333333%;
840   }
841   .col-lg-pull-0 {
842     right: auto;
843   }
844   .col-lg-push-12 {
845     left: 100%;
846   }
847   .col-lg-push-11 {
848     left: 91.66666667%;
849   }
850   .col-lg-push-10 {
851     left: 83.33333333%;
852   }
853   .col-lg-push-9 {
854     left: 75%;
855   }
856   .col-lg-push-8 {
857     left: 66.66666667%;
858   }
859   .col-lg-push-7 {
860     left: 58.33333333%;
861   }
862   .col-lg-push-6 {
863     left: 50%;
864   }
865   .col-lg-push-5 {
866     left: 41.66666667%;
867   }
868   .col-lg-push-4 {
869     left: 33.33333333%;
870   }
871   .col-lg-push-3 {
872     left: 25%;
873   }
874   .col-lg-push-2 {
875     left: 16.66666667%;
876   }
877   .col-lg-push-1 {
878     left: 8.33333333%;
879   }
880   .col-lg-push-0 {
881     left: auto;
882   }
883   .col-lg-offset-12 {
884     margin-left: 100%;
885   }
886   .col-lg-offset-11 {
887     margin-left: 91.66666667%;
888   }
889   .col-lg-offset-10 {
890     margin-left: 83.33333333%;
891   }
892   .col-lg-offset-9 {
893     margin-left: 75%;
894   }
895   .col-lg-offset-8 {
896     margin-left: 66.66666667%;
897   }
898   .col-lg-offset-7 {
899     margin-left: 58.33333333%;
900   }
901   .col-lg-offset-6 {
902     margin-left: 50%;
903   }
904   .col-lg-offset-5 {
905     margin-left: 41.66666667%;
906   }
907   .col-lg-offset-4 {
908     margin-left: 33.33333333%;
909   }
910   .col-lg-offset-3 {
911     margin-left: 25%;
912   }
913   .col-lg-offset-2 {
914     margin-left: 16.66666667%;
915   }
916   .col-lg-offset-1 {
917     margin-left: 8.33333333%;
918   }
919   .col-lg-offset-0 {
920     margin-left: 0%;
921   }
922 }
923 .clearfix:before,
924 .clearfix:after,
925 .row:before,
926 .row:after {
927   content: " ";
928   display: table;
929 }
930 .clearfix:after,
931 .row:after {
932   clear: both;
933 }
934 .center-block {
935   display: block;
936   margin-left: auto;
937   margin-right: auto;
938 }
939
940
941
942
943
944
945 .grid {
946   display: grid;
947   grid-column-gap: $-m;
948   grid-row-gap: 0;
949   &.contained {
950     max-width: $xxl;
951     padding-left: $-m;
952     padding-right: $-m;
953     margin-left: auto;
954     margin-right: auto;
955   }
956   &.v-center {
957     align-items: center;
958   }
959 }
960
961 @each $sizeLetter, $size in $spacing {
962   .grid.contained.space-#{$sizeLetter} {
963     padding-left: $size;
964     padding-right: $size;
965     grid-column-gap: $size;
966   }
967 }
968
969 @mixin grid-layout($name, $times) {
970   .grid.#{$name} {
971     grid-template-columns: repeat(#{$times}, 1fr);
972   }
973 }
974
975 @include grid-layout('thirds', 3)
976 @include grid-layout('halves', 2)
977
978 @each $sizeLetter, $size in $screen-sizes {
979   @include smaller-than($size) {
980     .grid.break-#{$sizeLetter} {
981       grid-template-columns: 1fr;
982     }
983   }
984 }
985
986
987 /**
988  * Visibility
989  */
990
991 @each $sizeLetter, $size in $screen-sizes {
992   @include smaller-than($size) {
993     .hide-under-#{$sizeLetter} {
994       display: none !important;
995     }
996   }
997   @include larger-than($size) {
998     .hide-over-#{$sizeLetter} {
999       display: none !important;
1000     }
1001   }
1002 }