如何用CSS制作一个粽子融合的端午特效
Admin 2022-11-01 群英技术资讯 409 次浏览
本期将带给大家的是一个css创意特效——端午加载动画,想法是让粽叶,糯米,红枣绕圆旋转,然后聚集起来融合后变成一个可爱的小粽子的效果。继续阅读你将会得到图像外发光效果,滤镜效果,动画样式控制等知识。还等什么呢?赶紧抓紧学习,抓紧使用,不然就要等明年了~
点击查看效果演示
本次我们分别会用到粽叶,糯米,红枣,粽子4个素材,最简单快捷的办法就是从confont官网上去挑选,然后直接拷贝的svg代码粘贴到我们的项目中。
因为考虑到素材中有糯米,其颜色偏白,故使用了黑色背景来使其更加醒目,同时为了不让其生硬,所以这里用css给其增加了外发光效果。代码非常简单只使用 filter: drop-shadow()
就可以做到,该方法是css将阴影效果应用于输入图像。这样图像就可以非常简单的实现外发光的效果,但缺点也很非常致命,因为它只会在 Chrome v.85.0.4183.121
以后才得到支持,要求的版本也算比较高了,当然如果浏览器不支持也不会产生负面影响的。
.loading-item{ filter: drop-shadow(0px 0px 8px rgba(252, 233, 124,.8)) }
在这时候我们就要开始来写动画了,但在此之前,我们先定义好,动画的执行周期,和延迟时间。这样后面所有的动画都会使用到这两个值,后期就随时调整他们的参数,使之感觉上最佳。
$duration:4.2s; // 执行周期 $delay:-$duration/2; // 延迟时间
这个主动画有两部分组成,第一大部分是旋转他们,我直接把三样素材都放到了 div.loading-assets
容器中,然后对这个容器进行360度的旋转即可。
.loading-assets{ width: 100%; height: 100%; animation: rotate $duration infinite; animation-delay: $delay; } @keyframes rotate{ 0%,60%{ transform: rotate(0deg); } 80%,100%{ transform: rotate(360deg); } }
然后就通过scss的 for语法
对这三个素材进行遍历,依次给他们附上三个不同的动画,每个动画就是根据其位置,然后更改方位,因为写了绝对定位都在中心点固定者,所以在其方向的偏移也不难计算。
.loading-item{ width: 60px; height: 60px; border-radius: 50%; position: absolute; left: 50%; top: 50%; margin: -30px 0 0 -30px; filter: drop-shadow(0px 0px 8px rgba(252, 233, 124,.8)); @for $i from 1 through 3 { &:nth-child(#{$i}) { animation: #{'item-move-'+$i} $duration infinite; animation-delay: $delay; } } } @keyframes item-move-1 { 0%,20%,100%{transform: translate(0,0) scale(1)} 40% {transform: translate(0,-18px) scale(.7)} 60% {transform: translate(0,-85px) scale(.7)} 80% {transform: translate(0,-85px) scale(.7)} } @keyframes item-move-2 { 0%,20%,100%{transform: translate(0,0) scale(1)} 40% {transform: translate(-16px, 12px) scale(.7)} 60% {transform: translate(-90px, 65px) scale(.7)} 80% {transform: translate(-90px, 65px) scale(.7)} } @keyframes item-move-3 { 0%,20%,100%{transform: translate(0,0) scale(1)} 40% {transform: translate(16px, 12px) scale(.7)} 60% {transform: translate(90px, 65px) scale(.7)} 80% {transform: translate(90px, 65px) scale(.7)} }
因为刚才的三种素材聚集起来然后合成粽子的话,会感觉有些生硬,所以就要做出一个在感官上三种素材发生融合的效果。这里,我们用到了 svg的滤镜效果:
.loading-item{ width: 60px; height: 60px; border-radius: 50%; position: absolute; left: 50%; top: 50%; margin: -30px 0 0 -30px; filter: drop-shadow(0px 0px 8px rgba(252, 233, 124,.8)); @for $i from 1 through 3 { &:nth-child(#{$i}) { animation: #{'item-move-'+$i} $duration infinite; animation-delay: $delay; } } } @keyframes item-move-1 { 0%,20%,100%{transform: translate(0,0) scale(1)} 40% {transform: translate(0,-18px) scale(.7)} 60% {transform: translate(0,-85px) scale(.7)} 80% {transform: translate(0,-85px) scale(.7)} } @keyframes item-move-2 { 0%,20%,100%{transform: translate(0,0) scale(1)} 40% {transform: translate(-16px, 12px) scale(.7)} 60% {transform: translate(-90px, 65px) scale(.7)} 80% {transform: translate(-90px, 65px) scale(.7)} } @keyframes item-move-3 { 0%,20%,100%{transform: translate(0,0) scale(1)} 40% {transform: translate(16px, 12px) scale(.7)} 60% {transform: translate(90px, 65px) scale(.7)} 80% {transform: translate(90px, 65px) scale(.7)} }
其中, feGaussianBlur
标签的目的是为了对输入图像进行高斯模糊,而 feColorMatrix
则是通过转换矩阵来对色值进行变换。
接下来,我们在创建一个 mix动画
在其需要融合的关键位置 通过 filter属性
引入刚才做滤镜效果,这一阶段就大功告成了 。
.loading-assets{ width: 100%; height: 100%; animation: rotate $duration infinite, mix $duration infinite; animation-delay: $delay; } @keyframes mix{ 0%,40%{ filter: url(#mix); opacity: 1; } 8%,36%{ opacity: 0; } 48%,80%{ filter: none; opacity: 1; } 100%{ filter: url(#mix); opacity: 1; } }
最后一步也是最简单的一步就是把可爱的小粽子对应起刚才融合后的空隙那段时间显示出来。
.loading-result{ width: 50px; height: 50px; left: 50%; top: 50%; position: absolute; margin-left: -25px; margin-top: -25px; animation: show $duration infinite; animation-delay: $delay; filter: drop-shadow(0px 0px 8px rgba(252, 233, 124,.5)) } @keyframes show{ 0%,48%,100%{ opacity: 0; transform:scale(1); } 8%,36%{ opacity: 1; transform:scale(1.5); } }
当然,上面的代码我们可以发现,在 show动画
中,粽子显示的时候放大了1.5倍,目的是为了突出粽子完成合成操作的效果。还有毕竟三样素材累加后肯定体积会变大的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了CSS3为背景图设置遮罩并解决遮罩样式继承问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
css怎么写一个椭圆形按钮在css中,可以通过border-radius属性实现椭圆形按钮。下面我们通过示例来看一下,示例如下:首先我们先给按钮元素添加一个矩形的样式<!DOCTYPE html><htm
外部样式表,通过标签引入CSS。内部样式表,在HTML文档中的标签里通过标签书写CSS代码。行内样式表,通过属性书写CSS语句。导入样式表,使用@import指令导入外部样式表。
这篇文章给大家分享的是HTML实现合并表格边框的内容,因为给table和td标签加边框时,默认使用双边框,那么怎样次啊能实现合并表格边框呢?文中会使用HTML+CSS来实现这个效果,感兴趣的朋友接下来一起跟随小编看看吧。
这篇文章给大家分享css3制作按钮的内容,我们知道按钮的样式有很多,本文分享的是实现彩虹按钮的样式的实例,实现效果及代码如下,接下来跟随小编来了解看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008