你的代码实现了一个 方形轨迹预加载动画(Preloader Animation),其中三个 span
元素沿着一个 2×2 网格 轨迹循环移动。现在,我们将 拆解核心实现步骤,让你能一步步理解并调整动画效果。
第 0 步:项目概览
你的代码包括:
preloader-animation/
├── index.html # HTML 结构
└── style.css # CSS 样式与动画
动画效果
- 三个小方块(白色) 会沿着一个 150×150 px 的方形路径 依次运动。
- 每个方块有时间间隔 (
animation-delay
),因此它们不会同时移动,而是像“追逐”一样依次运行。 - 背景色为紫色 (
#bd2ae2
),小方块的移动形成视觉上的“旋转追逐”效果。
第 1 步:HTML 结构
打开 index.html
,可以看到一个 .loader
容器,包含 3 个 <span>
,它们将用来进行动画。
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Preloader Animation</title>
</head>
<body>
<div class="loader">
<span></span> <!-- 第1个方块 -->
<span></span> <!-- 第2个方块 -->
<span></span> <!-- 第3个方块 -->
</div>
</body>
</html>
HTML 解析
<div class="loader">
:动画的容器,所有span
都在其中运行。- 三个
<span>
:分别代表 三个方块,每个都使用animation-delay
让它们 依次运动。
第 2 步:基础 CSS
2.1 背景 & 居中
在 style.css
里,body
采用 flexbox
居中显示:
body {
margin: 0;
padding: 0;
background: #bd2ae2; /* 紫色背景 */
display: flex;
align-items: center;
justify-content: center;
height: 100vh; /* 全屏 */
}
display: flex; align-items: center; justify-content: center;
:让.loader
垂直 & 水平居中。
2.2 .loader
容器
.loader {
width: 150px;
height: 150px;
position: relative;
}
width: 150px; height: 150px;
:定义了动画运动的区域,即span
运动的轨迹将在 150×150 px 的范围内。position: relative;
:用于让span
进行绝对定位。
2.3 方块样式
span {
position: absolute;
width: 50px;
height: 50px;
background-color: white;
border-radius: 4px;
animation: chase 2s linear infinite;
}
width: 50px; height: 50px;
:每个span
大小固定 50×50 px。position: absolute;
:使它们相对.loader
进行绝对定位,可以自由控制top
和left
。border-radius: 4px;
:让方块稍微圆润。animation: chase 2s linear infinite;
:绑定chase
动画,2 秒一轮,线性匀速运动,循环播放。
第 3 步:动画关键帧
关键部分——让 span
沿着 2×2 网格轨迹 运动:
@keyframes chase {
0% { top: 0; left: 0; }
12.5% { top: 0; left: 50%; }
25% { top: 0; left: 50%; }
37.5% { top: 50%; left: 50%; }
50% { top: 50%; left: 50%; }
62.5% { top: 50% ; left: 0; }
75% { top: 50% ; left: 0; }
82.5% { top: 0; left: 0; }
100% { top: 0; left: 0; }
}
如何理解这个轨迹
小方块沿着 150×150 px 的区域,在 4 个角落 依次停留:
- 0%:起点(左上角)。
- 12.5% - 25%:向 右上角 运动,并停留一会。
- 37.5% - 50%:向 右下角 运动,并停留。
- 62.5% - 75%:向 左下角 运动,并停留。
- 82.5% - 100%:返回 左上角,然后继续循环。
第 4 步:设置动画时间延迟
span:nth-child(2) {
animation-delay: 0.7s;
}
span:nth-child(1) {
animation-delay: 1.4s;
}
作用
nth-child(2)
让第二个方块比第一个 晚 0.7 秒 开始。nth-child(1)
让第三个方块比第一个 晚 1.4 秒 开始。
结果
- 第 1 个方块:立即开始运动。
- 第 2 个方块:0.7 秒后才开始 跟随第 1 个方块运动。
- 第 3 个方块:1.4 秒后才开始 跟随第 2 个方块运动。
最终,这三个方块会依次沿着 4 个角落运动,形成 追逐的视觉效果。
第 5 步:优化与拓展
调整运动轨迹
- 如果想让方块沿 圆形路径 运动,可以改用
transform: translate(X, Y);
来计算圆周坐标。
- 如果想让方块沿 圆形路径 运动,可以改用
改变颜色
span:nth-child(1) { background-color: #ff3d00; } span:nth-child(2) { background-color: #ffcc00; } span:nth-child(3) { background-color: #4caf50; }
- 让每个方块使用 不同颜色,增加视觉变化。
修改大小与间距
.loader { width: 200px; height: 200px; } span { width: 40px; height: 40px; }
- 让
.loader
更大,同时缩小span
,看起来更流畅。
- 让
最终效果
- 背景紫色,居中的
.loader
容器。 - 三个白色小方块 依次运动,形成 追逐动画。
- 每个方块间隔 0.7 秒启动,制造流畅的运动感。
总结
absolute + animation + keyframes
结合实现 轨迹运动。animation-delay
让方块 依次启动,形成流畅追逐效果。box-model + flexbox
保证 全屏居中。
你可以自由调整轨迹、颜色、间隔时间,创造更多 酷炫的 Preloader 动画! 🚀