有趣的css - 移形换位加载动画

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是一个移形换位动态加载小动效,适用于 app 列表加载,页面加载或者图片懒加载等场景。

最新文章通过公众号「设计师工作日常」发布。


目录

  • 整体效果
  • 核心代码
    • html 代码
    • css 部分代码
  • 完整代码如下
    • html 页面
    • css 样式
    • 页面渲染效果

整体效果

💎知识点:
1️⃣ transform 形变 rotate(n) 旋转属性
2️⃣ :before 以及 :after 伪元素
3️⃣ animation 动画以及关键帧参数
4️⃣ position 定位

🔑思路:
创建三个矩形元素,通过 animation 动画,让三个矩形元素循环移动到不同的位置上。

适用于 app 列表加载,页面加载或者图片懒加载等场景。


核心代码部分,简要说明了写法思路;完整代码在最后,可直接复制到本地运行。

核心代码

html 代码

<div class="loading65">
  <div class="rectangle65"></div>
</div>

加载动画整体 html 标签布局。

css 部分代码

.loading65{
  position: relative;
  transform: rotate(45deg);
}
.loading65:before,.rectangle65::before,.rectangle65::after{
  content: '';
  width: 14px;
  height: 14px;
  border: 2px solid #333333;
  border-radius: 4px;
  box-sizing: border-box;
  position: absolute;
}
.loading65:before{
  top: 0;
  left: 0;
  animation: eff651 4s ease-in-out infinite;
  animation-delay: 0.45s;
}
.rectangle65::before{
  top: 12px;
  left: 0px;
  animation: eff652 4s ease-in-out infinite;
  animation-delay: 0.65s;
}
.rectangle65::after{
  top: 0px;
  left: 12px;
  animation: eff653 4s ease-in-out infinite;
  animation-delay: 0.25s;
}
@keyframes eff651{
  0%,10%{
    top: 0;
    left: 0;
  }
  15%,35%{
    top: 0;
    left: 12px;
  }
  40%,60%{
    top: 12px;
    left: 12px;
  }
  65%,85%{
    top: 12px;
    left: 0;
  }
  90%,100%{
    top: 0;
    left: 0;
  }
}
@keyframes eff652{
  0%,10%{
    top: 12px;
    left: 0;
  }
  15%,35%{
    top: 0;
    left: 0;
  }
  40%,60%{
    top: 0;
    left: 12px;
  }
  65%,85%{
    top: 12px;
    left: 12px;
  }
  90%,100%{
    top: 12px;
    left: 0;
  }
}
@keyframes eff653{
  0%,10%{
    top: 0;
    left: 12px;
  }
  15%,35%{
    top: 12px;
    left: 12px;
  }
  40%,60%{
    top: 12px;
    left: 0;
  }
  65%,85%{
    top: 0;
    left: 0;
  }
  90%,100%{
    top: 0;
    left: 12px;
  }
}

1、分别基于 .loading65.rectangle65 创建伪元素 .loading65:before , .rectangle65::before , .rectangle65::after ,并且分别定义这 3 个伪元素的通用尺寸大小,形成 3 个同样大小的矩形边框。

2、然后通过 position 定位属性,分别调整这 3 个矩形边框的 topleft 值,让这 3 个矩形边框元素形成一个小 L 形状。

3、利用 transform 形变 rotate(n) 旋转属性,给整个加载主体 .loading65 旋转 45°,整体形状成向上的简约箭头,更具设计感。

4、分别给这 3 个矩形边框元素,添加 animation 动画,增加关键帧参数,让这 3 个矩形边框元素不停的移形换位;最后分别增加不同的 animation-delay 属性值,让这 3 个矩形边框元素分别延迟播放动画,最终形成视觉上的移形换位且有停顿感。

完整代码如下

html 页面

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" href="style.css">
        <title>移形换位加载动画</title>
    </head>
    <body>
        <div class="app">
            <div class="loading65">
                <div class="rectangle65"></div>
            </div>
        </div>
    </body>
</html>

css 样式

/** style.css **/
.app{
  width: 100%;
  height: 100vh;
  background-color: #ffffff;
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}
.loading65{
  position: relative;
  transform: rotate(45deg);
}
.loading65:before,.rectangle65::before,.rectangle65::after{
  content: '';
  width: 14px;
  height: 14px;
  border: 2px solid #333333;
  border-radius: 4px;
  box-sizing: border-box;
  position: absolute;
}
.loading65:before{
  top: 0;
  left: 0;
  animation: eff651 4s ease-in-out infinite;
  animation-delay: 0.45s;
}
.rectangle65::before{
  top: 12px;
  left: 0px;
  animation: eff652 4s ease-in-out infinite;
  animation-delay: 0.65s;
}
.rectangle65::after{
  top: 0px;
  left: 12px;
  animation: eff653 4s ease-in-out infinite;
  animation-delay: 0.25s;
}
@keyframes eff651{
  0%,10%{
    top: 0;
    left: 0;
  }
  15%,35%{
    top: 0;
    left: 12px;
  }
  40%,60%{
    top: 12px;
    left: 12px;
  }
  65%,85%{
    top: 12px;
    left: 0;
  }
  90%,100%{
    top: 0;
    left: 0;
  }
}
@keyframes eff652{
  0%,10%{
    top: 12px;
    left: 0;
  }
  15%,35%{
    top: 0;
    left: 0;
  }
  40%,60%{
    top: 0;
    left: 12px;
  }
  65%,85%{
    top: 12px;
    left: 12px;
  }
  90%,100%{
    top: 12px;
    left: 0;
  }
}
@keyframes eff653{
  0%,10%{
    top: 0;
    left: 12px;
  }
  15%,35%{
    top: 12px;
    left: 12px;
  }
  40%,60%{
    top: 12px;
    left: 0;
  }
  65%,85%{
    top: 0;
    left: 0;
  }
  90%,100%{
    top: 0;
    left: 12px;
  }
}

页面渲染效果

以上就是所有代码,以及简单的思路,希望对你有一些帮助或者启发。


[1] 原文阅读


CSS 是一种很酷很有趣的计算机语言,在这里跟大家分享一些 CSS 实例 Demo,为学习者获取灵感和思路提供一点帮助,希望你们喜欢。

我是 Just,这里是「设计师工作日常」,求点赞求关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/641399.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python基础之循环

目录 1.while 循环 2.for循环 3.for-else 和 while-else 4.关键字break和continue 1.while 循环 语法结构 while 条件语句:代码 解释&#xff1a;不断循环&#xff0c;如果条件语句为真&#xff0c;则执行代码&#xff0c;直到条件语句为假。假设条件语句一直为真&#xff0…

智能体(Agent)详细精讲

1.什么是智能体 智能体&#xff08;Agent&#xff09;是一种由大规模语言模型&#xff08;如GPT-4或本地模型&#xff09;驱动的先进系统&#xff0c;能够执行多种复杂任务。通过引入智能体&#xff0c;企业和个人可以实现自动化处理和高效管理各种事务。 智能体的核心是其“大…

ATmega328P加硬件看门狗MAX824L看门狗

void Reversewdt(){ //硬件喂狗&#xff0c;11PIN接MAX824L芯片WDIif (digitalRead(11) HIGH) {digitalWrite(11, LOW); //低电平} else {digitalWrite(11, HIGH); //高电平 }loop增加喂狗调用 void loop() { …… Reversewdt();//喂狗 }

❤Element的使用element

❤Element的使用 1、input输入框 禁止自动补全和下拉提示 input 输入框在输入后浏览器会记录用户输入的值&#xff0c;在下次输入的时候会将记录的值提示在输入框的下面&#xff0c;当输入框是密码的时候&#xff0c;这样可以看见上次输入的密码&#xff0c;这样用户体验不好…

2024全新Langchain大模型AI应用与多智能体实战开发

2024全新Langchain大模型AI应用与多智能体实战开发 LangChain 就是一个 LLM 编程框架&#xff0c;你想开发一个基于 LLM 应用&#xff0c;需要什么组件它都有&#xff0c;直接使用就行&#xff1b;甚至针对常规的应用流程&#xff0c;它利用链(LangChain中Chain的由来)这个概念…

[Linux]Crond任务调度以及at任务调度

一.crond任务定时调度 crond是反复检测执行的&#xff0c;一个任务结束后&#xff0c;在所规定的时间之后会再次执行 crontab 指令可以给系统分配定时任务 crontab -e 进入编辑页面&#xff0c;设定任务 crontab -l 查看已有定时任务 crontab -r 删除所有任务 编辑时&#xff…

深度学习之基于MTCNN+Facenet的人脸识别身份认证系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着信息技术的快速发展&#xff0c;身份认证技术在日常生活和工作中的重要性日益凸显。传统的…

【全部更新完毕】2024电工杯B题详细思路代码成品文章教学:大学生平衡膳食食谱的优化设计及评价

大学生平衡膳食食谱的优化设计及评价 摘要 大学阶段是学生获取知识和身体发育的关键时期&#xff0c;也是形成良好饮食习惯的重要阶段。然而&#xff0c;当前大学生中存在饮食结构不合理和不良饮食习惯的问题&#xff0c;主要表现为不吃早餐或早餐吃得马虎&#xff0c;经常食用…

Python文件和数据格式化-课后作业[python123题库]

文件和数据格式化-课后作业 一、单项选择题 1、文件句柄f&#xff0c;以下是f.seek(0)作用的是&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪…

如何从http免费升级到https

使用https协议开头是为了在用户访问网站时提供更安全的网络环境。相比http&#xff0c;使用https有数据加密、身份验证、保护隐私、搜索引擎优化等优势。一般获取https证书&#xff0c;则需要支付费用给证书颁发机构&#xff08;CA&#xff09;。还有一些免费的证书证书颁发机构…

嵌入式单片机启动地址映射关系

一、内核只会从0地址启动 1.0地址第一个字是sp栈指针,第二个字是Reset_Handler入口,参考图1中启动代码中的中断向量表。具体使用流程参考图2(参考自野火) 图1 图2 2.0地址映射以后,软件上使用0地址访问的空间是映射到的器件的空间 3.0地址映射只会影响单个器件上的地址,…

知识图谱数据预处理笔记

知识图谱数据预处理笔记 0. 引言1. 笔记1-1. \的转义1-2. 特殊符号的清理1-3. 检查结尾是否正常1-4. 检查<>是否存在1-5. 两端空格的清理1-6. 检查object内容长时是否以<开始 0. 引言 最近学习知识图谱&#xff0c;发现数据有很多问题&#xff0c;这篇笔记记录遇到的…

数据可视化

目录 数据可视化: 常见的数据可视化库: Echarts 使用五步曲 Echarts 相关配置 数据可视化: 应对现在数据可视化趋势,越来越多企业需要在很多场景(营销数据,生产数据,用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出 主要目的:借助于…

小红书-社区搜索部 (NLP、CV算法实习生) 一面面经

&#x1f604; 整个流程按如下问题展开&#xff0c;用时60min左右面试官人挺好&#xff0c;前半部分问问题&#xff0c;后半部分coding一道题。 各位有什么问题可以直接评论区留言&#xff0c;24小时内必回信息&#xff0c;放心~ 文章目录 1、自我介绍2、介绍下项目&#xff…

Node.js知识点以及案例总结

思考&#xff1a;为什么JavaScript可以在浏览器中被执行 每个浏览器都有JS解析引擎&#xff0c;不同的浏览器使用不同的JavaScript解析引擎&#xff0c;待执行的js代码会在js解析引擎下执行 为什么JavaScript可以操作DOM和BOM 每个浏览器都内置了DOM、BOM这样的API函数&#xf…

好用的window粘贴板

可以设置指定的快捷键&#xff0c;在需要使用最近复制的记录时快速的复用 -> Ditto。 选择Download即可 地址&#xff1a;Ditto clipboard manager (sourceforge.io)https://ditto-cp.sourceforge.io/

SwiftUI中的组合动画(Simultaneous, Sequenced, Exclusive)

了解了常见的几种手势后&#xff0c;接下来我们了解一下组合手势的操作&#xff0c;当一个视图存在多个手势的时候&#xff0c;为了避免手势冲突&#xff0c;SwiftUI提供了自定义手势的方法&#xff0c;比如同时进行&#xff0c;顺序进行等等。 以下是一些常见的多种手势组合使…

集创北方ICN6211 MIPIDSI桥接到RGB,支持RGB565/RGB888/RGB666

ICN6211描述&#xff1a; ICN6211是一个桥接芯片&#xff0c;它接收MIPIDSI输入并发送RGB输出。MIPIDSI最多支持4个车道&#xff0c;每个车道的最大运行频率为1Gbps&#xff1b;总最大输入带宽为4Gbps&#xff1b;并且还支持MIPI定义的ULPS&#xff08;超低功耗状态&#xff0…

计算机网络基础 - 计算机网络和因特网(1)

计算机网络基础 计算机网络和因特网什么是 Internet?具体构造的的角度服务角度网络结构 网络边缘网络核心电路交换分组交换概述排队时延和分组丢失转发表和路由选择协议按照有无网络层的连接 分组交换 VS 电路交换 接入网DSL 因特网接入电缆因特网接入光纤到户 FTTH无线接入网…

实现复杂树结构返回(不含子树), 并且结点间建立关联

&#x1f4a1; 一句话结&#xff1a; 实现传感器和深度及采集的数值动态对应&#xff0c;将不规则的数据转变成固定列头的一行行数据。 &#x1f511; 关键信息点&#xff1a; 通过传感器编号和深度将传感器对应的数值与时间建立关联。使用SpringBootMyBatis框架实现动态查询…