在线演示
html
按下右侧的“点击预览”按钮能够在当前页面预览,点击连接能够全屏预览。前端
https://codepen.io/comehope/pen/eKzjqKgit
此视频是能够交互的,你能够随时暂停视频,编辑视频中的代码。github
请用 chrome, safari, edge 打开观看。chrome
https://scrimba.com/p/pEgDAM/c8eyJUEsegmentfault
每日前端实战系列的所有源代码请从 github 下载:dom
https://github.com/comehope/front-end-daily-challengesflex
定义 dom,一个容器中包含 9 个子元素:动画
<div class="loader"> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> </div>
居中显示:url
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