css实现炫酷充电动画
创始人
2025-05-28 18:47:06
0

先绘制一个电池,电池头部和电池的身体
在这里插入图片描述
这里其实就是两个div,使用z-index改变层级,电池的身体盖住头部,圆角使用border-radius完成
html部分,完整的css部分在最后

绘制电池的css部分

.chargerBox{width: 200px;height: 200px;background: #eee;margin: 30px;padding: 50px;.chargerHead{width: 20px;height: 20px;background: #e9e9e9;border-radius: 4px;margin: 0 auto;box-shadow: 0px 0px 6px -2px #6d6d6d;animation: light 1s forwards linear 25s;}.chargerBody{width: 120px;height: 180px;margin: 0 auto;margin-top: -12px;border-radius: 15px 15px 10px 10px;z-index: 10;background-color: #fff;box-shadow: 0px 0px 6px -2px #6d6d6d;}
}

绘制完身体后开始给电池充电,让电池身体内部动起来。
给电池内部添加一个divdiv的初始高度为0,随着动画的播放,慢慢的充满电池
在这里插入图片描述
这里充电的颜色可以改成渐变,随着电量的饱和,渐变的颜色也会随之更改,linear-gradient渐变是不能直接更改颜色的,这里可以使用 filter: hue-rotate();来修改图像的色相值,从而达到渐变动画的效果。
下面是充电部分的代码:

.water{width: 120px;height: 10px;position: absolute;bottom: 0;background: linear-gradient(0deg,#7F7FD5,#86A8E7,#91eae4);filter: hue-rotate(0deg);  /**关于渐变,普通的颜色更改是无效的,只能通过filter:hue-rotate色相旋转来实现颜色变化,初始不变 */animation: riseWater 20s forwards  linear;left: 50%;transform: translateX(-50%);
}
@keyframes riseWater {from {height: 10px;}to {height: 100%;filter: hue-rotate(60deg);   /* 颜色变化 */}
}

在这里插入图片描述
现在电池的电量已经充起来了,写到这里,充电的部分已经ok了,剩下的就是让电量动起来,像水一样流动

先绘制一个圆角矩形

border-radius: 45% 

在这里插入图片描述
这个圆角矩形就是充电动画的关键,静止的时候其实看不出来它与水流有什么关联,咱们让它动起来观察一下
在这里插入图片描述
这一块就是水流动画的显示部分,白色的是水流,灰色的不展示,上一步中已经写好了充电的动画,这里只需要将该位置叠加到充电动画上面,即可完成充电的水流效果。
在这里插入图片描述
水流一般是多层的,所以这里可以再添加一个旋转的矩形,两个矩形旋转的角度和时长不同,并且更改其中一个矩形的rgba即可实现真实的水流效果。

.whiteBox{width: 300px;height: 300px;position: absolute;left: 50%;bottom: -10px;transform: translateX(-50%);animation: whiteBoxTop 25s forwards linear;&::before{content: '';width: 100%;height: 100%;position: absolute;background: #fff;border-radius: 45% ;animation: whiteSpin 5s infinite linear;}&::after{content: '';width: 101%;height: 101%;position: absolute;border-radius: 45% ;background: rgba(255,255,255,0.3);animation: whiteSpin2 7s infinite linear;}
}
@keyframes whiteBoxTop {from {bottom: 0;}to {bottom: 190px;}
}@keyframes whiteSpin {from {transform:rotate(0deg);}to {transform:rotate(360deg);}
}@keyframes whiteSpin2 {from {transform:rotate(0deg);}to {transform:rotate(360deg);}
}

注意:矩形的旋转必须是360度的,否则会出现卡顿的情况,因为无限循环的动画第一次循环结束后会回到最初的起点,如果不是360度可能会发生旋转到某度(例如:200度)的时候度数重置到0,重新循环就会出现不流畅的画面。

在这里插入图片描述
做完水流动画后,给电池的头部加一个动画,延迟时间为充电设置的时间,当电池充满时,头部亮起表示电池已经充满。
我这里设置的充满时长为20s,这里需要延迟25s,因为水流的中间有凹陷的地方,所以延迟时间需要大于充满时长才行。

    .chargerHead{width: 20px;height: 20px;background: #e9e9e9;border-radius: 4px;margin: 0 auto;z-index: 10;box-shadow: 0px 0px 6px -2px #6d6d6d;animation: light 1s forwards linear 25s;  /*延迟25s*/}@keyframes light {from {background: #ffe793;}to {background: #ffe793;filter: contrast(200%);  /*让头部亮起来 增加200%的饱和度*/}}

完成这些后,需要给电池增加渐变阴影,让电池有厚度感和真实感,这里创建一个div,大小和电池一致,通过给电池添加z-index使电池覆盖div,使用filter: blur(20px)来让底部的div高斯模糊从而实现阴影的效果,阴影和电池的颜色保持一致(动态渐变),并且div的动画时长和高度也和电池保持一致。

/* 渐变阴影 */
.shade{width: 120px;height: 0px;margin: 0 auto;margin-top: 0px;border-radius: 15px 15px 15px 15px;background: linear-gradient(0deg,#7F7FD5,#86A8E7,#91eae4);filter: blur(10px);animation: shadeBase 25s forwards linear;
}
@keyframes shadeBase {from {  height: 0px; margin-top: 0px;filter: blur(20px) hue-rotate(0deg);   /* 颜色变化 */ }to {  height: 180px; margin-top: -180px;  /*高度和电池一致*/filter: blur(20px) hue-rotate(60deg);   /* 颜色变化 */ }}
}

在这里插入图片描述
除了这种方案外,还可以使用box-shadow实现阴影,box-shadow使用rgba,在动画渲染的同时修改rgba来实现阴影颜色的变化。

   @keyframes shadeBase {from {  height: 0px; margin-top: 0px;box-shadow: 0px 0px 15px 10px rgba(143, 148, 227,0.2);}to {  height: 180px; margin-top: -180px;box-shadow: 0px 5px 20px 5px rgba(203, 163, 238,0.8); }}

下面是css部分的代码

.chargerBox{width: 200px;height: 200px;margin: 30px;padding: 50px;.chargerHead{width: 20px;height: 20px;background: #e9e9e9;border-radius: 4px;margin: 0 auto;z-index: 10;box-shadow: 0px 0px 6px -2px #6d6d6d;animation: light 1s forwards linear 25s;}@keyframes light {from {background: #ffe793;}to {background: #ffe793;filter: contrast(200%);}}.chargerBody{width: 120px;height: 180px;margin: 0 auto;margin-top: -12px;border-radius: 15px 15px 10px 10px;z-index: 10;box-shadow: 0px 0px 6px -2px #6d6d6d;position: relative;overflow: hidden;.water{width: 120px;height: 10px;position: absolute;bottom: 0;background: linear-gradient(0deg,#7F7FD5,#86A8E7,#91eae4);filter: hue-rotate(0deg);  /**关于渐变,普通的颜色更改是无效的,只能通过filter:hue-rotate色相旋转来实现颜色变化,初始不变 */animation: riseWater 20s forwards  linear;left: 50%;transform: translateX(-50%);}@keyframes riseWater {from {height: 10px;}to {height: 100%;filter: hue-rotate(60deg);   /* 颜色变化 */}}.whiteBox{width: 300px;height: 300px;position: absolute;left: 50%;bottom: -10px;transform: translateX(-50%);animation: whiteBoxTop 25s forwards linear;&::before{content: '';width: 100%;height: 100%;position: absolute;background: #fff;border-radius: 45% ;animation: whiteSpin 5s infinite linear;}&::after{content: '';width: 101%;height: 101%;position: absolute;border-radius: 45% ;background: rgba(255,255,255,0.3);animation: whiteSpin2 7s infinite linear;}}@keyframes whiteBoxTop {from {bottom: 0;}to {bottom: 190px;}}@keyframes whiteSpin {from {transform:rotate(0deg);}to {transform:rotate(360deg);}}@keyframes whiteSpin2 {from {transform:rotate(0deg);}to {transform:rotate(360deg);}}}/* 渐变阴影 */.shade{width: 120px;height: 0px;margin: 0 auto;margin-top: 0px;border-radius: 15px 15px 15px 15px;background: linear-gradient(0deg,#7F7FD5,#86A8E7,#91eae4);filter: blur(10px);animation: shadeBase 25s forwards linear;}@keyframes shadeBase {from {  height: 0px; margin-top: 0px;filter: blur(20px) hue-rotate(0deg);   /* 颜色变化 */ }to {  height: 180px; margin-top: -180px;filter: blur(20px) hue-rotate(60deg);   /* 颜色变化 */ }}
}

该动画的灵感来自:https://github.com/chokcoco/iCSS/issues/75


案例源码:https://gitee.com/wang_fan_w/css-diary

如果觉得这篇文章对你有帮助,欢迎点赞、收藏、转发哦~

相关内容

热门资讯

赋能产业升级!逸马连锁产业集团... 深圳商报·读创客户端首席记者 刘琼 7月28日,由逸马连锁产业集团主办的“百亿连锁蛋糕·百路豪杰共享...
28日纸浆下跌1.72%,最新... 来源:新浪期货 新浪期货 根据交易所数据,截至7月28日收盘主力合约纸浆2509,涨跌-1.72%,...
美股民热衷“冷门潜力股” 近日,美股市场一甩二季度的阴霾。上周,标准普尔500指数上涨1.5%,至6389点,纳斯达克综合指数...
7月28日江特电机发布公告,股... 证券之星消息,7月28日江特电机发布公告《江特电机:详式权益变动报告书》,其股东王新于2025年2月...
无问芯穹CEO夏立雪:抵达AG... 新浪科技讯 7月28日下午消息,2025年世界人工智能大会期间,无问芯穹联合创始人、CEO夏立雪提出...
5名银行高管,密集履新佛山 南都N视频记者从国家金融监督管理总局广东监管局官网获悉,7月22日,佛山监管分局批复了5名银行高管在...
6G概念强势拉升,光迅科技、世... 6G概念28日盘中强势拉升,截至发稿,硕贝德涨近17%,兴森科技、直真科技、光迅科技、世嘉科技等均涨...
外交部回应长和新公告:将依法进... 7月28日,外交部发言人郭嘉昆主持例行记者会时,回应记者有关长和集团最新公告的提问时表示:“我们关注...
玉象胡杨硝酸铵首出国门,红其拉... 近日,两辆满载广东宏大(002683.SZ)控股企业雪峰科技(603227.SH)所属新疆玉象胡杨化...
原创 2... 雷达财经出品 文|彭程 编|孟帅 日前,被外界誉为港股“三朵金花”之一的老铺黄金,对外发布了正面盈利...
异地公积金贵阳买房攻略!手把手... 异地公积金 在贵阳买房攻略 贵阳的准业主们注意啦!2025年5月1日起,《贵阳市住房公积金异地个人...
开价185亿,刘强东竞买德国超... 来源:21世纪商业评论 作者:杨松 鄢子为 图源:京东 在境外,刘强东忙着物色标的。 7月24日,德...
股票行情快报:中成股份(000... 证券之星消息,截至2025年7月28日收盘,中成股份(000151)报收于13.0元,下跌0.31%...
1576万融资杀入康众医疗!这... 来源:倪卫涛 最近刷行情软件,发现个特逗的事儿:康众医疗上周融资净买入1576.23万元,在全市场排...
数据看盘IF期指多头大幅加仓 ... 一、沪深股通前十大成交 今日沪股通总成交金额为1158.99亿,深股通总成交金额为1107.72亿。...
前湖北首富被传坠亡,公司股价暴... 7月28日,家居行业龙头居然智家董事长汪林朋被传于昨日上午坠亡。多家媒体援引行业资深人士信息,证实此...
监管出手碳酸锂期货跌停,“反内... 21世纪经济报道记者 董鹏 报道 交易所调控压力之下,商品期货市场明显降温。 继上周五涨停后,7月2...
山鹰国际:长江证券、建信基金等... 证券之星消息,2025年7月28日山鹰国际(600567)发布公告称长江证券、建信基金、大成基金于2...
越卖越亏?酒鬼酒等业绩暴跌!白... 2025年白酒中报预告季,分化与寒意扑面而来。 截至7月27日,超15家酒企预告揭晓:顺鑫农业(牛栏...
50万台按摩椅年入8亿,撑起一... 来源:直通IPO,文/王非 创业10年,这家公司正在冲刺IPO。 7月25日,智能按摩服务供应商福建...