Sass 我可以在mixin内部生成变量以在外部使用它吗!全球的?

Sass 我可以在mixin内部生成变量以在外部使用它吗!全球的?,sass,Sass,我正在创建一个主题系统,并希望根据范围重用一些变量,如: .black-friday { @include generate-theme('black', 'yellow'); } .light-theme { @include generate-theme('blue', 'pink'); } .dark-theme { @include generate-theme('black', 'orange'); } 我不想用声明变量!全局,因为它将覆盖以前的var,并

我正在创建一个主题系统,并希望根据范围重用一些变量,如:

.black-friday {
    @include generate-theme('black', 'yellow');
}

.light-theme {
    @include generate-theme('blue', 'pink');
}

.dark-theme {
    @include generate-theme('black', 'orange');
}
我不想用
声明变量!全局
,因为它将覆盖以前的var,并且不存在于封闭范围内

我想在一个范围内使用它,这样我只需更改一个类就可以轻松地更改主题

这是我的尝试:

$colors: (
    pink: (
        light: lighten(#F91364, 20),
        normal: #F91364,
        dark: darken(#F91364, 20)
    ),
    blue: (
        light: lighten(#3E61FF, 20),
        normal: #3E61FF,
        dark: darken(#3E61FF, 20)
    ),
);

$contrasts: (
    pink: (
        light: #eee,
        normal: #fff,
        dark: #fff
    ),
    blue: (
        light: #eee,
        normal: #fff,
        dark: #fff
    )
)

@function get-color($color, $force: 'normal') {
    $chosenColor: map-get($colors, $color);
    @return map-get($chosenColor, $force);
}

@function get-contrast($color, $force: 'normal') {
    $chosenColor: map-get($contrasts, $color);
    @return map-get($chosenColor, $force);
}

@mixin generate-theme($primary, $accent) {
    $primary-color: get-color($primary);
    $primary-light-color: get-color($primary, 'light');
    $primary-dark-color: get-color($primary, 'dark');

    $primary-contrast-color: get-contrast($primary);
    $primary-light-contrast-color: get-contrast($primary, 'light');
    $primary-dark-contrast-color: get-contrast($primary, 'dark');

    $accent-color: get-color($accent);
    $accent-light-color: get-color($accent, 'light');
    $accent-dark-color: get-color($accent, 'dark');

    $accent-contrast-color: get-contrast($accent);
    $accent-light-contrast-color: get-contrast($accent, 'light');
    $accent-dark-contrast-color: get-contrast($accent, 'dark');
}

如果我的回答是正确的,那么答案是:不,不可能,这些变量是局部变量,使它们成为全局变量的唯一方法是使用
!全局的
,使其成为全局的。我还有另一个选择:

一个
@函数get variables($primary,$accent)
返回一个包含所有变量的映射,作为键、值对,可以在需要时调用


或者您需要以一种方式更改代码,
@mixin generate theme
本身包括所有其他具有适当参数的mixin。

哪些变量不应是全局变量?颜色?通过
@mixin generate主题生成的颜色
在创建类/选择器并扩展它们之前,我使用了
@函数
方法。这样我就可以创建我想要的主题系统。谢谢你/