@use 'sass:math'; @mixin make-grid($class) { @for $i from 1 through $Grid-columns { .#{$ns}Grid-col--#{$class}#{$i} { flex: 0 0 percentage(math.div($i, $Grid-columns)); max-width: percentage(math.div($i, $Grid-columns)); min-height: 1px; padding-left: (math.div($Grid-gutterWidth, 2)); padding-right: (math.div($Grid-gutterWidth, 2)); } } .#{$ns}Grid-col--#{$class} { flex-basis: 0; flex-grow: 1; min-height: 1px; max-width: 100%; width: 100%; padding-left: math.div($Grid-gutterWidth, 2); padding-right: math.div($Grid-gutterWidth, 2); } .#{$ns}Grid-col--#{$class}Auto { flex: 0 0 auto; width: auto; max-width: 100%; padding-left: math.div($Grid-gutterWidth, 2); padding-right: math.div($Grid-gutterWidth, 2); } } // Generate Grid row @mixin make-row($gutter: $Grid-gutterWidth) { margin-left: math.div($gutter, -2); margin-right: math.div($gutter, -2); display: flex; flex-wrap: wrap; } @include make-grid(xs); @include media-breakpoint-up(sm) { .#{$ns}Grid { @include make-row; flex: 1; &--hRight { justify-content: flex-end; } &--hCenter { justify-content: center; } &--hBetween { justify-content: space-between; } &--vMiddle > div { display: flex; flex-direction: column; justify-content: center; } &--vBottom > div { display: flex; flex-direction: column; justify-content: flex-end; } &--vBetween > div { display: flex; flex-direction: column; justify-content: space-between; } & > &-col--vTop { display: flex; flex-direction: column; justify-content: flex-start; } & > &-col--vMiddle { display: flex; flex-direction: column; justify-content: center; } & > &-col--vBottom { display: flex; flex-direction: column; justify-content: flex-end; } & > &-col--vBetween { display: flex; flex-direction: column; justify-content: space-between; } } @include make-grid(sm); } @include media-breakpoint-up(md) { @include make-grid(md); } @include media-breakpoint-up(lg) { @include make-grid(lg); } .#{$ns}Grid--none { margin-left: 0; margin-right: 0; > div { padding-left: 0; padding-right: 0; } } .#{$ns}Grid--xs { margin-left: calc(var(--gap-xs) * -0.5); margin-right: calc(var(--gap-xs) * -0.5); > div { padding-left: calc(var(--gap-xs) * 0.5); padding-right: calc(var(--gap-xs) * 0.5); } } .#{$ns}Grid--sm { margin-left: calc(var(--gap-sm) * -0.5); margin-right: calc(var(--gap-sm) * -0.5); > div { padding-left: calc(var(--gap-sm) * 0.5); padding-right: calc(var(--gap-sm) * 0.5); } } .#{$ns}Grid--base { margin-left: calc(var(--gap-base) * -0.5); margin-right: calc(var(--gap-base) * -0.5); > div { padding-left: calc(var(--gap-base) * 0.5); padding-right: calc(var(--gap-base) * 0.5); } } .#{$ns}Grid--md { margin-left: calc(var(--gap-md) * -0.5); margin-right: calc(var(--gap-md) * -0.5); > div { padding-left: calc(var(--gap-md) * 0.5); padding-right: calc(var(--gap-md) * 0.5); } } .#{$ns}Grid--lg { margin-left: calc(var(--gap-lg) * -0.5); margin-right: calc(var(--gap-lg) * -0.5); > div { padding-left: calc(var(--gap-lg) * 0.5); padding-right: calc(var(--gap-lg) * 0.5); } }