首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问列表中较少的变量名称

访问列表中较少的变量名称
EN

Stack Overflow用户
提问于 2016-04-07 03:21:35
回答 1查看 46关注 0票数 1

好的,假设我有一个更少的文件,如下所示:

代码语言:javascript
复制
// Turquoise
@turquoise: #1ABC9C;
@turquoise-2: #16A085;

// Greens
@green: #2ECC71;
@green-2: #27AE60;

// Blues
@blue: #3498DB;
@blue-2: #2980B9;

// Navy Blues
@navy: #34495E;
@navy-2: #2C3E50;

// Purples
@purple: #9B59B6;
@purple-2: #8E44AD;

// Yellows
@yellow: #F1C40F;

// Oranges
@orange: #F39C12;
@orange-2: #E67E22;
@orange-3: #D35400;

// Reds
@red: #E74C3C;
@red-2: #C0392B;

// Greys
@grey: #ECF0F1;
@grey-2: #BDC3C7;
@grey-3: #95A5A6;
@grey-4: #7F8C8D;

@colour-scheme:
    @red, @red-2,
    @orange, @orange-2, @orange-3,
    @yellow,
    @green, @green-2,
    @turquoise, @turquoise-2,
    @blue, @blue-2,
    @purple, @purple-2,
    @navy, @navy-2,
    @grey, @grey-2, @grey-3, @grey-4
;

我想做一个像这样的mixin

代码语言:javascript
复制
.createBG( @colour-array: @colour-scheme, @n: length( @colour-scheme ), @i: 0 ){
    &.<[COLOUR-ARRAY[@i] VARIABLE NAME]>{
        background-color: extract( @colour-array, @i );
    }
    .createBG( @colour-array, ( @i + 1 ) )
}

如何用有效的、较少的代码替换<[COLOUR-ARRAY[@i] VARIABLE NAME]>,这些代码将给出列表/数组当前索引的变量名。

实现这一目标的可靠方法和最佳实践是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-07 04:43:33

您可以使用extract函数本身来实现这一点,只需将颜色变量名称设置为@color-scheme变量的值,而不是将变量本身赋予它。在混合器中,可以使用@@将变量的名称解析为其实际颜色值。

代码语言:javascript
复制
@colour-scheme:
  red, red-2, orange, orange-2, orange-3, yellow, green, green-2, turquoise, turquoise-2,
  blue, blue-2, purple, purple-2, navy, navy-2, grey, grey-2, grey-3, grey-4;

.createBG(@colour-array: @colour-scheme, @n: length(@colour-scheme), @i: 1 ) when (@i <= @n){
  @color: extract(@colour-array, @i);
  &.@{color}{
    background-color: @@color;
  }
  .createBG( @colour-array, @n, @i + 1 )
}
.createBG();

因为您还需要颜色名称(作为类名),所以您肯定需要将名称存储在某个变量中,因此不可能有太多的缩减。但我们仍然可以使用关联数组。下面提供了关联数组的示例。

代码语言:javascript
复制
@colour-scheme:
  red #E74C3C, red-2 #C0392B,
  orange #F39C12, orange-2 #E67E22, orange-3 #D35400,
  yellow #F1C40F,
  green #2ECC71, green-2 #27AE60,
  turquoise #1ABC9C, turquoise-2 #16A085,
  blue #3498DB, blue-2 #2980B9,
  purple #9B59B6, purple-2 #8E44AD,
  navy #34495E, navy-2 #2C3E50,
  grey #ECF0F1, grey-2 #BDC3C7, grey-3 #95A5A6, grey-4 #7F8C8D;

.createBG(@colour-array: @colour-scheme, @n: length(@colour-scheme), @i: 1 ) when (@i <= @n){
  @color-name-hex: extract(@colour-array, @i);
  @color-name: extract(@color-name-hex, 1);
  @color-hex: extract(@color-name-hex, 2);
  &.@{color-name}{
    background-color: @color-hex;
  }
  .createBG( @colour-array, @n, @i + 1 )
}
.createBG();

注意:查看了v2.6.1中的这只虫子,它可能会破坏您的循环。然而,It 将是固定的

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36466132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档