CSS3 变形特性,立方相册,3d旋转
之前看见过3d效果的立体相册,挺羡慕的,现在自己也有机会实现属于自己的3d立体相册了~~~话不多说,开搞…
一, 准备材料
- 六张自己喜欢的图片,六个面,怎么简单方便怎么来,名字直接取123456,后缀.jpg,放到img文件夹下
- 一张小图片,大点也不要紧,为了浏览器标题图标好看点,弄个小标题图片,命名favicon.jpg
二,开始
1,创建cube.html文件,路径与存放img图片的文件夹同级
2,先把小标题处理好
<head><meta charset="UTF-8"><title>相册盒子</title><link rel="icon" href="img/favicon.jpg"> <!--自定义标题图标--> </head>
3,把主体内容写好,一个外层盒子,6个div搞定
<body><div class="box"><div class="left"></div><div class="right"></div><div class="top"></div><div class="bottom"></div><div class="forward"></div><div class="after"></div></div> </body>
4,主体完成,开始调整样式
html {perspective: 800px;/*开启z轴视距*/}body { margin: 0px;padding: 0px;background-color: black;}.box {width: 300px;height: 300px;margin: 200px auto;transform: rotateX(45deg) rotateZ(45deg);transform-style: preserve-3d;/*给外层盒子开启3d效果,不开启会看到一个拉伸的平面*/}.box > div {width: 300px;height: 300px;position: absolute;opacity: .9;/*透明度开启,开启效果比较玲珑,不开启也好看*/background-size: cover;/*处理图片大小,并选择填充模式,防止图片大小不一不好处理*/}.left {background-image: url("./img/1.jpg");/*左边图片*/transform: rotateY(90deg) translateZ(150px) scaleZ(2);/*设置y轴旋转,并偏移z轴元素宽度的一半,上下两个面同理,前后面本身不需要旋转,直接设置偏移即可*/}.right {background-image: url("./img/2.jpg");transform: rotateY(-90deg) translateZ(150px);}.top {background-image: url("./img/3.jpg");transform: rotateX(90deg) translateZ(150px);}.bottom{background-image: url("./img/4.jpg");transform: rotateX(-90deg) translateZ(150px);}.forward {background-image: url("./img/5.jpg");transform: translateZ(150px);}.after {background-image: url("./img/6.jpg");transform: translateZ(-150px);} /*到此立体效果已经完成,前面transform: rotateX(45deg) rotateZ(45deg) 设置初始偏转角度,使图片呈现更立体*/
初见效果图如下:
5,立体效果已经完成,只需要创建三个动画帧就可以让方块动起来了
@keyframes rotate {from,to{ /*开始和结束帧相同,合在一块写了*/transform: rotateZ(0) rotateX(0);}50%{transform: rotateZ(1turn) rotateX(2turn) rotateY(3turn); /*为了能看到6个面,让三个方向的旋转量错开*/}} .box {animation: rotate 50s infinite linear; /*给外面的盒子绑定动画*/ }
6,立体旋转图来了
完整代码如下:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>相册盒子</title><link rel="icon" href="img/favicon.jpg"><style>html {perspective: 800px;}body {margin: 0px;padding: 0px;background-color: black;}.box {width: 300px;height: 300px;margin: 200px auto;transform-style: preserve-3d;transform: rotateX(45deg) rotateZ(45deg);animation: rotate 50s infinite linear;}.box:hover {animation-play-state: paused;}.box > div {width: 300px;height: 300px;position: absolute;opacity: .9;background-size: cover;}.left {background-image: url("./img/1.jpg");transform: rotateY(90deg) translateZ(150px) scaleZ(2);}.right {background-image: url("./img/2.jpg");transform: rotateY(-90deg) translateZ(150px);}.top {background-image: url("./img/3.jpg");transform: rotateX(90deg) translateZ(150px);}.bottom {background-image: url("./img/4.jpg");transform: rotateX(-90deg) translateZ(150px);}.forward {background-image: url("./img/5.jpg");transform: translateZ(150px);}.after {background-image: url("./img/6.jpg");transform: translateZ(-150px);}@keyframes rotate {from, to {transform: rotateZ(0) rotateX(0);}50% {transform: rotateZ(1turn) rotateX(2turn) rotateY(3turn);}}</style> </head> <body> <div class="box"><div class="left"></div><div class="right"></div><div class="top"></div><div class="bottom"></div><div class="forward"></div><div class="after"></div> </div> </body> </html>
完成 !!!