一种动态的方法是使用嵌套映射、两个@each 循环和一个mixin。
$flex-direction: (
"name": "flex-direction",
"prefix": "flx-d",
"values": (
"r": "row",
"c": "column",
"rr": "row-reverse",
"cr": "column-reverse"
)
);
$flex-wrap: (
"name": "flex-wrap",
"prefix": "flx-w",
"values": (
"nw": "nowrap",
"w": "wrap",
"wr": "wrap-reverse"
)
);
@mixin createClasses($maps...) {
@each $map in $maps {
$propertyName: map-get($map, "name");
$propertyPrefix: map-get($map, "prefix");
@each $value, $key in map-get($map, "values") {
.#{$propertyPrefix}-#{$value} {
#{$propertyName}: #{$key};
}
}
}
}
@include createClasses($flex-direction, $flex-wrap);
通过上面的例子你会得到:
.flx-d-r {
flex-direction: row;
}
.flx-d-c {
flex-direction: column;
}
.flx-d-rr {
flex-direction: row-reverse;
}
.flx-d-rc {
flex-direction: column-reverse;
}
.flx-w-nw {
flex-wrap: nowrap;
}
.flx-w-w {
flex-wrap: wrap;
}
.flx-w-wr {
flex-wrap: wrap-reverse;
}
这里的“神奇”部分是使用扩展 ... 运算符在 mixin (documentation here) 中传递您想要的任意数量的映射。您只需对所有地图调用一次,它就会创建您的所有类。
SASS版本的代码:
$flex-direction: ("name": "flex-direction", "prefix": "flx-d", "values": ("r": "row", "c": "column", "rr": "row-reverse", "cr": "column-reverse"))
$flex-wrap: ("name": "flex-wrap", "prefix": "flx-w", "values": ("nw": "nowrap", "w": "wrap", "wr": "wrap-reverse"))
=createClasses($maps...)
@each $map in $maps
$propertyName: map-get($map, "name")
$propertyPrefix: map-get($map, "prefix")
@each $value, $key in map-get($map, "values")
.#{$propertyPrefix}-#{$value}
#{$propertyName}: #{$key}
+createClasses($flex-direction, $flex-wrap)