前端每日实战:11# 视频演示如何用纯 CSS 创作一个荧光脉冲 loader 特效
2024-09-05 18:45:03
效果预览
按下右侧的“点击预览”按钮在当前页面预览,点击链接全屏预览。
https://codepen.io/zhang-ou/pen/erRzzR
可交互视频教程
此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。
请用 chrome, safari, edge 打开观看。
源代码下载
请从 github 下载。
https://github.com/comehope/front-end-daily-challenges/tree/master/011-ripple-pulse-loader-animation
代码解读
定义 dom,只有一个元素:
<div class="circle"></div>
居中显示:
html,
body,
.circle {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background-color: black;
}
画出中间的实心圆:
:root {
--innerRadius: 2em;
}
.circle {
width: calc(var(--innerRadius) * 2);
height: calc(var(--innerRadius) * 2);
background-color: lime;
border-radius: 50%;
}
画出圆环:
.circle {
box-shadow: 0 0 0 calc(var(--innerRadius) - 0.4em) black,
0 0 0 var(--innerRadius) lime;
}
用伪元素 ::before 画出动画用到的圆环:
.circle::before {
content: '';
position: absolute;
width: calc(var(--innerRadius) * 2 * 2);
height: calc(var(--innerRadius) * 2 * 2);
border: 2px solid lime;
border-radius: 50%;
}
增加动画效果:
.circle::before
animation: pulse 2s linear infinite;
}
@keyframes pulse {
from {
transform: scale(1);
}
to {
transform: scale(2);
}
}
优化动画——增加渐淡和弹性效果:
.circle::before
animation: pulse 2s ease-out infinite;
}
@keyframes pulse {
from {
filter: opacity(0.9);
}
to {
filter: opacity(0);
}
}
最后,用伪元素 ::after 再画出一个动的圆环:
.circle::after {
content: '';
position: absolute;
width: calc(var(--innerRadius) * 2 * 2);
height: calc(var(--innerRadius) * 2 * 2);
border: 2px solid lime;
border-radius: 50%;
animation: pulse 2s ease-out infinite;
}
.circle::after {
animation-delay: 1s;
}
大功告成!
知识点
- variables https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Variables
- calc() https://developer.mozilla.org/en-US/docs/Web/CSS/calc
- animation-timing-function https://developer.mozilla.org/en-US/docs/Web/CSS/animation-timing-function
- filter https://developer.mozilla.org/en-US/docs/Web/CSS/filter#Functions
- box-shadow https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow
最新文章
- Java 发送邮件
- 【转】 shell 判断语句
- 使用jxl,poi读取excel文件
- find_first_of()和 find_last_of() 【获取路径、文件名】
- Unity 3D学习之 Prime31 Game Center插件用法
- 通知---iOS
- C#中常见的委托(Func委托、Action委托、Predicate委托)
- Linux select TCP并发服务器与客户端编程
- [OJ] Search for a Range
- MySQL推出Applier,可实时复制数据到Hadoop
- offsetLeft
- html5 contenteditable 实现table可编辑(网页版EXCEL)
- rsync 安装
- C# 基础之const
- websocket项目电子签字使用场景
- java.lang.IllegalStateException: Fragment bb{42261900} not attached to Activity
- JavaScript将具有父子关系的原始数据格式化成树形结构数据(id,pid)
- Golang把所有包括底层类库,输出到stderr的内容, 重新定向到一个日志文件里面?
- 重构改善既有代码设计--重构手法12:Extract Class (提炼类)
- Tomcat热启动
热门文章
- c++11多线程---std::ref和std::cref
- visudo编辑sudoers
- hook工具
- Type.MakeGenericType 方法 (Type[]) 泛型反射
- WPF DevExpress Chart控件 需要引用的类库
- 3.k8s资源控制器rs Deployment Job
- C#读取xml节点数据方法小结
- 手把手教你SOAP访问webservice并DOM解析返回的XML数据(转)
- vue+express利用token 完成前后端登录
- 傻傻分不清?Integer、new Integer() 和 int 的面试题