$positions: ( t: ('top'), r: ('right'), b: ('bottom'), l: ('left'), x: ('left', 'right'), y: ('top', 'bottom') ); @mixin sizeValue($prop, $i) { #{$prop}: ($i * .5em); }; @for $i from 0 to 6 { @each $prop, $propValue in (m: 'margin', p: 'padding') { .#{$prop}-#{$i} { @include sizeValue((#{$propValue}), $i); } @each $var, $value in $positions { .#{$prop}#{$var}-#{$i} { @each $pos in $value { @include sizeValue((#{$propValue}-#{$pos}), $i); } } @if ($i == 0 and $prop == 'm') { .m#{$var}-auto { @each $pos in $value { margin-#{$pos}: auto; } } } } } }