如何用纯 CSS 创作一组昂首阔步的圆点
2024-08-30 05:07:21
效果预览
按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。
https://codepen.io/comehope/pen/ejrMKe
可交互视频
此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
请用 chrome, safari, edge 打开观看。
https://scrimba.com/p/pEgDAM/caw7yTv
源代码下载
每日前端实战系列的全部源代码请从 github 下载:
https://github.com/comehope/front-end-daily-challenges
代码解读
定义 dom,容器中包含 5 个元素,每个元素代表 1 个小球:
<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: radial-gradient(circle at center, sienna, maroon);
}
定义容器尺寸:
.loader {
width: 6em;
height: 1em;
font-size: 40px;
}
画出圆点:
.loader {
position: relative;
}
.loader span {
position: absolute;
width: 1em;
height: 1em;
background-color: white;
border-radius: 50%;
left: 5em;
}
定义小球从右到左移动以及从左侧返回到右侧的动画效果:
.loader {
--duration: 5s;
}
.loader span {
animation:
walk linear infinite;
animation-duration: var(--duration);
}
@keyframes walk {
0%, 95%, 100% {
left: 5em;
}
80%, 85% {
left: 0;
}
}
再增加小球在最左端向上跳起和在最右端向下落下的动画效果:
.loader span {
animation:
walk linear infinite,
jump linear infinite;
}
@keyframes jump {
80%, 100% {
top: 0;
}
85%, 95% {
top: -1em;
}
}
再增加小球在从左侧返回到右侧时,因运动得快而稍被压扁的效果:
.loader span {
animation:
walk linear infinite,
jump linear infinite,
squash linear infinite;
}
@keyframes squash {
80%, 100% {
width: 1em;
height: 1em;
}
90% {
width: 2em;
height: 0.8em;
}
}
为 5 个小球分别定义变量:
.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 {
--dots: 5;
}
设置动画延时:
.loader span {
animation-delay: calc(var(--n) * var(--duration) / var(--dots) * -1);
}
最后,把点的尺寸改小一些:
.loader {
font-size: 20px;
}
大功告成!
原文地址:https://segmentfault.com/a/1190000015868445
最新文章
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
- VSS 请求程序和 SharePoint 2013
- HTML中常用meta整理
- Django 源码小剖: 响应数据 response 的返回
- 转:android 录制视频的Demo
- CKeditor 配置使用
- hdu3037 Lucas定理
- ARM指令集----杂项指令
- CentOS 安装 Sun JDK
- Entity Framework 学习中级篇1—EF支持复杂类型的实现
- scrapy 修改URL爬取起始位置
- Web API2 使用EF Code Migrations to Seed DB
- 【大数据实战】将普通文本文件导入ElasticSearch
- test20181005 序列
- 如何保障Go语言基础代码质量?
- ibm x3550m4 开启cpu高性能模式
- 微软 WCF的几种寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服务
- js switch的使用 ng-switch的使用方法
- console.log()的兼容性
- 如何在Windows下面运行hadoop的MapReduce程序
热门文章
- 1.检索数据 ---SQL
- python进阶05 常用问题库(1)json os os.path模块
- [Android]《Android艺术开发探索》第一章读书笔记
- VS2013使用EF6通过ADO.NET 连接mySql成功步骤
- CA、公钥、私钥 概要
- 使用 Kendo UI 库实现对象的继承
- 造成socket.error: [Errno 99] Cannot assign requested
- 编写xcode5插件需要增加DVTPlugInCompatibilityUUIDs
- python中__file__
- informix服务端卸载后重新安装不成功