@use "sass:math"; $gridSizesMap: ( "sm": 576px, "md": 768px, "lg": 992px, "xl": 1200px, "xxl": 1400px, ); .grid { --gridGap: var(--baseSpacing); position: relative; display: flex; flex-grow: 1; flex-wrap: wrap; row-gap: var(--gridGap); margin: 0 calc(-0.5 * var(--gridGap)); &.grid-center { align-items: center; } &.grid-sm { --gridGap: var(--smSpacing); } .form-field { margin-bottom: 0; } > * { margin: 0 calc(0.5 * var(--gridGap)); } } %col { position: relative; width: 100%; min-height: 1px; } // grid // ------------------------------------------------------------------- @mixin colsWidthGenerator($prefix: '') { // normalize prefix @if $prefix != '' and str-index($prefix, '-') != 1 { $prefix: '-#{$prefix}'; } .col#{$prefix}-auto { flex: 0 0 auto; width: auto; } @for $i from 12 through 1 { .col#{$prefix}-#{$i} { width: calc(math.div(100%, math.div(12, $i)) - var(--gridGap)); } } } // base screen size cols @for $i from 12 through 1 { .col-#{$i} { @extend %col; } } @include colsWidthGenerator(); // screen size specific cols @each $name, $size in $gridSizesMap { @for $i from 12 through 1 { .col-#{$name}-#{$i} { @extend %col; } } @media (min-width: #{$size}) { @include colsWidthGenerator($name); } }