Вот довольно простой миксин, чтобы делать то, что вы хотите:
@mixin generate($prefix, $property) {
// List of sizes to generate for each
$sizes: [0, .25, .5, 1, 1.5, 3];
// Spacing to multiply the sizes by
$spacing: 1rem;
// Loop through all of the sizes(we use @for rather than @each, as we want access to the index)
@for $i from 1 through length($sizes) {
// Get the size for the current index
$size: nth($sizes, $i);
// Create the rule
.#{$prefix}-#{$i - 1} {
#{$property}: $spacing * $size;
}
}
}
Использование этого миксина будет выглядеть так:
@include generate(ml, margin-left);
И будет компилироваться в:
.ml-0 {
margin-left: 0rem;
}
.ml-1 {
margin-left: 0.25rem;
}
.ml-2 {
margin-left: 0.5rem;
}
.ml-3 {
margin-left: 1rem;
}
.ml-4 {
margin-left: 1.5rem;
}
.ml-5 {
margin-left: 3rem;
}
Вы можете поиграть с этим sassmeister .
Когда дело доходит до генерации их для большого количества свойств, вы можете сделать еще один шаг и использовать @each
:
$rules: [
[ml, margin-left],
[mt, margin-top],
[mb, margin-bottom],
[mr, margin-right],
];
@each $item in $rules {
@include generate(nth($item, 1), nth($item, 2));
}
И еще один sassmeister для вашего удобства.
Хотя вы могли бы пойти глубже и просто перебрать -top
, -bottom
и т. Д.так что вам просто нужно указать свойство, и все остальное будет сгенерировано, я не знаю ваш вариант использования, и вы можете выяснить это.