if-statement - 在 SASS 中的 if 语句中使用“每个循环变量”
问题描述
我正在尝试通过 SASS 中的每个循环生成一堆样式。只有设置了每个循环现在正在查看的变量,才应该生成样式。
我尝试了不同的变量“样式”,例如:$use-#{$type},但我有点迷路了。甚至尝试用函数来做,但似乎函数无法访问循环的变量。
$typo: (t1, t2);
$use-t1: 1; $t1-color: black;
$use-t2: 1; $t2-color: black;
@each $type in $typo{
@if $#{use-$type} == 1{
.#{$type}{
color: $#{$type}-color;
}
}
}
我希望每个循环的第一轮中的变量是:
- $#{use-$type} -> $use-t1 -> 1
- $#{$type}-颜色 -> $t1-颜色 -> 黑色
但两者都抛出“预期标识符”。或“未知变量”,取决于我如何尝试。
解决方案
您不能使用插值引用变量 - 在您的情况下$#{$type}-color
。我建议您改用地图 - 例如:
$map: (
t1: (use: 1, color: black),
t2: (use: 2, color: white)
);
@each $key, $value in $map {
@if map-get($value, use) == 1 {
.#{$key} { color: map-get($value, color); }
}
}
// output
.t1 { color: black; }
作为旁注,值得知道 Sass 不会打印具有空值的属性或没有属性的类 - 为什么您可以在不检查的情况下执行上述操作use
$map: (
t1: (color: black),
t2: (color: null) // no color => no prop => empty class => nothing printed
);
@each $key, $value in $map {
.#{$key} { color: map-get($value, color); }
}
// output
.t1 { color: black; }
推荐阅读
- python - ValueError:不是有效的 sha256_crypt 哈希
- r - 嵌套的 appendTab R
- ruby-on-rails-5 - Rails ActionMailer 用户邮件程序无方法
- c# - C#应用程序与本地api断开连接,使用如何在不重新启动程序的情况下重新连接
- python - 在具有相同键的字典中添加值
- swift - 如何重新创建这种折叠并移动到后台 UITableViewCell 效果?里面的GIF
- performance - 为什么在哈希表中查找是 O(1)?
- php - 为什么密码参数在 exec() 中读取为用户名
- rust - 将模板渲染到 rust Rocket 中的字符串
- c# - 如何将 JSON 字符串转换为与 xUnit/.NET Core API 兼容的对象?