跳到主要内容

映射(Maps)

发布 v3.5.0

使用规则集和混合器作为值的映射

通过将命名空间与查找 [] 语法相结合,你可以将规则集/混合器转换为映射。

@sizes: {
mobile: 320px;
tablet: 768px;
desktop: 1024px;
};

.navbar {
display: block;

@media (min-width: @sizes[tablet]) {
display: inline-block;
}
}

输出:

.navbar {
display: block;
}
@media (min-width: 768px) {
.navbar {
display: inline-block;
}
}

由于命名空间和重载混合器的能力,混合器比规则集更具通用性。

#library() {
.colors() {
primary: green;
secondary: blue;
}
}

#library() {
.colors() {
primary: grey;
}
}

.button {
color: #library.colors[primary];
border-color: #library.colors[secondary];
}

输出:

.button {
color: grey;
border-color: blue;
}

你还可以通过 Aliasing Mixins 使其更加简单。也就是说:

.button {
@colors: #library.colors();
color: @colors[primary];
border-color: @colors[secondary];
}

请注意,如果查找值产生另一个规则集,则可以附加第二个 [] 查找,如下所示:

@config: {
@options: {
library-on: true;
};
};

& when (@config[@options][library-on] = true) {
.produce-ruleset {
prop: val;
}
}

通过这种方式,规则集和变量调用可以模拟一种类似于混合器的“命名空间”类型。

至于是使用混合器还是分配给变量的规则集作为映射,这取决于你。你可能希望通过重新声明分配给规则集的变量来替换整个映射。或者你可能希望“合并”单个键/值对,在这种情况下,混合器作为映射可能更合适。

在查找中使用变量变量

需要注意的一件重要事情是,在 [@lookup] 中的值是键(变量)名称 @lookup,而不是作为变量进行评估。如果你希望键名本身是可变的,则可以使用 @@variable 语法。

例如

.foods() {
@dessert: ice cream;
}

@key-to-lookup: dessert;

.lunch {
treat: .foods[ @@key-to-lookup];
}

这将输出:

.lunch {
treat: ice cream;
}