更少的CSS-有条件地返回变量

更少的CSS-有条件地返回变量,css,less,Css,Less,我使用较少的CSS,并且已经使用了“返回”功能 .get-theme-color(@theme) { @return: ~"@{mdc-theme-@{theme}}"; } 并使用它指定以下值: @var: .get-theme-color(primary)[]; 但是,我尝试使用mixin有选择地返回一个值。我尝试过各种格式-这是我目前正在尝试的工作-但没有成功: .get-property-box(@mask) when (length(@mask) >= 1) and

我使用较少的CSS,并且已经使用了“返回”功能

.get-theme-color(@theme) {
    @return: ~"@{mdc-theme-@{theme}}";
}
并使用它指定以下值:

@var: .get-theme-color(primary)[];
但是,我尝试使用mixin有选择地返回一个值。我尝试过各种格式-这是我目前正在尝试的工作-但没有成功:

.get-property-box(@mask) when (length(@mask) >= 1) and (length(@mask) =< 4) {
    @mask-len: length(@mask);

    @val1: extract(@mask, 1);
    @value: ~"@{val1}";

    & when (@mask-len = 2) {
        @val2: extract(@mask, 2);
        @value: ~"@{val1} @{val2}";
    }
    & when (@mask-len = 3) {
        @val2: extract(@mask, 2);
        @val3: extract(@mask, 3);
        @value: ~"@{val1} @{val2} @{val3}";
    }
    & when (@mask-len = 4) {
        @val2: extract(@mask, 2);
        @val3: extract(@mask, 3);
        @val4: extract(@mask, 4);
        @value: ~"@{val1} @{val2} @{val3} @{val4}";
    }

    @return: @value;
}
输出为:

border-radius: 4rem;
我知道防护装置工作正常(已到达相关部分),但返回值未更新


任何人都得到了关于如何实现这一点的建议吗?

请注意,{}块外部不可见时,{}块中定义的变量(就像它们在
body{}
等常规规则集中不可见一样)。因此,在相应的
{}
块之外,不能(也应该)没有任何效果(有关更多详细信息,请参阅)。如果您将条件转换为以下任一项,那么让它们可见并不是问题:a。设置属性而不是变量。B参数化混合而不是
&当
时(有关示例,请参见链接线程)c
if
函数调用,但是……说到这个特殊的
.get属性框
实现——考虑到它的基本功能只是将逗号分隔的列表转换为空格分隔的列表,显式硬编码每个长度(n)的想法看起来很奇怪。一个循环将以时尚的方式实现这一点。
.mdc-shape(round) {
    @mask: 4rem, 5rem;
    border-radius: .get-property-box(@mask)[];
}
border-radius: 4rem;