博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSS实现3D切换效果
阅读量:6682 次
发布时间:2019-06-25

本文共 2661 字,大约阅读时间需要 8 分钟。

先上效果图和代码吧

鼠标悬浮上去,蓝色的front面开始旋转

clipboard.png

蓝色的front面转过90°时,黄色的back面会显现出来,

clipboard.png

            
front
back

另一个版本,无限循环的,改变相应的CSS即可

div#outer{            width: 200px;            height: 200px;            position: relative;            perspective: 300px;            margin:100px auto;        }        div#front, div#back{            position: absolute;            width: 200px;            height: 200px;            backface-visibility: hidden;            transition: transform 4s linear;        }        div#front{            background-color: blue;        }        div#outer:hover div#front{            -webkit-animation: rotateFront 12s linear infinite;            -o-animation: rotateFront 12s linear infinite;            animation: rotateFront 12s linear infinite;        }        div#back{            background-color:yellow;            transform: rotateY(180deg);        }        div#outer:hover div#back{            -webkit-animation: rotateBack 12s linear infinite;            -o-animation: rotateBack 12s linear infinite;            animation: rotateBack 12s linear infinite;        }        @keyframes rotateFront{            0%{                transform: rotateY(0deg);            }            100%{                transform: rotateY(-360deg);            }        }        @keyframes rotateBack{            0%{                transform: rotateY(180deg);            }            100%{                transform: rotateY(-180deg);            }        }

推荐一下.但大神有个地方说得不对,即backface-visibility的的作用,这个我后面会解释。

解释一下:

  • 3D效果的条件:得在父元素上设置perspective:XXXpx,这个数字可以大致理解为相机镜头的焦距,'焦距'越短(对应perspective数字越小),则变形效果越明显。譬如设置值为300px,相对于100px,则元素的变形较弱一些。如果没有设置该属性,那么3D变换将被限制在浏览器的二维平面上,只有简单的伸缩,如图所示。经过测试,其视觉效果和perspective:9999em是一样,相当于从无限远处平面(超长焦)观察这个3D动画。

clipboard.png

  • 关于backface-visibility这个属性。其作用是当3D旋转过正面,设置是否显示其背面。光文字是不清楚,看图!!下面两图可以对比一下。

    (没有设置backface-visibility:hiddentransform:rotateY(120deg);时的效果)

clipboard.png

(transform:rotateY(70deg);的效果)

clipboard.png

  • 如果设置backface-visibility:hidden;的话,那么上图再多旋转20度,就看不见啦!为什么呢?因为我们设置背面是不显示的,所以该元素在rotateY(90deg)到rotateY(270deg)这个区间(相当于该元素不以正面示人,喜欢后入XD),是不可见的!

掌握了这两点,结合我们已经很熟悉的transform:rotateY,就很容易做出所要的效果了!!

首先在父元素上设置perspectiveposition:relative,为3D视角和子元素绝对定位做准备!

之后要在父元素内部设置和父元素大小相同的两个子元素,一个正面示人,一个则留下寂寞的背影!放心,等会汇给你展示的机会!

问题来了,怎么在同一时间只显示一个元素呢?如何做到转过90度时,将正面元素隐藏,开始显示背面元素呢?这位观众,你想到解决方案了吗?

没错!就是利用我们之前提到的backface-visibility属性!设置两个元素的该属性为hidden,后背元素的初始值为180deg,记得我们之前说过设置backface-visibility:hidden的元素旋转到90度到270度区间,元素不可见吗?正好用在这里,使用这个属性,达到了隐藏第二个元素的效果。

之后就是播放动画了,我们让正面元素在hover时旋转180度,同时让背面元素也向同样方向旋转180度。

clipboard.png

当两个元素都旋转90度时,amazing happens!正面元素不可见了,在本例中是默认的0度旋转到了-90度;但同时,背面元素显露出来了,从初始的180度减小到了90度,进入了能显示的区间!两个元素完成了接力!

结语:

CSS的3D变换还有很多花样,继续探索!

转载地址:http://yvaao.baihongyu.com/

你可能感兴趣的文章
高速缓存dns
查看>>
安装lenovo SR860 7x69服务器遇到的坑
查看>>
MIT透过机器学习技术用胺基酸预测蛋白质结构
查看>>
python课堂笔记之django-day01(8)
查看>>
Hadoop之HDFS分布式文件系统具有哪些优点?
查看>>
小型企业公司路由器做DHCP服务器
查看>>
愿不负青春 历经风雨 归期我们仍是少年|六一大童节
查看>>
洞悉物联网发展1000问之物联网与大数据,人工智能到底是什么关系?
查看>>
JAVA数组和面向对象
查看>>
NVisionXR_iOS教程四 —— 在立方体上贴材质
查看>>
Microsoft Visual C++ Runtime library not enough space for thread data
查看>>
Centos 7 ntp时间服务器搭建
查看>>
要想月薪达到5万,要必备以下9项技能,阿里前大数据工程师说的
查看>>
电压电流采集模块,温湿度采集,称重模块,变送器,adc模数转换模块
查看>>
linux网卡配置
查看>>
RAID和LVM
查看>>
学hadoop需要什么基础
查看>>
2019北京物联网智慧城市大数据博览会开启中国之路
查看>>
华为云网络服务两场景
查看>>
将 Desktop Central 与帮助台和 OS Deployer 集成
查看>>