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

CSS Marquee类滚动动画求助:自定义代码未达预期效果

解决Marquee式滚动动画的问题

你的代码存在几个核心问题:

  • 缺少带溢出隐藏的容器:滚动文本需要被限制在固定宽度且overflow:hidden的容器内,否则滚动效果无法在可视区域内呈现
  • 关键帧位移计算逻辑错误:calc(-100% + 300px)里的100%指代滚动文本自身宽度,而非容器宽度,导致滚动距离不符合预期
  • 动画收尾过渡突兀:从暂停位置直接跳回初始位置,没有平滑过渡逻辑

以下是修正后的完整实现:

1. HTML结构

<div class="scroll-container">
  <div class="scrolling-text">这是需要滚动的长文本内容,长度要超过容器宽度才能看到完整效果</div>
</div>

2. CSS代码

/* 容器:固定宽度,隐藏溢出内容 */
.scroll-container {
  width: 300px;
  overflow: hidden;
  border: 1px solid #ccc; /* 方便查看容器范围,可按需删除 */
}

/* 滚动文本:强制不换行,确保宽度能超过容器 */
.scrolling-text {
  display: inline-block;
  white-space: nowrap;
  animation: scroll-text 10s linear infinite;
}

@keyframes scroll-text {
  0% {
    transform: translateX(0); /* 初始位置:文本左端对齐容器左端 */
  }
  70% {
    transform: translateX(calc(300px - 100%)); /* 滚动到文本右端对齐容器右端 */
  }
  90% {
    transform: translateX(calc(300px - 100%)); /* 暂停2秒(占总动画时长的20%) */
  }
  100% {
    transform: translateX(0); /* 平滑回到初始位置 */
  }
}

关键调整说明:

  • 新增scroll-container容器,通过overflow:hidden锁定可视区域,固定宽度可根据需求修改
  • 给滚动文本添加white-space:nowrap,避免文本换行导致宽度无法超出容器
  • 修正位移计算逻辑:calc(300px - 100%)中,300px是容器宽度,100%是文本自身宽度,确保滚动后文本右端刚好对齐容器右端
  • 调整关键帧时间占比:延长暂停阶段的时长,让暂停效果更明显,可自行修改百分比调整各阶段时长

如果需要原生Marquee的循环滚动效果(文本滚出后从右侧重新进入),可以改用以下关键帧:

@keyframes scroll-text {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-100%);
  }
}

这种模式下文本会持续从右向左滚动,滚出容器后自动从右侧重新出现,无需暂停逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:18:20