В настоящее время ваш код не работает, потому что вы забыли поставить %
перед #{$val}
:
.box {
@extend %#{$val} !optional;
}
Во всяком случае, не стоит помещать селекторы-заполнители в миксин, потому что каждый размиксин называется, вы создаете новые селекторы.Это означает, что, например, если вы добавите:
.randomSelector {
@include box(box-one);
}
Вы получите:
.wrap .box { ... }
.randomSelector .box { ... }
Вместо:
.randomSelector .box, .wrap .box { ... }
Поэтому я бы порекомендовал вам вывести его на экстернализацию.%box-one
и %box-two
.
И последнее: если единственное различие между этими двумя классами - это свойство background
, возможно, лучше использовать один класс, перегруппировавший свойства commons:
.box {
width: $size-s;
height: $size-s;
margin: auto;
border-radius: 6px;
}
%box-one {
background: $color-1;
}
%box-two {
background: $color-2;
}
@mixin box($val) {
.box {
@extend %box-#{$val} !optional;
}
}
.wrap {
width: 100%;
height: 100px;
background: #f5f5f5;
display: flex;
justify-content: space-between;
@include box(one);
}
Если у вас есть больше стилей ящиков, вы даже можете динамически создавать заполнители:
$boxStyles: (
one: $color-1,
two: $color-2
);
@each $box, $style in $boxStyles {
%box-#{$box} {
background: $style;
}
}