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

Sass函数内@each循环未生效问题:quote-btn-paddings函数返回原始Map值而非乘算后结果

解决Sass函数中@each循环未正确更新Map的问题

我明白你遇到的问题了——在函数外部跑相同的循环逻辑能得到正确的乘算后Map,但放到quote-btn-paddings函数里就只返回原始值,这确实让人头疼。

问题根源

你的函数里犯了一个常见的变量作用域和逻辑顺序问题:
你在函数内部直接复用了外部的$quote-btn-paddings变量名,并且在@each循环中每次都基于原始的Map去做map-merge。虽然你每次循环后会把新值赋值给局部的$quote-btn-paddings,但遍历的对象始终是函数一开始拿到的原始Map,再加上变量名的混淆,导致最终的Map没有被正确更新。

修正方案

我们可以换一种更清晰的逻辑:创建一个全新的空Map,遍历原始的$quote-btn-paddings,把每个断点的padding值乘以乘数后添加到新Map中,最后返回这个新Map。这样完全避免了变量名冲突,逻辑也一目了然。

修正后的函数代码:

@function quote-btn-paddings($width-multiplier: $quote-btn-paddings-multiplier) {
  // 初始化一个空的新Map,用来存储计算后的padding值
  $calculated-paddings: ();
  // 遍历原始的padding配置Map
  @each $breakpoint-size, $original-padding in $quote-btn-paddings {
    // 计算当前断点的新padding值,并存入新Map
    $calculated-paddings: map-set($calculated-paddings, $breakpoint-size, $original-padding * $width-multiplier);
  }
  @return $calculated-paddings;
}

如果你使用的是Sass 3.3及以上版本,还可以用更简洁的map-map函数来实现,它专门用来批量处理Map的每个键值对:

@function quote-btn-paddings($width-multiplier: $quote-btn-paddings-multiplier) {
  @return map-map($quote-btn-paddings, $key, $value) {
    @return $value * $width-multiplier;
  };
}

验证效果

现在调用quote-btn-paddings()函数时,就会返回所有断点padding都乘以指定乘数后的Map了。你的@mixin quote-btn也能正确拿到这个计算后的Map,实现原始元素和变体元素的尺寸一致性,同时支持单独修改乘数调整所有变体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:32:50