seattle^-^ 发表于 2019-12-22 20:18

CSS样表做的立体3D旋转特效

本帖最后由 seattle^-^ 于 2019-12-22 21:49 编辑

最近浏览网页的时候发现某位大神的网页有一个立体3D旋转特效,感觉十分炫酷,就学了学。照着葫芦画瓢,源码分享一下。
先来效果图












哈哈,其实这是个动画特效。笔者比较菜,不大会GIF。所以各位脑补一下哈。

动画一直在旋转,一开始是一个关闭的立方体,鼠标移动到立方体以后立方体就会展开。一直在旋转,可以把图片换成任意想要的,我个人当初看到的特效就是狐妖,所以我也做成狐妖的样子了。

具体的实现的方法也很简单,HTML标签加上CSS层叠样表。跟大家分享一下,有兴趣的来啊。:lol

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CSS3立方体3D旋转</title>
<style type="text/css">
*{/*全体元素样表*/
      margin:0 auto;/*外边框为0*/
      padding:0;/*内边框为0*/
}
@keyframes rotate{/*动画 旋转   规则与animation*/
      0%{/*初始*/
                transform:rotateX(0deg) rotateY(0deg);/*绕XY轴转*/
      }
      100%{/*结束*/
                transform:rotateX(360deg) rotateY(360deg);/*绕X轴转,绕Y轴旋转*/
      }
}
html{/*标签选择器*/
      background-color: gray;/*背景颜色灰色*/
}
.wrap{/*类选择器*/
      margin-top:200px;/*上外边距*/
      perspective: 1000px; /*视图(你的屏幕)距元素的距离,也就是观看的距离*/
}
.cube{/*类选择器*/
      width:200px;/*宽度*/
      height:200px;/*高度*/
      position:relative;/*选择定位相对初始位置定位*/
      transform-style:preserve-3d; /*默认flat 2D*//*设置3D空间中呈现*/
      transform:rotateX(-30deg) rotateY(-70deg); /*绕X轴旋转,绕Y轴旋转*/
      animation:rotate 20s infinite linear;/*绑定选择器keyframe的名称rotate,完成动画的时间20s,infinite设置循环,效果为匀速   规则与keyframes*/
}
.cube > div{/*选择父元素为.cube的所有div元素*/
      width:100%;/*宽度*/
      height:100%;/*高度*/
      position:absolute;/*选择定位为绝对定位*/
      opacity:0.85;/*不透明度 0(完全透明) 1(完全不透明)*/
      transition:transform 0.4s ease-in;/*过渡效果的CSS属性的名称,完成过渡效果需要的时间,速度越来越快(ease-in-out先快后慢,linear匀速)*/
}


.cube > span{/*选择父元素为.cube的所有span元素*/
      width:50%;/*宽度*/
      height:50%;/*高度*/
      position:absolute;/*选择定位为绝对定位*/
      top:50px;/*顶部边缘*/
      left:50px;/*左边缘*/
}


.out-front{/*前                选择.cube元素内部所有的.out-front元素*//*下同            */
      transform: translateZ(100px);/*沿Z轴移动*/
}
.out-back{/*后*/
      transform: translateZ(-100px) rotateY(180deg);/*沿着Z轴移动,绕Y轴旋转*/
}
.out-left{/*左*/
      transform: translateX(-100px) rotateY(-90deg);/*沿着X轴移动,绕Y轴旋转*/
}
.out-right{/*右*/
      transform: translateX(100px) rotateY(90deg);/*沿着X轴移动,绕Y轴旋转*/
}
.out-top{/*上*/
      transform: translateY(-100px) rotateX(90deg);/*沿着Y轴移动,绕X轴旋转*/
}
.out-bottom{/*下*/
      transform: translateY(100px) rotateX(-90deg);/*沿着Y轴移动,绕X轴旋转*/
}




.in-front{/*前                   选择.cube元素内部所有的.in-front元素*//*下同            */
      transform: translateZ(50px);/*沿着Z轴移动*/
}
.in-back{/*后*/
      transform: translateZ(-50px) rotateY(180deg);/*沿着Z轴移动,绕Y轴旋转*/
}
.in-left{/*左*/
      transform: translateX(-50px) rotateY(-90deg);/*沿着X轴移动,绕Y轴旋转*/
}
.in-right{/*右*/
      transform: translateX(50px) rotateY(90deg);/*沿着X轴移动,绕Y轴旋转*/
}
.in-top{/*上*/
      transform: translateY(-50px) rotateX(90deg);/*沿着Y轴移动,绕X轴旋转*/
}
.in-bottom{/*下*/
      transform: translateY(50px) rotateX(-90deg);/*沿着Y轴移动,绕X轴旋转*/
}





.cube:hover .out-front{/*前      选择鼠标浮动的.wrap元素内部所有的.out-front元素*//*下同            */
      transform: translateZ(200px);/*沿着Z轴移动*/
}
.cube:hover .out-back{/*后*/
      transform: translateZ(-200px) rotateY(180deg);/*沿着Z轴移动,绕Y轴旋转*/
}
.cube:hover .out-left{/*左*/
      transform: translateX(-200px) rotateY(-90deg);/*沿着X轴移动,绕Y轴旋转*/
}
.cube:hover .out-right{/*右*/
      transform: translateX(200px) rotateY(90deg);/*沿着X轴移动,绕Y轴旋转*/
}
.cube:hover .out-top{/*上*/
      transform: translateY(-200px) rotateX(90deg);/*沿着Y轴移动,绕X轴旋转*/
}
.cube:hover .out-bottom{/*下*/
      transform: translateY(200px) rotateX(-90deg);/*沿着Y轴移动,绕X轴旋转*/
}
div img{
      width: 100%;
      height: 100%;
}

</style>
</head>
<body>
<div class="wrap">
      <div class="cube">
                <!-- 外立方体 -->
                <div class="out-front"><img src="i/qw.jpg" /></div>
                <div class="out-back"><img src="i/hw.jpg" /></div>
                <div class="out-left"><img src="i/zw.jpg" /></div>
                <div class="out-right"><img src="i/yw.jpg" /></div>
                <div class="out-top"><img src="i/sw.jpg" /></div>
                <div class="out-bottom"><img src="i/xw.jpg" /></div>
      <!-- 内立方体 -->
                <span class="in-front"><img src="i/qn.jpg" /></span>
                <span class="in-back"><img src="i/hn.jpg" /></span>
                <span class="in-left"><img src="i/zn.jpg" /></span>
                <span class="in-right"><img src="i/yn.jpg" /></span>
                <span class="in-top"><img src="i/sn.jpg" /></span>
                <span class="in-bottom"><img src="i/xn.jpg" /></span>
      </div>
</div>


</body>
</html>




全部的代码就这些了,怕你们看不懂。我每一行都加了注释哈,累死。其实全部的代码框架还是从网上参考来的,如有雷同,敬请原谅。

不会用的留言啊:lol换上女朋友的照片。他也香啊。{:1_918:}

seattle^-^ 发表于 2019-12-22 20:52

Print 发表于 2019-12-22 20:42
没学过网页,就"其实也没什么就是Html标签加CSS样表"这句,我就很懵

好吧,那你想要写出来得下一番功夫了。不过我可以教你咋玩这些代码。

1.先把我发的那些代码复制到一个txt格式的文本里,然后把文件的.txt拓展名改成.html。
2.接着在创建一个文件夹,文件夹的名字叫“i”。
3.然后在名字叫“i”的这个文件夹里面放十二张图片,十二张图片的名字分别叫“hn.jpg” “hw.jpg” “qn.jpg” “qw.jpg” “sn.jpg" "sw.jpg" "xn.jpg" "xw.jpg" "yn.jpg" "yw.jpg" "zn.jpg" "zw.jpg"。
4.然后把你改成.html拓展名的文件和名叫“i”的文件夹放在同一个文件夹下。
5.打开那个拓展名为.html的文件,就可以看到这个特效了。

mql1314 发表于 2019-12-22 21:00

Rock_L 发表于 2019-12-22 20:36

老大,这个真不会啊,请详细教学呀

Print 发表于 2019-12-22 20:25

老大,这个真不会啊,请详细教学呀:handshake:handshake:handshake

seattle^-^ 发表于 2019-12-22 20:30

Print 发表于 2019-12-22 20:25
老大,这个真不会啊,请详细教学呀

{:1_907:}啊?不详细么?我每一行都加注释了的。{:1_907:}
我刚刚从新排版了一下,你在看看。
其实也没什么就是Html标签加CSS样表,有啥问题问就好。

Print 发表于 2019-12-22 20:42

没学过网页,就"其实也没什么就是Html标签加CSS样表"这句,我就很懵{:1_901:}

mokson 发表于 2019-12-22 20:44

shun丶sir 发表于 2019-12-22 21:04

正好需要

chengxin928001 发表于 2019-12-22 21:23

谢楼主分享
页: [1] 2 3 4
查看完整版本: CSS样表做的立体3D旋转特效