[英]Undefined variable in scss
I have some variables like this:我有一些这样的变量:
$shadow-depth-1: 0 2px 1px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity),
0 1px 1px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
0 1px 3px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
$shadow-depth-2: 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),
0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
$shadow-depth-3: 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),
0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
$shadow-depth-4: 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity),
0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
and I create a mixin to operate these variables.我创建了一个 mixin 来操作这些变量。
@mixin createShadow($depth) {
$shadow: $shadow-depth-$depth;
}
But the scss compiler gave me an error Undefined variable
但是 scss 编译器给了我一个错误Undefined variable
and I tried this我试过这个
@mixin createShadow($depth) {
$shadow: #{$shadow-depth-#{$depth}};
box-shadow: $shadow;
}
It also gave me an error.它也给了我一个错误。
I tried to find some useful information in official documentation, but I gained nothing.我试图在官方文档中找到一些有用的信息,但我一无所获。
I find in less
you can do it like this我less
你可以这样做
.create-shadow(@depth) {
@shadow: 'shadow-depth-@depth';
box-shadow: @@shadow;
}
So, i want to ask how to realize it in scss
?所以,我想问一下如何在scss
中实现它?
This is impossible and it is mentioned in SASS documentation: https://sass-lang.com/documentation/variables#advanced-variable-functions这是不可能的,它在 SASS 文档中提到: https://sass-lang.com/documentation/variables#advanced-variable-functions
Users occasionally want to use interpolation to define a variable name based on another variable.用户偶尔希望使用插值来定义基于另一个变量的变量名称。 Sass doesn't allow this, because it makes it much harder to tell at a glance which variables are defined where. Sass 不允许这样做,因为这样一目了然就更难分辨哪些变量是在哪里定义的。 What you can do, though, is define a map from names to values that you can then access using variables.但是,您可以做的是定义 map 从名称到值,然后您可以使用变量访问这些值。
The solution is using map
and map-get
.解决方案是使用map
和map-get
。
I did not find any solutions that we can code like less, but we can use Maps
like this我没有找到任何我们可以编写代码的解决方案,但我们可以像这样使用Maps
$shadow-depth-1: 0 2px 1px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity),
0 1px 1px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
0 1px 3px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
$shadow-depth-2: 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),
0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
$shadow-depth-3: 0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),
0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
$shadow-depth-4: 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity),
0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
$shadow-depth: (
shadow-depth-1: $shadow-depth-1,
shadow-depth-2: $shadow-depth-2,
shadow-depth-3: $shadow-depth-3,
shadow-depth-4: $shadow-depth-4,
);
and in mixin, we can code like this在mixin中,我们可以这样编码
@mixin createShadow($depth) {
$shadow: map-get($shadow-depth, shadow-depth-#{$depth});
box-shadow: $shadow;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.