CSS 无限滚动动画
CSS 无限滚动动画
纯 CSS 实现的无限滚动效果,无需 JavaScript 即可实现流畅的横向滚动轮播。
▼ 效果展示
头像1
头像1
头像2
头像2
头像3
头像3
头像4
头像4
头像5
头像5
头像6
头像6
纯 CSS 实现的无限滚动效果,无需 JavaScript 即可实现流畅的横向滚动轮播。
这是一个巧妙的 CSS 无限滚动实现方案。利用 CSS Grid 布局和动画延迟,配合关键的跳变技巧,实现了无缝的无限循环效果。代码简洁高效,不需要任何 JavaScript。
核心特性
- 纯 CSS:无需任何 JavaScript
- 无缝滚动:利用关键帧跳变实现无缝连接
- 可自定义:通过 CSS 变量调整速度
- 遮罩效果:两端渐变遮罩增强视觉体验
完整代码
以下是完整的单文件代码,你可以直接保存为 .html 文件运行:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>无限滚动动画</title>
<style>
/* 容器样式 */
.marquee-container {
/* 动画持续时间 */
--d: 15s;
display: grid;
/* 可见元素数量 x 单个宽度 */
grid-template-columns: repeat(3, 300px);
overflow: hidden;
/* 两侧遮罩效果 */
-webkit-mask: linear-gradient(90deg,
rgba(0,0,0,0) 0%,
#000 10%,
#000 90%,
rgba(0,0,0,0) 100%);
}
/* 每个滚动项 */
.marquee-container > div {
/* 全部放在第一行第一列 */
grid-area: 1/1;
display: grid;
grid-template-columns: 80px 1fr;
align-content: center;
gap: 12px;
background: #fff;
border-radius: 12px;
padding: 15px;
/* 关键:无限滚动动画 */
animation: r var(--d) linear infinite;
}
/* 图片样式 */
.marquee-container > div img {
width: 80px;
height: 80px;
object-fit: cover;
border-radius: 50%;
grid-row: span 2;
}
/* 通过延迟实现错开滚动 */
.marquee-container > div:nth-child(2) {
animation-delay: calc(-0.1666666667 * var(--d));
}
.marquee-container > div:nth-child(3) {
animation-delay: calc(-0.3333333333 * var(--d));
}
.marquee-container > div:nth-child(4) {
animation-delay: calc(-0.5 * var(--d));
}
.marquee-container > div:nth-child(5) {
animation-delay: calc(-0.6666666667 * var(--d));
}
.marquee-container > div:nth-child(6) {
animation-delay: calc(-0.8333333333 * var(--d));
}
/* 关键动画:移动后跳变 */
@keyframes r {
16.6666666667% {
transform: translate(-100%);
}
16.6766666667% {
/* 跳到右边远端,实现无缝循环 */
transform: translate(500%);
}
}
body {
margin: 0;
min-height: 100vh;
display: grid;
place-content: center;
font-family: system-ui;
background: #fffefe;
}
</style>
</head>
<body>
<div class="marquee-container">
<div>
<img src="图片1.jpg" alt="" />
<h3>头像1</h3>
<p>描述1</p>
</div>
<div>
<img src="图片2.jpg" alt="" />
<h3>头像2</h3>
<p>描述2</p>
</div>
<!-- 更多项... -->
</div>
</body>
</html>技术要点
| 技术点 | 说明 |
|---|---|
| CSS Grid | 所有元素重叠在同一位置 |
| animation-delay | 通过负延迟实现错开滚动 |
| transform 跳变 | 移动到尽头后跳到右边实现无缝 |
| mask 遮罩 | 两端渐变遮罩 |
| CSS 变量 | 可自定义动画时长 |
实现原理
- Grid 重叠:所有元素使用
grid-area: 1/1叠放在一起 - 错开动画:每个元素有不同的
animation-delay - 无缝跳变:当动画到 16.67% 时,元素移动到左边;下一帧立即跳到右边 500% 的位置
- 无限循环:由于所有元素都在动,看起来就像无限滚动
使用说明
- 将完整代码保存为
.html文件 - 用浏览器打开即可看到效果
- 修改
--d: 15s调整滚动速度 - 修改
grid-template-columns调整显示数量
评论