Sass @each и @if/else фрагмент кода mixin?
Я очень новичок в Sass, и я пытаюсь получить CSS, как это;
.heading-lg {
font-size: 11.2rem;}
.heading-md {
font-size: 11.2rem;}
.heading-sm {
font-size: 11.2rem;}
А вот и мой код SCSS. Но все классы heading-xx получают 11.2rem. Может кто-нибудь, пожалуйста, покажи мне путь? Большое спасибо.
$font-size: 1.6rem;
$heading-size: .8rem;
$heading: lg md sm;
$heading-lg: lg;
$heading-md: md;
$heading-sm: sm;
@each $size in $heading {
.heading-#{$size} {
@if $heading-lg==lg {
font-size: $font-size + $heading-size * (12);
}
@else if $heading-md==md {
font-size: $font-size + $heading-size * (10);
}
@else {
font-size: $font-size + $heading-size * (8);
}
}
}
2 ответа
Решение
Вы должны использовать $size
переменная вместо $heading-lg
, Как указано выше, код $heading-lg
в @each
всегда равно lg, так что результат вашей проблемы.
@each $size in $heading {
.heading-#{$size} {
@if $size==lg {
font-size: $font-size + $heading-size * (12);
}
@else if $size==md {
font-size: $font-size + $heading-size * (10);
}
@else {
font-size: $font-size + $heading-size * (8);
}
}
}
Другим хорошим решением является использование карт: возможно, они более читабельны (потому что вы немедленно связываете ключ-значение), и вам не нужно использовать оператор @if внутри цикла @each:
$font-size: 1.6rem;
$heading-size: .8rem;
$heading-list: (
lg:12,
md:10,
sm:8
);
@each $key, $value in $heading-list {
.heading-#{$key} {
font-size: $font-size + $heading-size * ($value);
}
}