简体   繁体   English

scss中未定义的变量

[英]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 thisless你可以这样做

.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 .解决方案是使用mapmap-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM