首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCSS/SASS @ HEX和RGB格式的每个循环调色板

SCSS/SASS @ HEX和RGB格式的每个循环调色板
EN

Stack Overflow用户
提问于 2020-10-15 15:50:08
回答 1查看 549关注 0票数 1

如何通过使用@each循环显示带有HEX和RGB格式的调色板

调色板变量:

代码语言:javascript
复制
$colors: (
  "transparent": transparent,
  "current": currentColor,
  "white": (
    hex: #FFFFFF,
    rgb: (255, 255, 255)
  ),
  "black": (
    hex: #000000,
    rgb: (0, 0, 0)
  )
) !default;

编译为CSS :后所期望的结果

代码语言:javascript
复制
.color-transparent {
  color: transparent;
}

.color-current {
  color: currentColor;
}

.color-white {
  --color-opacity: 1;
  color: #FFFFFF;
  color: rgba(255, 255, 255, var(--color-opacity));
}

.color-black {
  --color-opacity: 1;
  color: #000000;
  color: rgba(0, 0, 0, var(--color-opacity));
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-15 17:04:54

下面是如何使用@each和地图实现的。

代码语言:javascript
复制
$colors: (
  "transparent": transparent,
  "current": currentColor,
  "white": (
    hex: #FFFFFF,
    rgba: (255, 255, 255, var(--color-opacity))
  ),
  "black": (
    hex: #000000,
    rgba: (0, 0, 0, var(--color-opacity))
  )
) !default;

// $COLOR = KEY, $VALUE = VALUE, $COLORS = MAP
@each $color, $value in $colors {
    // SINGLE VALUE
    @if $color == "transparent" {
       .color-#{$color} {
           color: #{$value};
       }
    } @else if $color == "current" {
        .color-#{$color} {
            color: $value;
        }
    // SUBMAP - SINCE $VALUE IS ANOTHER MAP HERE.   
    } @else {
        // SET THE COLOR NAME
        .color-#{$color} {
        // SET YOUR COLOR OPACITY    
        --color-opacity: 1;
        // LOOP THROUGH THE TWO COLORS IN THE SUBMAP
        @each $color_name, $value_c in $value {
            @if $color_name == hex {
                color: $value_c;
            } @else {
                color: rbga( $value_c );
               }
            }
        }
    }
}

CSS输出

代码语言:javascript
复制
.color-transparent {
  color: transparent;
}

.color-current {
  color: currentColor;
}

.color-white {
  --color-opacity: 1;
  color: #FFFFFF;
  color: rbga(255, 255, 255, var(--color-opacity));
}

.color-black {
  --color-opacity: 1;
  color: #000000;
  color: rbga(0, 0, 0, var(--color-opacity));
}

编辑RGBA()函数

要解决rgba()抛出通道错误时的问题,可以在hex部分之后删除@else,并将十六进制值传递给rgba()函数。这将将十六进制转换为rgb值。

代码语言:javascript
复制
$colors: (
  "transparent": transparent,
  "current": currentColor,
  "white": (
    hex: #FFFFFF,
    rgba: (255, 255, 255, var(--color-opacity))
  ),
  "black": (
    hex: #000000,
    rgba: (0, 0, 0, var(--color-opacity))
  )
) !default;

// $COLOR = KEY, $VALUE = VALUE, $COLORS = MAP
@each $color, $value in $colors {
    // SINGLE VALUE
    @if $color == "transparent" {
       .color-#{$color} {
           color: #{$value};
       }
    } @else if $color == "current" {
        .color-#{$color} {
            color: $value;
        }
    // SUBMAP - SINCE $VALUE IS ANOTHER MAP HERE.   
    } @else {
        // SET THE COLOR NAME
        .color-#{$color} {
            // SET YOUR COLOR OPACITY    
            --color-opacity: 1;
            // LOOP THROUGH THE TWO COLORS IN THE SUBMAP
            @each $color_name, $value_c in $value {
                // WE ONLY WANT TO USE HEX, BECAUSE RGBA() IS A NATIVE FUNCTION
                @if $color_name == hex {
                color: $value_c;
                color: rgba( $value_c, var(--color-opacity));
                } 
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64375303

复制
相关文章

相似问题

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