将字符串传递到sass mixin中的变量中

将字符串传递到sass mixin中的变量中,sass,Sass,我有一个非常简单的mixin,如下所示: @mixin global( $variable-name ) { font-size: #{$variable-name}-font-size; } 我之前定义了变量$input font size,并将其以以下格式传递到mixin中 @include global( input ); 问题是sass没有转换它,浏览器返回: 字体大小:输入字体大小 我应该如何写我的mixin来实际返回$input font size的值 提前感谢您的建

我有一个非常简单的mixin,如下所示:

@mixin global( $variable-name ) {
    font-size:   #{$variable-name}-font-size;
}
我之前定义了变量$input font size,并将其以以下格式传递到mixin中

@include global( input );
问题是sass没有转换它,浏览器返回:

字体大小:输入字体大小

我应该如何写我的mixin来实际返回$input font size的值


提前感谢您的建议

不能在sass中创建动态变量

“#{}”意味着它将把任何属性转换为它的纯css形式,它不会被视为变量,而是被视为文本

您可以做的是为属性列表创建一个映射,并在mixin中调用它们

$input-font-size: 16px;
$textarea-font-size: 14px;


$var-map: (
  input: $input-font-size, 
  textarea:  $textarea-font-size,
);

@mixin global( $variable-name ) {
    font-size:  map-get($var-map, $variable-name);
}

body {
  @include global( input );
}
或者,如果不想创建映射,则只需在mixin中传递变量名即可

@mixin sec( $variable-name ) {
  font-size: $variable-name;
}
.text-area {
  @include sec( $textarea-font-size );
}
样品笔
您不能在sass中创建动态变量

“#{}”意味着它将把任何属性转换为它的纯css形式,它不会被视为变量,而是被视为文本

您可以做的是为属性列表创建一个映射,并在mixin中调用它们

$input-font-size: 16px;
$textarea-font-size: 14px;


$var-map: (
  input: $input-font-size, 
  textarea:  $textarea-font-size,
);

@mixin global( $variable-name ) {
    font-size:  map-get($var-map, $variable-name);
}

body {
  @include global( input );
}
或者,如果不想创建映射,则只需在mixin中传递变量名即可

@mixin sec( $variable-name ) {
  font-size: $variable-name;
}
.text-area {
  @include sec( $textarea-font-size );
}
样品笔

谢谢@karthick。这将与一个小混入很好的工作。问题是我的混音器很大,地图会永远消失。如果你想有一个简短的符号的变量,那么这就是方法。或者,您可以始终将变量名直接传递到mixin global($variable name){font size:$variable name;}中,并像include global($input font size)一样包含它;在sass文件中仍然会有同样多的变量,对吗?那么,为什么创建地图是一项艰巨的任务呢。您可以创建一个包含所有变量的var文件,然后创建一个包含相同变量的map文件。只需要在变量前面加上一个键。谢谢@karthick。实际的mixin看起来像这样,我想更改变量,例如select或textarea。说句公道话,我从来没用过地图,所以我很困惑。你认为有更好的解决方法吗?嗨@Dom你不能在sass中创建动态变量。这就是我建议使用地图的原因。如果您担心创建一个巨大的地图。您可以根据某些组创建较小的地图,然后访问它。谢谢@karthick。这将与一个小混入很好的工作。问题是我的混音器很大,地图会永远消失。如果你想有一个简短的符号的变量,那么这就是方法。或者,您可以始终将变量名直接传递到mixin global($variable name){font size:$variable name;}中,并像include global($input font size)一样包含它;在sass文件中仍然会有同样多的变量,对吗?那么,为什么创建地图是一项艰巨的任务呢。您可以创建一个包含所有变量的var文件,然后创建一个包含相同变量的map文件。只需要在变量前面加上一个键。谢谢@karthick。实际的mixin看起来像这样,我想更改变量,例如select或textarea。说句公道话,我从来没用过地图,所以我很困惑。你认为有更好的解决方法吗?嗨@Dom你不能在sass中创建动态变量。这就是我建议使用地图的原因。如果您担心创建一个巨大的地图。您始终可以基于某些组创建较小的地图,然后访问它。