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

Sass混合宏异常:调用任一动画类均应用最后一个类的样式

问题原因与解决方案

问题根源

你写的混合宏里,每次调用都会生成同名的fadeIn关键帧。CSS的规则是:同名的@keyframes会被最后定义的那一个完全覆盖。所以不管你调用.animate-up还是.animate-down,最终生效的都是最后一个.animate-right生成的关键帧,自然所有元素都只会有向右的动画效果。

修复方案

把关键帧改成动态命名,让每个方向对应唯一的关键帧名称,避免冲突。同时调整混合宏里的animation属性,匹配对应的关键帧。

修改后的代码如下:

$distance: 30px
  
@mixin animate($delay: 0s, $direction: "up")
  // 用方向拼接唯一的关键帧名称
  $animation-name: fadeIn-#{$direction}
  animation: #{$animation-name} 1s
  animation-delay: $delay
  animation-fill-mode: both
  
  // 定义对应方向的唯一关键帧
  @keyframes #{$animation-name}
    from
      opacity: 0
      @if $direction == "up"
        transform: translateY($distance)
      
      @else if $direction == "down"
        transform: translateY(-$distance)
      
      @else if $direction == "left"
        transform: translateX($distance)
      
      @else if $direction == "right"
        transform: translateX(-$distance)
    to
      opacity: 1
      transform: translateY(0) translateX(0)

.animate-up
  @include animate(0s, "up")

.animate-down
  @include animate(0s, 'down')

.animate-left
  @include animate(0s, 'left')

.animate-right
  @include animate(0s, 'right')

补充说明

这样修改后,每个类对应的关键帧名称会变成fadeIn-up、fadeIn-down等,彼此独立不会覆盖。编译后的CSS里,每个方向的动画都有自己专属的关键帧,就能正常显示对应方向的动画效果了。

另外也可以把关键帧移到混合宏外部,通过传参控制transform的值,但动态命名关键帧是最直接适配你原有代码结构的方案。

内容的提问来源于stack exchange,提问作者jean d'arme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:17:35