上一篇
滚动文字怎么设置?网页滚动文字代码怎么写
- 虚拟主机
- 2026-06-16
- 7
滚动文字(Marquee Text)是网页设计和界面交互中一种常见的视觉呈现方式,主要用于在有限空间内展示动态信息,虽然随着现代前端技术的发展,传统的 <marquee> 标签已逐渐被 CSS 动画和 JavaScript 库取代,但理解其原理、应用场景及最佳实践对于提升用户体验依然至关重要。
核心概念与演变
滚动文字的本质是通过改变元素在视口或容器中的位置,产生视觉上的移动效果,在早期的 Web 开发中,HTML 曾提供一个非标准的 <marquee> 标签来实现这一功能,由于该标签缺乏标准化支持、性能较差且难以通过 CSS 进行精细控制,它已被 HTML5 弃用,现代开发中,我们通常使用 CSS3 的 @keyframes 动画或 JavaScript 库(如 Swiper、Slick)来实现更流畅、可控的滚动效果。
主要应用场景
滚动文字并非适用于所有场景,其最佳用途通常集中在需要高频更新或空间受限的信息展示上。
| 应用场景 | 具体描述 | 优势 |
|---|---|---|
| 新闻头条/公告栏 | 在页面顶部或侧边栏展示最新的新闻标题、系统通知或紧急公告。 | 节省垂直空间,确保用户能第一时间捕捉到最新信息。 |
| 实时数据展示 | 股票行情、加密货币价格、体育比分等需要频繁变动的数据。 |
动态更新吸引注意力,避免页面频繁刷新。
|
| 品牌标语/广告 | 在横幅广告或页脚展示品牌口号、促销信息。 | 增加页面的活力,引导用户视线移动。 |
| 长文本预览 | 在卡片式布局中展示文章摘要或评论列表。 | 允许用户在不完全展开内容的情况下浏览多条信息。 |
技术实现方案对比
为了在现代项目中实现高质量的滚动效果,开发者通常面临几种技术选型,以下是三种主流方案的对比分析:
-
CSS3 动画方案
- 原理:利用 transform: translateX() 配合 @keyframes 实现平滑移动。
- 优点:性能极佳(利用 GPU 加速),代码简洁,无需 JavaScript 介入。
- 缺点:实现无缝循环(Infinite Loop)需要复杂的 HTML 结构复制(通常需复制两份内容),且暂停/恢复交互逻辑需额外处理。
-
JavaScript 库方案
- 原理:使用如 Marquee.js、Swiper 等库,通过 JS 计算元素位置和事件监听。
- 优点:功能强大,支持鼠标悬停暂停、点击跳转、响应式适配等复杂交互。
- 缺点:增加页面体积,依赖第三方库,需处理兼容性细节。
-
原生 JavaScript 方案

- 原理:通过 requestAnimationFrame 循环更新元素的 offsetLeft 或 transform 属性。
- 优点:完全自定义,无依赖,灵活性最高。
- 缺点:开发成本高,需自行处理边界检测、性能优化和浏览器兼容性。
用户体验与无障碍设计(A11y)
在实施滚动文字时,必须考虑可访问性和用户体验,避免造成视觉干扰或阅读障碍。

- 避免过度使用:滚动文字不应作为主要的内容传递方式,关键信息应提供静态版本,滚动效果仅作为辅助或装饰。
- 提供暂停/停止功能:根据 WCAG(Web 内容无障碍指南)建议,自动播放的内容应允许用户暂停、停止或隐藏,对于鼠标悬停暂停(Hover Pause)是常见的交互模式。
- 控制速度与节奏:滚动速度应适中,确保用户有足够的时间阅读,过快会导致信息丢失,过慢则失去动态意义。
- 色彩与对比度:确保滚动文字与背景有足够的对比度,特别是在移动设备上,避免使用低对比度的颜色组合。
常见问题与解答
为什么现代开发中不推荐使用 <marquee>
解答:
<marquee> 标签是 HTML 4 时代的一个非标准标签,虽然被大多数浏览器兼容,但它从未被 W3C 或 WHATWG 纳入标准,主要问题包括:
- 缺乏标准支持:不同浏览器对其属性的支持可能存在细微差异,导致行为不一致。
- 性能问题:它通常通过重绘(Repaint)而非重排(Reflow)或 GPU 加速来实现,导致在低端设备上可能卡顿。
- 控制力弱:难以通过 CSS 进行样式定制,也难以通过 JavaScript 进行精确的事件控制和状态管理。
- 弃用状态:HTML5 明确将其标记为已弃用,未来浏览器可能会移除支持,导致代码失效。
如何实现 CSS 滚动文字的“无缝循环”效果?
解答:
实现无缝循环的关键在于“视觉欺骗”,具体步骤如下:
- :将需要滚动的文本内容在 HTML 中复制一份,紧跟在原内容之后,如果内容是“Hello World”,则 HTML 结构应为 <div class="marquee-content"><span>Hello World</span><span>Hello World</span></div>。
- 设置容器:外层容器设置 overflow: hidden 以隐藏超出部分,内层内容容器设置 display: flex 或 white-space: nowrap 以确保内容在一行显示。
- 定义动画:使用 CSS @keyframes 动画,将内层内容容器从 transform: translateX(0) 移动到 transform: translateX(-50%)复制了一份,总宽度是原来的两倍,移动 50% 正好到达第二份内容的起始位置,此时视觉上与原位置完全重合。
- 应用动画:将动画应用于内层内容容器,并设置 animation: scroll 10s linear infinite,当动画完成时,瞬间重置回 0%,由于此时显示的是第二份内容的开头,与第一份内容的开头完全相同,因此用户无法察觉重置瞬间,从而实现无缝循环。
