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

SCSS混合宏动画未正常生效:汉堡菜单关闭动画异常

问题原因

你遇到的问题是重复定义了同名关键帧:每次调用bar-rotation混合宏时,都会生成名为bar-rotation的关键帧,后定义的(对应-45deg)会覆盖先定义的(45deg),导致两个条都使用了最后那个关键帧的旋转角度,所以方向一致。

解决方案

修改混合宏,为每个生成的关键帧创建唯一名称,避免覆盖。可以利用传入的角度参数作为关键帧名称的一部分:

@mixin bar-rotation($deg){
    // 生成带角度参数的唯一关键帧名称
    $keyframes-id: bar-rotation-#{$deg};
    @keyframes #{$keyframes-id} {
        0% {
            transform: rotate(0);
        }
        100% {
            transform: rotate($deg);
        }
    }

    animation-name: #{$keyframes-id};
    animation-timing-function: linear;
    animation-duration: 0.2s;
    animation-fill-mode: forwards;
}

.bar-first-transformed {
    @extend .bar-first;
    @include bar-rotation(45deg);
}

.bar-third-transformed {
    @extend .bar-third;
    @include bar-rotation(-45deg);
}

编译后会生成两个独立的关键帧(bar-rotation-45deg和bar-rotation--45deg),两个条的动画就会各自使用对应的旋转角度,方向相反。

替代简化方案(用过渡代替动画)

如果不需要复杂的关键帧控制,也可以用transition实现更简洁的效果,避免关键帧冲突:

@mixin bar-rotation($deg){
    transition: transform 0.2s linear;
    transform: rotate($deg);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:42:38