我正在尝试在 Sass 中创建一个 mixin 来生成多个背景,问题是背景的数量是未知的,它可以是 3、4 甚至 5。这里我尝试并失败了。

@mixin multiBg($page: index, $sec: sec01,$from: 1, $to: 3, $type: jpg){
    $url: (); // i'm try to create a empty array first
    $newUrl: null; // and an empty variable
    @for $i from $from through $to {
        $newUrl: append($url, url(../img/#{$page}/#{$sec}_bg0#{$i}.#{$type})); // then append value to variable;
    }
    background: $newUrl;
}

#sec05 {
   @include multiBg(index,sec05);
}

电流输出:
background: url(../img/index/sec05_bg03.jpg);

预期输出:
background: url(../img/sec05_bg01.jpg),url(../img/sec05_bg02.jpg), url(../img/sec05_bg03.jpg);

我不知道如何解决这个问题,因为我还在学习 SASS。有人可以启发我吗?

最佳答案

你在正确的轨道上!但是您的语法和逻辑略有偏差。这是我想出的:

@mixin multiBg($page: index, $sec: sec01, $from: 1, $to: 5, $type: jpg) {

  $url_list: ();

  @for $i from $from through $to {

    // I broke constructing the url and adding it to the set into two steps here.
    // We could do this all at once, but separating it can make it easier to read.

    // First, generate the url.
    $url_string: url(../img/#{$page}/#{$sec}_bg0#{$i}.#{$type});

    // Then add it to the list (the 'comma' part is important)
    $url_list: append($url_list, $url_string, comma);
  }

  // Done looping? Output the final list!
  background-image: $url_list;
}

这似乎返回了你正在寻找的东西。这是列表函数上的 official docs - 我总是忘记一两个,可能对你也有用。

另外,既然你提到你是 sass 的新手 - 如果你还没有,请查看 Sassmeister 。这是一个方便的小沙箱,用于快速制作原型(prototype)并在 sass 中进行尝试;类似于 Codepen 但更专业一点。这是我曾经尝试过这个问题的方法。

关于css - 使用 SASS mixin 创建多个背景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43860603/

10-11 11:22