Skip to content

Instantly share code, notes, and snippets.

@JoshMLeslie
Last active July 14, 2020 20:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JoshMLeslie/1899f0ff484201f12efedc01ee5b1ec9 to your computer and use it in GitHub Desktop.
Save JoshMLeslie/1899f0ff484201f12efedc01ee5b1ec9 to your computer and use it in GitHub Desktop.
// programmatic generation of scss spacer classes to produce alike:
// .mt-1 { margin-top: 1rem; }
$spacings: (margin: m, padding: p);
$directions: (top: t, right: r, bottom: b, left: l);
@mixin makeSpacing($rems) {
$sizing: 0;
$remString: #{$rems};
$splitStr: str-index($remString, '.');
@if ($splitStr) {
$front: str-slice($remString, $splitStr - str-length($remString) + 1, $splitStr - 1);
$back: str-slice($remString, $splitStr + 1, -1);
$sizing: $front + '-' + $back;
} @else {
$sizing: $remString;
}
@each $spc, $spc-a in $spacings {
@each $dir, $dir-a in $directions {
.#{$spc-a}#{$dir-a}-#{$sizing} {
#{$spc}-#{$dir}: #{$rems}rem;
}
}
.#{$spc-a}x-#{$sizing} {
@extend .#{$spc-a}r-#{$sizing};
@extend .#{$spc-a}l-#{$sizing};
}
.#{$spc-a}y-#{$sizing} {
@extend .#{$spc-a}t-#{$sizing};
@extend .#{$spc-a}b-#{$sizing};
}
.#{$spc-a}-#{$sizing} {
@extend .#{$spc-a}x-#{$sizing};
@extend .#{$spc-a}y-#{$sizing};
}
}
}
@include makeSpacing(0.5);
@include makeSpacing(1);
@include makeSpacing(1.5);
@include makeSpacing(2);
@include makeSpacing(2.5);
@JoshMLeslie
Copy link
Author

returns alike:

.mt-0-5, .my-0-5, .m-0-5 {
  margin-top: 0.5rem;
}

.mr-0-5, .mx-0-5, .m-0-5 {
  margin-right: 0.5rem;
}

.mb-0-5, .my-0-5, .m-0-5 {
  margin-bottom: 0.5rem;
}

.ml-0-5, .mx-0-5, .m-0-5 {
  margin-left: 0.5rem;
}

.pt-0-5, .py-0-5, .p-0-5 {
  padding-top: 0.5rem;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment