$TOAST-GRID
An insane grid.
You'd be mad to use it.
Usage
=====
Assuming default values:
<div class="grid">
<div class="grid__col grid__col--1-of-2">
A half-width column.
</div>cd
<div class="grid__col grid__col--1-of-4 grid__col--pull-1-of-4">
A quarter, pulled left by its own width. You get this, right?
</div>
</div>
Customisation
=============
$toast-grid-namespace and $toast-grid-column-namespace
adjusts the class names for the grid. With
default values, grid wrappers have a class
of '.grid' and columns '.grid__col'.
$toast-col-groups(n) adjusts column divisions.
For example, $toast-col-groups(12) will produce
a 12-column grid. $col-groups(3,6,8)
will produce a 3-, 6-, and 8-column grid.
$toast-gutter-width is—you guessed it—the gutter
width. Accepts any unit.
That's it. Have fun.
\*-----------------------------------
$toast-grid-namespace: "grid" !default;
$toast-grid-column-namespace: "grid__col" !default;
$toast-col-groups: (2, 3, 4, 5, 6, 8, 12) !default;
$toast-gutter-width: 0px !default;
$toast-breakpoint-medium: 700px !default;
$toast-breakpoint-small: 480px !default;
$toast-pushes: true !default;
$toast-pulls: true !default;
.#{$toast-grid-namespace} {
list-style: none;
margin-left: -$toast-gutter-width;
}
%span-all { width: percentage(1/1); }
%one-half { width: percentage(1/2); }
%one-third { width: percentage(1/3); }
%two-thirds { width: percentage(2/3); }
%one-quarter { width: percentage(1/4); }
%two-quarters { width: percentage(2/4); }
%three-quarters { width: percentage(3/4); }
%push-span-all { margin-left: percentage(1/1); }
%push-one-half { margin-left: percentage(1/2); }
%push-one-third { margin-left: percentage(1/3); }
%push-two-thirds { margin-left: percentage(2/3); }
%push-one-quarter { margin-left: percentage(1/4); }
%push-two-quarters { margin-left: percentage(2/4); }
%push-three-quarters { margin-left: percentage(3/4); }
%pull-span-all { margin-left: -(percentage(1/1)); }
%pull-one-half { margin-left: -(percentage(1/2)); }
%pull-one-third { margin-left: -(percentage(1/3)); }
%pull-two-thirds { margin-left: -(percentage(2/3)); }
%pull-one-quarter { margin-left: -(percentage(1/4)); }
%pull-two-quarters { margin-left: -(percentage(2/4)); }
%pull-three-quarters { margin-left: -(percentage(3/4)); }
@each $group in $toast-col-groups {
@for $i from 1 through $group {
.#{$toast-grid-column-namespace}--#{$i}-of-#{$group} {
@if percentage($i/$group) == percentage(1/1) {
@extend %span-all;
} @else if percentage($i/$group) == percentage(1/2) {
@extend %one-half;
} @else if percentage($i/$group) == percentage(1/3) {
@extend %one-third;
} @else if percentage($i/$group) == percentage(2/3) {
@extend %two-thirds;
} @else if percentage($i/$group) == percentage(1/4) {
@extend %one-quarter;
} @else if percentage($i/$group) == percentage(2/4) {
@extend %two-quarters;
} @else if percentage($i/$group) == percentage(3/4) {
@extend %three-quarters;
} @else {
width: percentage($i/$group);
}
}
@if ($toast-pushes) {
.#{$toast-grid-column-namespace}--push-#{$i}-of-#{$group} {
@if percentage($i/$group) == percentage(1/1) {
@extend %push-span-all;
} @else if percentage($i/$group) == percentage(1/2) {
@extend %push-one-half;
} @else if percentage($i/$group) == percentage(1/3) {
@extend %push-one-third;
} @else if percentage($i/$group) == percentage(2/3) {
@extend %push-two-thirds;
} @else if percentage($i/$group) == percentage(1/4) {
@extend %push-one-quarter;
} @else if percentage($i/$group) == percentage(2/4) {
@extend %push-two-quarters;
} @else if percentage($i/$group) == percentage(3/4) {
@extend %push-three-quarters;
} @else {
margin-left: percentage($i/$group);
}
}
}
@if ($toast-pulls) {
.#{$toast-grid-column-namespace}--pull-#{$i}-of-#{$group} {
@if percentage($i/$group) == percentage(1/1) {
@extend %pull-span-all;
} @else if percentage($i/$group) == percentage(1/2) {
@extend %pull-one-half;
} @else if percentage($i/$group) == percentage(1/3) {
@extend %pull-one-third;
} @else if percentage($i/$group) == percentage(2/3) {
@extend %pull-two-thirds;
} @else if percentage($i/$group) == percentage(1/4) {
@extend %pull-one-quarter;
} @else if percentage($i/$group) == percentage(2/4) {
@extend %pull-two-quarters;
} @else if percentage($i/$group) == percentage(3/4) {
@extend %pull-three-quarters;
} @else {
margin-left: -(percentage($i/$group));
}
}
}
}
}
.#{$toast-grid-column-namespace} {
box-sizing: border-box;
display: inline-block;
margin-right: -.25em;
min-height: 1px;
padding-left: $toast-gutter-width;
vertical-align: top;
@media (max-width: $toast-breakpoint-medium) {
display: block;
margin-left: 0;
margin-right: 0;
width: auto;
}
@media (max-width: $toast-breakpoint-medium) and (min-width: $toast-breakpoint-small) {
&[class*="#{$toast-grid-column-namespace}--m-"] {
display: inline-block;
margin-right: -.24em;
}
&.#{$toast-grid-column-namespace}--m-1-of-2 {
width: percentage(1/2);
}
&.#{$toast-grid-column-namespace}--m-1-of-3 {
width: percentage(1/3);
}
&.#{$toast-grid-column-namespace}--m-2-of-3 {
width: percentage(2/3);
}
&.#{$toast-grid-column-namespace}--m-1-of-4 {
width: percentage(1/4);
}
&.#{$toast-grid-column-namespace}--m-2-of-4 {
@extend .#{$toast-grid-column-namespace}--m-1-of-2;
}
&.#{$toast-grid-column-namespace}--m-3-of-4 {
width: percentage(3/4);
}
}
@media (max-width: $toast-breakpoint-small) {
&[class*="#{$toast-grid-column-namespace}--s-"] {
display: inline-block;
margin-right: -.24em;
}
&.#{$toast-grid-column-namespace}--s-1-of-2 {
width: percentage(1/2);
}
&.#{$toast-grid-column-namespace}--s-1-of-3 {
width: percentage(1/3);
}
&.#{$toast-grid-column-namespace}--s-2-of-3 {
width: percentage(2/3);
}
&.#{$toast-grid-column-namespace}--s-1-of-4 {
width: percentage(1/4);
}
&.#{$toast-grid-column-namespace}--s-2-of-4 {
@extend .#{$toast-grid-column-namespace}--s-1-of-2;
}
&.#{$toast-grid-column-namespace}--s-3-of-4 {
width: percentage(3/4);
}
}
}
.#{$toast-grid-column-namespace}--centered {
display: block;
margin-left: auto;
margin-right: auto;
}
.#{$toast-grid-column-namespace}--d-first {
float: left;
}
.#{$toast-grid-column-namespace}--d-last {
float: right;
}
.#{$toast-grid-namespace}--no-gutter {
margin-left: 0;
width: 100%;
.#{$toast-grid-column-namespace} {
padding-left: 0;
}
.#{$toast-grid-column-namespace}--span-all {
margin-left: 0;
width: 100%;
}
}
.#{$toast-grid-column-namespace}--ab {
vertical-align: bottom;
}
.#{$toast-grid-column-namespace}--am {
vertical-align: middle;
}