当前位置: 首页 > news >正文

如何用纯 CSS 创作一个菱形 loader 动画

效果预览

在线演示

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

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

可交互视频教程

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

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

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

源代码下载

本地下载

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

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

代码解读

定义 dom,一个容器中包含 9 个子元素:

<div class="loader">
    <span></span>
    <span></span>
    <span></span>
    <span></span>
    <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;
}

定义容器和子元素尺寸,是一个大正方形里包含 9 个小正方形:

.loader {
    width: 10em;
    height: 10em;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-gap: 0.5em;
}

把图案调整为大菱形中包含 9 个小菱形:

.loader {
    transform: rotate(45deg);
}

以竖向的小菱形为单位,为小菱形块上色:

.loader span {
    background-color: var(--c);
}

.loader span:nth-child(7) {
    --c: tomato;
}

.loader span:nth-child(4),
.loader span:nth-child(8) {
    --c: gold;
}

.loader span:nth-child(1),
.loader span:nth-child(5),
.loader span:nth-child(9) {
    --c: limegreen;
}

.loader span:nth-child(2),
.loader span:nth-child(6) {
    --c: dodgerblue;
}

.loader span:nth-child(3) {
    --c: mediumpurple;
}

定义动画效果:

.loader span {
    animation: blinking 2s linear infinite;
    animation-delay: var(--d);
    transform: scale(0);
}

@keyframes blinking {
    0%, 100% {
        transform: scale(0);
    }

    40%, 80% {
        transform: scale(1);
    }
}

最后,为小菱形设置时延,增强动感:

.loader span:nth-child(7) {
    --d: 0s;
}

.loader span:nth-child(4),
.loader span:nth-child(8) {
    --d: 0.2s;
}

.loader span:nth-child(1),
.loader span:nth-child(5),
.loader span:nth-child(9) {
    --d: 0.4s;
}

.loader span:nth-child(2),
.loader span:nth-child(6) {
    --d: 0.6s;
}

.loader span:nth-child(3) {
    --d: 0.8s;
}

大功告成!

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

相关文章:

  • java实现定时任务
  • nginx location if 的匹配规则
  • zabbix 4.0 安装配置
  • spark完整的数据倾斜解决方案
  • 程序员如何选择第一家公司
  • zabbix之 自动发现磁盘io util 监控
  • 通用点赞设计思路
  • MVVM模块化架构
  • EF Core中执行Sql语句查询操作之FromSql,ExecuteSqlCommand,SqlQuery
  • 随手记统一监控平台Focus设计解析
  • Centos7 系统启动docker报错 inotify add watch failed
  • 以OpenGL/ES视角介绍gfx-hal(Vulkan) Texture接口使用
  • 阿里云应用高可用服务公测发布
  • JAVA入门到精通-第57讲-SQLserver数据类型
  • 利用keepalived实现高可用nginx(修改正)
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • echarts花样作死的坑
  • ES6 学习笔记(一)let,const和解构赋值
  • JavaScript函数式编程(一)
  • React-Native - 收藏集 - 掘金
  • Solarized Scheme
  • spark本地环境的搭建到运行第一个spark程序
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Travix是如何部署应用程序到Kubernetes上的
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 读懂package.json -- 依赖管理
  • 前端攻城师
  • 如何解决微信端直接跳WAP端
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 设计模式走一遍---观察者模式
  • 十年未变!安全,谁之责?(下)
  • 世界上最简单的无等待算法(getAndIncrement)
  • 算法-插入排序
  • 《天龙八部3D》Unity技术方案揭秘
  • Java总结 - String - 这篇请使劲喷我
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​Java并发新构件之Exchanger
  • ​低代码平台的核心价值与优势
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (31)对象的克隆
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (八)Flask之app.route装饰器函数的参数
  • (多级缓存)多级缓存
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (七)Knockout 创建自定义绑定
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (算法二)滑动窗口
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)EOS中账户、钱包和密钥的关系
  • (转载)从 Java 代码到 Java 堆
  • ****Linux下Mysql的安装和配置