同逻辑不同命名的CSS关键帧动画在同结构滑块仅一个生效问题
解决方案
首先排查语法问题:你定义关键帧时结尾的};多了一个分号,这属于CSS语法错误,可能导致第二个关键帧无法被正确解析。正确的关键帧定义应该去掉最后的分号:
@keyframes rightToLeftScrollSlider1 { 0% { transform: translateX(0); } 100% { transform: translateX(calc(-100px*9.5)); /*multiplier may change in future!*/ } }
不过更优的方案是使用CSS自定义属性(变量),既能避免重复定义关键帧,又能方便后续修改乘数:
- 定义通用的关键帧,用变量代替固定乘数:
@keyframes rightToLeftScroll { 0% { transform: translateX(0); } 100% { transform: translateX(calc(-100px * var(--slider-multiplier))); } }
- 给两个滑块分别设置变量值(当前均为9.5,未来修改时直接调整对应滑块的变量即可):
.slider-1 { --slider-multiplier: 9.5; animation: rightToLeftScroll 20s linear infinite; /* 替换为你实际的动画时长和时间函数 */ } .slider-2 { --slider-multiplier: 9.5; animation: rightToLeftScroll 20s linear infinite; }
这个方案的优势:
- 仅需维护一个关键帧,避免重复代码和语法错误
- 未来某滑块logo数量变化时,只需修改对应滑块的
--slider-multiplier变量值,无需改动关键帧 - 统一动画逻辑,不会出现解析不一致的问题
另外需确保两个滑块的基础样式(如overflow: hidden、内部容器宽度设置等)完全符合教程要求,若内部容器宽度不足以容纳重复的logo列表(教程通常会复制一份logo实现无缝滚动),也可能导致动画看似静止。
内容的提问来源于stack exchange,提问作者Stefano
相关产品推荐
相关产品推荐

