如何使用纯CSS实现一个沙漏的动画效果

本篇文章给大家带来的内容是关于如何使用css实现监控网络连接状态的页面 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

效果预览

3008944611-5b827a0c6263a_articlex.gif

源代码下载

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

代码解读

定义 dom,容器中包含 2 个元素,分别代表沙漏的上半部和下半部:

登录后复制

居中显示:

立即学习“前端免费学习笔记(深入)”;

body {    margin: 0;    height: 100vh;    display: flex;    align-items: center;    justify-content: center;    background-color: gainsboro;}

登录后复制

定义容器尺寸,并设置子元素整体布局:

.loader {    width: 4.3em;    height: 9.8em;    font-size: 10px;    position: relative;    display: flex;    flex-direction: column;    align-items: center;    justify-content: space-between;}

登录后复制

画出 2 个正方形:

.top,.bottom {    width: 3.5em;    height: 3.5em;    border-style: solid;    border-color: saddlebrown;}

登录后复制

通过边框、圆角和旋转,把 2 个正方形变成沙漏形状:

.top,.bottom {    border-width: 0.2em 0.2em 0.6em 0.6em;    border-radius: 50% 100% 50% 30%;}.top {    transform: rotate(-45deg);}.bottom {    transform: rotate(135deg);}

登录后复制

用伪元素画出沙子,上部的沙子的顶部是大圆弧,下部的沙子的顶部是小圆弧:

.top::before,.bottom::before {    content: '';    position: absolute;    width: inherit;    height: inherit;    background-color: deepskyblue;}.top::before {    border-radius: 0 100% 0 0;}.bottom::before {    border-radius: 0 0 0 35%;}

登录后复制

定义沙子的动画属性:

.top::before,.bottom::before {    animation: 2s linear infinite;}

登录后复制

增加沙子从沙漏的上半部落下的动画效果:

.top::before {    animation-name: drop-sand;}@keyframes drop-sand {    to {        transform: translate(-2.5em, 2.5em);    }}

登录后复制

增加沙子的沙漏在下半部堆积的动画效果:

.bottom::before {    transform: translate(2.5em, -2.5em);    animation-name: fill-sand;}@keyframes fill-sand {    to {        transform: translate(0, 0);    }}

登录后复制

隐藏沙漏上半部和下半部容器外的部分,此时上面 2 个动画的叠加效果是沙子从上半部漏下,慢慢在下半部堆积:

.top,.bottom {    overflow: hidden;}

登录后复制

用外层容器的伪元素制作一个窄长条,模拟流动的沙子:

.loader::after {    content: '';    position: absolute;    width: 0.2em;    height: 4.8em;    background-color: deepskyblue;    top: 1em;}

登录后复制

增加沙子流动的动画效果:

.loader::after {    animation: flow 2s linear infinite;}@keyframes flow {    10%, 100% {        transform: translateY(3.2em);    }}

登录后复制

最后,增加沙漏的翻转动画:

.loader {    animation: rotating 2s linear infinite;}@keyframes rotating {    0%, 90% {        transform: rotate(0);    }        100% {        transform: rotate(0.5turn);    }}

登录后复制

大功告成!

相关推荐:

如何使用CSS和D3实现一组彩灯(附代码)

如何使用CSS和D3实现一组彩灯(附代码)

以上就是如何使用纯CSS实现一个沙漏的动画效果的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2893272.html

(0)
上一篇 2025年3月10日 22:34:06
下一篇 2025年2月26日 09:37:24

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论