You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SCSS @each循环生成@keyframes报SassError:$color不是颜色如何解决

错误原因

  • 你定义的$alarmRgb这类变量本质是三个数值组成的列表,不是Sass内置的color数据类型,无法直接传入rgba()函数作为第一个参数
  • 你使用#{}插值、unquote()操作的逻辑是把值转成纯文本字符串,反而更不符合Sass内置函数的参数类型要求,因此触发报错

修复方案(推荐写法)

直接把变量定义为合法的Sass RGB颜色类型,Sass的rgba()函数原生支持「传入已有的rgb颜色+单独的透明度值」的用法,不需要手动拆分RGB通道数值:

// 直接定义为Sass识别的rgb颜色类型
$alarmRgb: rgb(255, 213, 0);
$infoRgb: rgb(25, 97, 166);
$warnRgb: rgb(240, 111, 50);
$errorRgb: rgb(228, 35, 38);
$successRgb: rgb(0, 149, 52);

$pulseList:(
  alarm: $alarmRgb,
  info: $infoRgb,
  warn:  $warnRgb,
  error: $errorRgb,
  success: $successRgb
);

@each $key, $val in $pulseList {
  @keyframes pulse-#{$key}  {
    0% {
      box-shadow: 0 0 0 0 rgba($val, 0.7);
    }
    70% {
      box-shadow: 0 0 0 10px rgba($val, 0);
    }
    100% {
      box-shadow: 0 0 0 0 rgba($val, 0);
    }
  }
}

可选方案(保留三值列表写法)

如果你确实需要单独存储RGB三个通道的数值,可以用nth()函数手动提取列表对应位置的数值传入rgba():

// 原有变量定义不变
$alarmRgb: 255, 213, 0;
$infoRgb: 25, 97, 166;
$warnRgb: 240, 111, 50;
$errorRgb: 228, 35, 38;
$successRgb: 0, 149, 52;

$pulseList:(
  alarm: $alarmRgb,
  info: $infoRgb,
  warn:  $warnRgb,
  error: $errorRgb,
  success: $successRgb
);

@each $key, $val in $pulseList {
  @keyframes pulse-#{$key}  {
    0% {
      box-shadow: 0 0 0 0 rgba(nth($val, 1), nth($val, 2), nth($val, 3), 0.7);
    }
    70% {
      box-shadow: 0 0 0 10px rgba(nth($val, 1), nth($val, 2), nth($val, 3), 0);
    }
    100% {
      box-shadow: 0 0 0 0 rgba(nth($val, 1), nth($val, 2), nth($val, 3), 0);
    }
  }
}

内容的提问来源于stack exchange,提问作者NewToAngular

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:36:06