css3 太极动画,纯css实现太极阴阳鱼动画

原标题:纯css实现太极阴阳鱼动画

4dc38d93c76f94560522cfe3ee6a56d7.gif

今天看到一个有意思的效果,闲来无事做一个:

把2d静态的太极图改成了3d,阴极和阳极分到了两个平面里实现旋转效果,这个好实现,重点是实现它的透明效果,平面太极图显示出两极是用另加的块元素挡住底面的颜色,但如果上图的两极用遮挡来实现效果的话并不能实现透明,将遮挡的块设为透明又会显示出底面原本的样子,所以这个思路不对。那就只能将底面本身变为透明,但怎么实现既透明又能出现这种样子呢?渐变,而且为了能出现圆的样子选择了径向渐变。

e12dfb170ab40920c8846536be5a8e1d.png

效果:

be0d083d239f85513d090bbd696513ba.png

路明确,开始操作

一个极分成四个块,圆头,肚子,尾,还有分离的小圆。

第一块圆,中间透明。

a6bd716896a591ef203258add3d4872d.png

第二块与之相连,为了不遮挡第一块中间的圆所以要改一下

给右上角加圆角属性改为半圆,加上径向渐变,原点改为靠左居中再调一下透明的百分比。

阳极结构代码如下:

阳极css代码如下:

main{

width:500px;

height:500px;

position:absolute;

top:100px;

left:500px;

transform:rotateX(-20deg);

}

main section:nth-of-type(1){

width:250px;

height:250px;

position:absolute;

bottom:0;

right:0;

border-bottom-right-radius:500px;

background:radial-gradient(circle at 0% 50%,transparent 44.6%,#284070 0%);

}

main section:nth-of-type(2){

width:250px;

height:250px;

position:absolute;

top:0;

right:0;

border-top-right-radius:500px;

background:radial-gradient(circle at 0% 50%,transparent 44.6%,#284070 0%);

}

main section:nth-of-type(3){

width:250px;

height:250px;

position:absolute;

top:0;

left:125px;

border-radius:50%;

background:radial-gradient(circle at center,transparent 62.5px,#284070 0%);

}

main section:nth-of-type(4){

width:125px;

height:125px;

background:#284070;

position:absolute;

bottom:62.5px;

left:187.5px;

border-radius:50%;

}

阳极效果图如下:

dd1ff882ff5d3015c9be95a2d70ebe39.png

阴极结构代码如下:

阴极css代码如下:

article{

width:500px;

height:500px;

position:absolute;

top:100px;

left:500px;

transform:rotateX(-20deg);

}

article aside:nth-of-type(1){

width:250px;

height:250px;

position:absolute;

bottom:0;

left:0;

border-bottom-left-radius:500px;

background:radial-gradient(circle at 100% 50%,transparent 44.6%,#889090 0%);

}

article aside:nth-of-type(2){

width:250px;

height:250px;

position:absolute;

top:0;

left:0;

border-top-left-radius:500px;

background:radial-gradient(circle at 100% 50%,transparent 44.6%,#889090 0%);

}

article aside:nth-of-type(3){

width:250px;

height:250px;

position:absolute;

bottom:0;

left:125px;

border-radius:50%;

background:radial-gradient(circle at center,transparent 62.5px,#889090 0%);

}

article aside:nth-of-type(4){

width:125px;

height:125px;

background:#889090;

position:absolute;

top:62.5px;

left:187.5px;

border-radius:50%;

}

阴极效果图如下:

91de3d6b68a40b8b71c22adc7a85b42b.png

阳极加阴极效果图:

5a85053c25152dafc016a584272f712d.png

将2d平面转换为3d代码如下:

body{ transform-style:preserve-3d; background:#000; perspective:1800px; }

将2d平面转换为3d效果如下:

251e07d5253db88fa4e8bae9b431ceb0.png

创建动画关键帧及添加animation属性代码:

阳极动画关键帧:

@keyframes mv1{

0%{

transform:rotateX(45deg) rotateY(30deg) rotateZ(0deg);

}

50%{

transform:rotateX(45deg) rotateY(30deg) rotateZ(-180deg);

}

100%{

transform:rotateX(45deg) rotateY(30deg) rotateZ(-360deg);

}

}

给阳极添加animation属性代码:

main{

transform:rotateX(45deg) rotateY(30deg);

animation:mv1 2.5s linear infinite;

}

阴极动画关键帧:

@keyframes mv2{

0%{

transform:rotateX(45deg) rotateY(-30deg) rotateZ(0deg);

}

50%{

transform:rotateX(45deg) rotateY(-30deg) rotateZ(-180deg);

}

100%{

transform:rotateX(45deg) rotateY(-30deg) rotateZ(-360deg);

}

}

给阴极添加animation属性代码:

article{

transform:rotateX(45deg) rotateY(-30deg);

animation:mv2 2.5s linear infinite;

}

最终效果图如下:

59723f8f9a40a11fd37f33bd3f9bcc62.png

完成!

总结:

整体没有难度,难在想到它的透明并且怎样去实现。因为不能用常规的遮挡,只能让自身实现透明效果。顺着这个思路想到径向渐变然后去实现效果。有了思路剩下的就是常规的敲了。返回搜狐,查看更多

责任编辑:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值