CSS-SASS : Using @each based mixins to generate multiple backgrounds

标签 css sass

我正在使用 CSS 创建发型和颜色目录。我有 55 种不同颜色和发型的组合。每种发型和颜色都有自己的图像 SVG 文件,我需要将它们全部组合成一个背景(使用 CSS3 的多背景功能)。

我编写了这个混合来生成多个背景:(它基于 mixin in this post )

@mixin style-matrix($colors, $styles) {
    @each $s in $styles {
        @each $c in $colors {


                url("pps#{$s}#{$c}.svg"),
        }
    }
}



$colors: blonde, red, dkbrown, ltbrown, black;
$styles: hairboy1, hairboy2, hairboy3, hairboy4, hairboy5, hairgirl6, hairgirl1, hairgirl4, hairgirl2, hairgirl3, hairgirl5;

.hidden {
background: @include style-matrix($colors, $styles) url("base.svg);
}

(请参阅此处的 codepen)

但是,每次运行 mixin 时,我都会收到此错误消息:

Invalid CSS after "...            url": expected "{", was "("pps#{$s}#{$c}..."

如何使用 mixin 生成多个背景?

最佳答案

Mixins 返回属性/值对。如果您只想要值,则需要一个函数。它看起来像这样:

@function style-matrix($colors, $styles) {
  $bg: compact();
  @each $s in $styles {
    @each $c in $colors {
      $bg: join($bg, url("pps#{$s}#{$c}.svg"), comma);
    }
  }
  @return $bg;
}

.hidden {
  background: style-matrix($colors, $styles), url("base.svg");
}

关于CSS-SASS : Using @each based mixins to generate multiple backgrounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12825039/

相关文章:

javascript - 通过 CSS 或 JavaScript/JQuery 设置元素高度

html - 响应式 CSS 网格(1 列移动设备,2 平板电脑,3 桌面设备)设置

css - Twitter Bootstrap 3.0 响应式 IMG 高度问题

javascript - Sourcemap 到原始 SCSS 文件

PHP CSS 从字符串到数组

html - 将图标垂直对齐到第一行文本的中心

css - 在 sublime text 的多语言语法上使用相同的自动完成

css - 如何创建基于flexbox的网格系统?

html - 如何在单个 td 的边框上应用多种颜色(仅限左侧)?就像下面的附图一样

html - 为 Bootstrap 4 创建自定义网格数 (24)