讲师中心 微信公众号
AI工具推荐 视频效率加速

CSS 实现三箭头循环滑入滑出动画的完整教程

梦涛大大_8512

梦涛大大_8512

发布时间:2026-11-05 16:38:05

|

634人浏览过

|

来源于php中文网

原创

CSS 实现三箭头循环滑入滑出动画的完整教程

无需 javascript,仅用纯 css 即可实现三个箭头依次滑入(1→2→3)、再反向滑出(3→2→1)并无限循环的加载动画效果。

无需 javascript,仅用纯 css 即可实现三个箭头依次滑入(1→2→3)、再反向滑出(3→2→1)并无限循环的加载动画效果。

在构建加载指示器(loading spinner)时,常需营造“流动感”或“序列感”,比如三个箭头逐个入场、再逐个退场的视觉节奏。许多开发者误以为必须依赖 JavaScript 控制 animation-name 切换来实现复杂序列,但其实 CSS 动画本身完全支持多阶段时间轴控制与精确延迟调度,只需合理设计关键帧百分比和 animation-delay,即可优雅达成目标。

✅ 核心思路:为每个箭头定义独立动画时间线

本方案摒弃了对单个 slideIn/slideOut 动画的反复切换逻辑,转而为 .arrow:nth-child(1)、.arrow:nth-child(2)、.arrow:nth-child(3) 分别编写专属 @keyframes(arrow1 / arrow2 / arrow3),每个动画完整描述其自身从“未出现 → 入场 → 停留 → 退场”的全过程,并通过百分比关键帧精准控制透明度(opacity)与水平位移(left)的变化时机。

例如 arrow1 的关键帧逻辑如下:

CSS工具箱(专业版)
CSS工具箱(专业版)

全功能 CSS 工程手册,覆盖性能优化、无障碍、设计系统与跨浏览器兼容。

下载
@keyframes arrow1 {
  from           { opacity: 0; left: -10px; }   /* 起始:左侧隐藏 */
  12.5%, 75%     { opacity: 1; left: 0; }       /* 入场并停留(占总时长62.5%)*/
  87.5%, to      { opacity: 0; left: 10px; }    /* 退场至右侧消失 */
}

整个动画周期设为 3.5s,则:

立即学习“前端免费学习笔记(深入)”;

  • 箭头1 在 0s 开始入场,0.44s(12.5% × 3.5s)完成入场并停留至 2.625s(75% × 3.5s);
  • 箭头2 比箭头1 晚 0.44s 启动(对应 animation-delay: 0.44s),形成错峰入场;
  • 箭头3 再延后 0.44s,最终实现「1→2→3 滑入」→「3→2→1 滑出」的无缝循环。

? 完整可运行代码(含 HTML + CSS)

<!DOCTYPE html>
<html>
<head>
<style>
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #f4f4f4;
  color: #EE4036;
  font-family: Arial, sans-serif;
  font-weight: bolder;
  font-size: xx-large;
}

.arrows {
  display: flex;
  justify-content: start;
  align-items: start;
  padding-left: 6px;
  gap: 3px;
}

.arrow {
  position: relative;
  width: 10px;
  height: 10px;
  background: #EE4036;
  border-top-right-radius: 30%;
  transform: rotate(-60deg) skewX(-30deg) scale(1, .866);
  rotate: 90deg;
  opacity: 0;
}

.arrow::before,
.arrow::after {
  content: "";
  position: absolute;
  width: inherit;
  height: inherit;
  background: #EE4036;
  border-top-right-radius: inherit;
}

.arrow::before {
  transform: rotate(-135deg) skewX(-45deg) scale(1.414, .707) translateY(-50%);
}

.arrow::after {
  transform: rotate(135deg) skewY(-45deg) scale(.707, 1.414) translateX(50%);
}

/* 三个独立动画,周期统一为 3.5s */
@keyframes arrow1 {
  from           { opacity: 0; left: -10px; }
  12.5%, 75%     { opacity: 1; left: 0; }
  87.5%, to      { opacity: 0; left: 10px; }
}

@keyframes arrow2 {
  0%, 12.5%      { opacity: 0; left: -10px; }
  25%, 62.5%     { opacity: 1; left: 0; }
  75%, to        { opacity: 0; left: 10px; }
}

@keyframes arrow3 {
  0%, 25%        { opacity: 0; left: -10px; }
  37.5%, 50%     { opacity: 1; left: 0; }
  62.5%, to      { opacity: 0; left: 10px; }
}

.arrows .arrow:nth-child(1) { animation: arrow1 3.5s infinite; }
.arrows .arrow:nth-child(2) { animation: arrow2 3.5s infinite; }
.arrows .arrow:nth-child(3) { animation: arrow3 3.5s infinite; }
</style>
</head>
<body>
  <section>
    <div class="loading">Loading</div>
    <section class="arrows">
      <div class="arrow"></div>
      <div class="arrow"></div>
      <div class="arrow"></div>
    </section>
  </section>
</body>
</html>

⚠️ 注意事项与优化建议

  • 避免 transform 与 left 混用冲突:原问题中同时使用 transform: translateY(...) 和 left 属性,易导致渲染异常。本方案统一采用 left 控制水平位移,保持定位逻辑清晰;若需更优性能,可改用 transform: translateX() 替代 left。
  • 动画周期需严格对齐:三个动画总时长必须一致(如均为 3.5s),且各阶段百分比按等分逻辑(如 12.5% = 1/8)推算,才能保证循环节奏稳定。
  • 语义化与可维护性:推荐将 .arrow_1/.arrow_2/.arrow_3 类名简化为无序列表结构(即直接用 :nth-child),减少冗余 HTML,提升 CSS 可读性。
  • 兼容性提示:rotate 和 skewX/skewY 属于现代 CSS 属性,主流浏览器均支持;如需兼容 IE,需添加 -ms-transform 等前缀(但 IE 已不推荐用于新项目)。

通过本方案,你不仅实现了预期动画效果,更掌握了 CSS 动画高级编排的核心方法——以时间为坐标轴,用百分比关键帧雕刻每一帧行为,再借 nth-child 实现元素级动画解耦。这是构建专业级加载动画、进度指示器乃至交互动画的基础能力。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

5416

2023.06.15

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

1157

2023.07.27

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2038

2023.07.28

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

4106

2023.08.01

css字体颜色
css字体颜色

CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

8545

2023.08.10

什么是css
什么是css

CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

7251

2023.08.10

css三角形怎么写
css三角形怎么写

CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

2357

2023.08.21

css设置文字颜色
css设置文字颜色

CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

3471

2023.08.22

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn