混合、函数和变量名的Sass插值

混合、函数和变量名的Sass插值,sass,Sass,我试图在Sass中循环一个值列表,并使用当前键的插值来动态输出分别使用@include和@extend的类名 这是一支笔,简单地显示了这个问题 正如您在标记中所看到的,我已经尝试在插入字符串的内部和外部包含“x”。在Sass如何支持插值的限制方面,我是否缺少一些东西 (注意:OP笔不见了。这不是笔中的原始代码,而是问题的大致近似值) 在这个时间点,插值对混合或变量不起作用。你必须想出一个不同的方法来实现你的目标 从Sass 3.3开始,您可以将映射用于变量: $dialogs: ( er

我试图在Sass中循环一个值列表,并使用当前键的插值来动态输出分别使用@include和@extend的类名

这是一支笔,简单地显示了这个问题

正如您在标记中所看到的,我已经尝试在插入字符串的内部和外部包含“x”。在Sass如何支持插值的限制方面,我是否缺少一些东西

(注意:OP笔不见了。这不是笔中的原始代码,而是问题的大致近似值)


在这个时间点,插值对混合或变量不起作用。你必须想出一个不同的方法来实现你的目标

从Sass 3.3开始,您可以将映射用于变量:

$dialogs:
    ( error:
        ( light: red
        , dark: darken(red, 10%)
        )
    , success:
        ( light: green
        , dark: darken(green, 10%)
        )
    );

@each $name, $colors in $dialogs {
  .#{$name} {
      color: map-get($colors, dark);
  }
}
功能方面:

@function green() {
  @return lighten(green, 10%);
}

@function red() {
  @return lighten(red, 10%);
}

@mixin my-bg($function-name) {
  background: call($function-name);
}

.foo {
  @include my-bg('red');
}

你不能扩展混音。通常假设插值对变量起作用,如果它起作用的话会是这样的:
background:$foo-{$bar}
是的,我知道你不能扩展一个mixin——你包括一个mixin,这正是我在这里试图在第一行实现的. mixin是“\u something 1”,占位符是“%something 1”(它本身包括\u something 1)——它们是相同的输出。但是,它们的目的不同。.include-something 1用于媒体查询和其他“超出范围”的功能,其中extend无法实现所需的效果。正如我已经回答的,插值在Mixin上不起作用。无论输出是否相同都是不相关的,这是无效的:
@include{nth($tests,$i)}解决方案将更多地取决于您正在做什么。我们发现了同样的问题。感谢@cimmannmixin/Function interpolation的帮助,它正在积极地进行工作,应该包含在未来的版本中:问题是Sass用于编译为CSS。为了“插入”mixin/function/var名称,您需要编译成Sass或“SAASS”(语法上非常棒的语法上非常棒的样式表)。
@function green() {
  @return lighten(green, 10%);
}

@function red() {
  @return lighten(red, 10%);
}

@mixin my-bg($function-name) {
  background: call($function-name);
}

.foo {
  @include my-bg('red');
}