Sass @each和@ if / else mixin片段?

时间:2018-09-16 22:20:22

标签: css sass scss-mixins

我是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 个答案:

答案 0 :(得分:0)

您应该使用$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);
        }
    }
}

答案 1 :(得分:0)

另一个好的解决方案是使用映射:也许它更具可读性(因为您立即关联了键值),而不必在@each循环内使用@if语句:

$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);
  }
}