这是一款效果非常炫酷的CSS3 3D立方体空间旋转图片画廊特效。该特效实际是一个3D立方体,在其内部显示图片。在点击立方体每一面的图片时,这张图片就会放大到屏幕的中间,效果非常的酷。
因为IE浏览器不支持transform-style: preserve-3d;
属性,所以在IE浏览器中是看不到立方体效果的。
制作方法
HTML结构
该图片画廊特效的HTML结构采用立方体的HTML结构。每一个立方体的面使用一个<img>
元素来制作,并在其上分别使用data-transform
属性来标注这个面需要旋转转换的角度,后面再使用js来将其转换为CSS样式。
<div id="screen"> <div id="cube" class='cube'> <!-- cube images --> <img id="1" src="img/1.jpg" class='face' data-transform="translateZ(-400px)" style="outline:none !important"> <img id="2" src="img/2.jpg" class='face' data-transform="rotateY(90deg) translateZ(-400px)"> <img id="3" src="img/3.jpg" class='face' data-transform="rotateY(-90deg) translateZ(-400px)"> <img id="4" src="img/4.jpg" class='face' data-transform="rotateY(180deg) translateZ(-400px)"> <img id="5" src="img/5.jpg" class='face' data-transform="rotateX(90deg) translateZ(-300px)"> <img id="6" src="img/6.jpg" class='face' data-transform="rotateX(-90deg) translateZ(-300px)"> <!-- bonus image --> <img id="7" src="img/7.jpg" class='face' data-transform="rotateY(180deg) translateZ(305px)" style="visibility:hidden"> <!-- buttons --> <img src="img/7.jpg" class='face button' alt="7" data-transform="translateY(-80px) translateZ(-340px) scale(0.5)"> <img src="img/6.jpg" class='face button' alt="2" data-transform="translateX(-200px) translateY(-80px) translateZ(-340px) scale(0.5)"> <img src="img/3.jpg" class='face button' alt="3" data-transform="translateX(200px) translateY(-80px) translateZ(-340px) scale(0.5)"> <img src="img/4.jpg" class='face button' alt="4" data-transform="translateY(80px) translateZ(-340px) scale(0.5)"> <img src="img/5.jpg" class='face button' alt="5" data-transform="translateX(-200px) translateY(80px) translateZ(-340px) scale(0.5)"> <img src="img/6.jpg" class='face button' alt="6" data-transform="translateX(200px) translateY(80px) translateZ(-340px) scale(0.5)"> </div> </div>
img.button
是正面墙上的每幅图片的缩略图。同样使用data-transform
属性来标注它们的CSS属性。
CSS样式
该图片画廊的初始CSS样式非常简单。图片画廊包裹容器div#screen
被制作为和屏幕相同大小的3D空间。头速度为500。
#screen { position: absolute; left:0; top:0; width: 100%; height: 100%; background:#000; perspective:500px; -webkit-perspective:500px; }
div.cube
是立方体,它被居中显示,并使用transform-style: preserve-3d;
来制作立方体。因为IE浏览器不支持这个属性,所以看不到立方体效果。
.cube { position: absolute; top: 50%; left: 50%; width: 0; height: 0; margin: 0; user-select: none; transform-style: preserve-3d; -webkit-transform-style: preserve-3d; }
立方体的各个面采用绝对定位,并设置固定的宽度和高度。并使用backface-visibility: hidden;
将背面进行隐藏。同时将各个面的转换中心都设置到面的中心点上。
.face { position: absolute; margin-left:-300px; margin-top:-200px; width:600px; height:400px; backface-visibility: hidden; -webkit-backface-visibility: hidden; transform-origin:50% 50%; -webkit-transform-origin:50% 50%; transition: outline 0.5s ease-in-out 0s; cursor: pointer; }
立方体的旋转和各个面的点击和移动触摸事件都在js代码中完成。具体的js代码请参考现在文件的main.js文件。