效果预览

在线演示

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/PBGJwL

可交互视频

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/p/pEgDAM/cDMyyHv

源代码下载

本地下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含 5 个元素,代表 5 个台阶:

<div class="loader">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>

居中显示:

body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: black;
}

定义容器尺寸:

.loader {
width: 7em;
height: 5em;
font-size: 40px;
}

画出 5 个台阶:

.loader {
display: flex;
justify-content: space-between;
align-items: flex-end;
} .loader span {
width: 1em;
height: 1em;
background-color: white;
}

用变量让 5 个台阶从低到高排序:

.loader span {
height: calc(var(--n) * 1em);
} .loader span:nth-child(1) {
--n: 1;
} .loader span:nth-child(2) {
--n: 2;
} .loader span:nth-child(3) {
--n: 3;
} .loader span:nth-child(4) {
--n: 4;
} .loader span:nth-child(5) {
--n: 5;
}

为台阶增加转换排序方向的动画效果:

.loader span {
animation: sort 5s infinite;
} @keyframes sort {
0%, 40%, 100% {
height: calc(var(--n) * 1em);
} 50%, 90% {
height: calc(5em - (var(--n) - 1) * 1em);
}
}

下面做小球的动画,用了障眼法,使 2 个同色小球的交替运动看起来就像 1 个小球在做往复运动。

用伪元素画出 2 个小球:

.loader::before,
.loader::after {
content: '';
position: absolute;
width: 1em;
height: 1em;
background-color: white;
border-radius: 50%;
bottom: 1em;
} .loader::before {
left: 0;
} .loader::after {
left: 6em;
}

增加让小球向上运动的动画效果:

.loader::before,
.loader::after {
animation: climbing 5s infinite;
visibility: hidden;
} .loader::after {
animation-delay: 2.5s;
} @keyframes climbing {
0% {
bottom: 1em;
visibility: visible;
} 10% {
bottom: 2em;
} 20% {
bottom: 3em;
} 30% {
bottom: 4em;
} 40% {
bottom: 5em;
} 50% {
bottom: 1em;
} 50%, 100% {
visibility: hidden;
}
}

在向上运动的同时向两侧运动,形成上台阶的动画效果:

.loader::before {
--direction: 1;
} .loader::after {
--direction: -1;
} @keyframes climbing {
0% {
bottom: 1em;
left: calc(3em - 2 * 1.5em * var(--direction));
visibility: visible;
} 10% {
bottom: 2em;
left: calc(3em - 1 * 1.5em * var(--direction));
} 20% {
bottom: 3em;
left: calc(3em - 0 * 1.5em * var(--direction));
} 30% {
bottom: 4em;
left: calc(3em + 1 * 1.5em * var(--direction));
} 40% {
bottom: 5em;
left: calc(3em + 2 * 1.5em * var(--direction));
} 50% {
bottom: 1em;
left: calc(3em + 2 * 1.5em * var(--direction));
} 50%, 100% {
visibility: hidden;
}
}

最后,为上台阶的动作增加拟人效果:

@keyframes climbing {
0% {
bottom: 1em;
left: calc(3em - 2 * 1.5em * var(--direction));
visibility: visible;
} 7% {
bottom: calc(2em + 0.3em);
} 10% {
bottom: 2em;
left: calc(3em - 1 * 1.5em * var(--direction));
} 17% {
bottom: calc(3em + 0.3em);
} 20% {
bottom: 3em;
left: calc(3em - 0 * 1.5em * var(--direction));
} 27% {
bottom: calc(4em + 0.3em);
} 30% {
bottom: 4em;
left: calc(3em + 1 * 1.5em * var(--direction));
} 37% {
bottom: calc(5em + 0.3em);
} 40% {
bottom: 5em;
left: calc(3em + 2 * 1.5em * var(--direction));
} 50% {
bottom: 1em;
left: calc(3em + 2 * 1.5em * var(--direction));
} 50%, 100% {
visibility: hidden;
}
}

大功告成!

原文地址:https://segmentfault.com/a/1190000015686159

如何用纯 CSS 创作一个小球上台阶的动画的更多相关文章

  1. 如何用纯 CSS 创作一个小球反弹的动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OwWROO 可交互视频 ...

  2. 前端每日实战:85# 视频演示如何用纯 CSS 创作一个小球反弹的动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OwWROO 可交互视频 此视频是可 ...

  3. 前端每日实战:52# 视频演示如何用纯 CSS 创作一个小球绕着圆环盘旋的动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gKxyWo 可交互视频 此视频是可 ...

  4. 如何用纯 CSS 创作一个记事本翻页动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/qKOPGw 可交互视频教 ...

  5. 前端每日实战:46# 视频演示如何用纯 CSS 创作一个在容器中反弹的小球

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jKVbyE 可交互视频教程 此视频 ...

  6. 52.纯 CSS 创作一个小球绕着圆环盘旋的动画

    原文地址:https://segmentfault.com/a/1190000015295466 感想:重点在小球绕环转动. HTML code: <div class="contai ...

  7. 如何用纯 CSS 创作一个菜单反色填充特效

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览.https://codepen.io/comehope/pen/qYMoPo 可交互视频教程 ...

  8. 前端每日实战:23# 视频演示如何用纯 CSS 创作一个菜单反色填充特效

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览.https://codepen.io/comehope/pen/qYMoPo 可交互视频教程 此视频是 ...

  9. 纯 CSS 创作一个小球绕着圆环盘旋的动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gKxyWo 可交互视频 ...

随机推荐

  1. css各居中大法

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  2. Codeforces Round #207 (Div. 1) B (gcd的巧妙运用)

    比赛的时候不知道怎么写... 太弱了. 看了别人的代码,觉得这个是个经典的知识点吧. gcd的巧妙运用 自己想的时候苦苦思考怎么用dp求解. 无奈字符串太长而想不出好的算法. 其实在把a和b字符串都分 ...

  3. Kotlin——初级篇(八):关于字符串(String)常用操作汇总

    在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin--初级篇(三):数据类型详解这篇文章. 在 ...

  4. git 四个基本对象、分支、三个存储区、reset-revert-变基、cherry-pick

    1:git四个基本对象     2:工作区.缓存去.历史区   3:Git 分支介绍 https://blog.csdn.net/wh_19910525/article/details/7470964 ...

  5. Java实现 Hessian接口测试

    Hessian接口测试简单单例 Hessian是基于Binary –RPC(二进制远程过程调用协议)进行通讯. Hessian就是把Java对象转变成字节序列,然后通过Http传输到目标服务器上(主机 ...

  6. HYSBZ 2565 最长双回文串 (回文树)

    2565: 最长双回文串 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1377  Solved: 714 [Submit][Status][Dis ...

  7. 第二课作业——redis常用命令

    第二课时作业 静哥 by 2016.2.23~2016.2.22   [作业描述] 1.key string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和h ...

  8. sql语句(mysql中json_contains、json_array的使用)

    https://blog.csdn.net/qq_35952946/article/details/79131488 https://www.jianshu.com/p/455d3d4922e1 1. ...

  9. 2015-03-10——简析javascript对象

    对于构造函数,它是Function对象的一个实例,可以定义自己的静态成员先实例化出对象,后执行function中内部代码 静态成员:  var abc = function () {};  //既是一 ...

  10. 转!!SpringMVC与Struts2区别与比较总结

    1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...