【问题标题】:Sass map loop possibilitiesSass 地图循环的可能性
【发布时间】:2015-06-30 07:23:28
【问题描述】:

我有一个很长的 sass 地图,作为片段是 (full code in Codepen):

$pbcolors: (

pbcyan : (
50:  #E5F5FC,
100: #CCEBF9,
200: #99D7F2,
300: #66C3EC,
400: #33AFE5,
500: #009DBF,
600: #008CAB,
700: #007C98,
800: #006D85,
900: #005D72
),
pbmediumblue: (
50:  #E5F1F8,
100: #CCE3F1,
200: #99C7E3,
300: #66AAD4,
400: #338EC6,
500: #0072B8,
600: #0065A5,
700: #005A93,
800: #004F80,
900: #00436E
),
pbpurple: (
50:  #F5ECF5,
100: #ECD9EB,
200: #D9B2D7,
300: #C68CC3,
400: #B365AF,
500: #A03F9B,
600: #90388B,
700: #80327C,
800: #702C6C,
900: #60255D
);

我正在尝试编写一个循环来创建一系列以颜色和阴影命名的类,并将 bg 颜色作为十六进制,就像这样

.bg-pbmediumblue-100 { background: #CCE3F1; }

但是,我的语法必须被打破,因为我没有跳到第二级:

@each $item, $color in $pbcolors {
  @each $shade, $value in $item {
    .bg-#{$shade}-#{$shade} {
      background-color: map-get(map-get($pbcolors, $item), 50);
    }
  }
}

从这里我只得到每种颜色的 50 个,以及错误的类名:

.bg-pbcyan-pbcyan {
   background-color: #E5F5FC;
 }

.bg-pbmediumblue-pbmediumblue {
   background-color: #E5F1F8;
 }

我搞砸了什么?

【问题讨论】:

    标签: css loops dictionary sass


    【解决方案1】:

    您引用了错误的变量。 $item 变量(第一个)引用映射 key 名称,而不是 value(第二个)。您需要遍历内部循环中的值。

    @each $item, $color in $pbcolors {
      @each $shade, $value in $color {
        .bg-#{$item}-#{$shade} {
          background-color: $value;
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      虽然我仍然很想知道如何制作那个循环,但我最终还是使用了一个函数,我们可以在需要时调用色调,而不是不管是否需要都打印出来。

      @function pbcolor($pbcolor, $tone: 500) {
         @return map-get(map-get($pbcolors, $pbcolor), $tone);
      }
      

      这样,按需取色就很简单了:

      .oneway {
        color: pbcolor(pbcyan, 500);
       }
      

      甚至

      .oneway {
        color: pbcolor(pbcyan);
       }
      

      获取默认的 500 色度。

      【讨论】:

        猜你喜欢
        • 2017-03-06
        • 2020-03-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多