按下右侧的“点击预览”按钮能够在当前页面预览,点击连接能够全屏预览。
https://codepen.io/comehope/pen/YvBvBrcss
此视频是能够交互的,你能够随时暂停视频,编辑视频中的代码。html
请用 chrome, safari, edge 打开观看。前端
https://scrimba.com/p/pEgDAM/cwE7NCmgit
每日前端实战系列的所有源代码请从 github 下载:github
https://github.com/comehope/front-end-daily-challengeschrome
定义 dom,只有 1 个元素:dom
<div class="loader"></div>
居中显示:flex
body { margin: 0; height: 100vh; display: flex; align-items: center; justify-content: center; background: radial-gradient(darkgreen 30%, forestgreen); }
定义容器尺寸:动画
.loader { width: 10em; height: 10em; font-size: 20px; }
用 box-shadow 画出 2 组点阵:spa
.loader::before, .loader::after { content: ''; position: absolute; width: 1em; height: 1em; background-color: currentColor; box-shadow: 0 0, 2em 0, 4em 0, 6em 0, 0 2em, 2em 2em, 4em 2em, 6em 2em, 0 4em, 2em 4em, 4em 4em, 6em 4em, 0 6em, 2em 6em, 4em 6em, 6em 6em; border-radius: 50%; } .loader::before { color: gold; } .loader::after { color: dodgerblue; }
定义动画:
@keyframes round { 0% { transform: translateX(0) translateY(0); } 25% { transform: translateX(3em) translateY(0); } 50% { transform: translateX(3em) translateY(3em); } 75% { transform: translateX(0) translateY(3em); } }
最后,把动画效果应用到点阵上:
.loader::before, .loader::after { animation: round 2s ease infinite; } .loader::after { animation-delay: -1s; }
大功告成!