animation-delay 不控制停留而是决定动画开始时间;停留靠 animation-duration 与关键帧中静止段占比实现,如30%–70%设相同位置可获40%时长的停留效果。

animation-delay 控制滚动文字停留时间的原理
滚动文字本质是 CSS 动画位移,animation-delay 并不直接控制“停留”,而是决定动画**何时开始执行**。真正影响视觉停留效果的是 animation-duration 与关键帧中静止段所占的时间比例。比如文字从右到左滚动,若想在视口中央“停住”2秒,就得在 @keyframes 里为 30%–70% 区间设置相同位置,让该区间耗时占总时长的 40%。
用 @keyframes 精确分配滚动与停留时段
常见错误是只靠 animation-delay 想实现暂停——它只会让整个动画延后启动,对运行中停顿无效。正确做法是在关键帧中人为拉长某一段的位置声明:
@keyframes scrollAndPause {
0% { transform: translateX(100%); }
30% { transform: translateX(-100%); } /* 快速滚入+穿过 */
70% { transform: translateX(-100%); } /* 停在左侧边界(即视口内完全显示位置) */
100% { transform: translateX(100%); } /* 继续滚出 */
}- 若
animation-duration: 10s,则 30%→70% 对应 4 秒停留 - 停留位置取决于你希望文字在哪“卡住”,通常设为
translateX(-100%)或具体像素值 - 务必配合
white-space: nowrap和容器overflow: hidden,否则换行或溢出会破坏滚动感
animation-play-state 配合 JS 实现交互式暂停
纯 CSS 无法响应鼠标悬停暂停后继续——除非用 animation-play-state 动态切换:
.marquee:hover {
animation-play-state: paused;
}- 仅适用于单次循环或无限循环场景;若已用
animation-iteration-count: 1,暂停后再恢复会从头重播 - JS 中可通过
element.style.animationPlayState = 'paused'或'running'控制,但注意浏览器兼容性(IE 不支持) - 移动端需额外处理
:hover失效问题,建议改用touchstart/touchend切换 class
避免用 marquee 标签,优先选择 CSS + flex/inline-block 模拟
是废弃标签,无标准、无事件、不可控、不支持现代布局。替代方案更可靠:
立即学习“前端免费学习笔记(深入)”;
- 用
display: inline-block包裹文字,父容器设white-space: nowrap+overflow: hidden - 动画目标设为父容器的
transform: translateX(),比操作子元素更稳定 - 若需无缝循环,复制两份文字并用负偏移衔接,避免滚动到尾部时跳变
- 性能上,
transform触发 GPU 加速,比left或margin-left更流畅
复杂点在于停留位置必须和容器宽度、字体大小、缩放比例联动计算,稍有偏差就会看起来“没停准”。建议先用固定宽高容器调试,再适配响应式。











