CSS实现3D效果

废话少说,直接看如何实现(利用css制作3D照片墙,详细代码如下所示:):

<!doctype html><html><head><meta charset="utf-8"><title>3D照片墙</title></head><body> <div> <img src="#"/> <img src="#"/> <img src="#"/> <img src="#"/> <img src="#"/> <img src="#"/> <img src="#"/> <img src="#"/> </div></body></html>

以上代码是准备事情,在html代码的body主体中放了一个div,里面包着你想要显示在照片墙上的照片,数量可以任意。

html照片墙网页CSS怎么制造立体的3D照片墙后果 JavaScript

接下来上CSS代码,记得你的设备要支持CSS3才可以。

/为照片墙设置一个足够大的3D视距,至少能容下所有图片的运动轨迹。
/body{perspective: 5800px;}

给每个图片设置样式,给图片一个绝对定位,使其可以被任意地掌握位置,此时图片会重叠在一起,宽高取决于照片墙中的的图片的详细尺寸,当然你也可以设置大小

img{height:480px;width:320px;}

给每个图片单独设置样式,使每张图片绕自身Y轴旋转一定角度,角度取决于你放了多少张图片,有n张图,则每张图片依次旋转360/n度,比如这里我放了8张图,那么每张图应依次比上一张图片多旋转360/8=45度,层层递进,如0度、45度、90度、135度、180度、225度、270度、315度,再使每张图片向自身的Z轴(此时每张图片的Z轴方向都已改变)都设置一个正向(全为负值也可)的等间隔的位移,使其扩散开,我这里的写法效果也一样,旋转45度位移 - 500px实在和旋转225度位移500px效果是一样的。

img:nth-child(1){transform: translateZ(500px);} img:nth-child(2){transform: translateZ(-500px);} img:nth-child(3){transform:rotateY(45deg) translateZ(-500px);} img:nth-child(4){transform:rotateY(45deg) translateZ(500px);} img:nth-child(5){transform:rotateY(-45deg) translateZ(500px);} img:nth-child(6){transform:rotateY(-45deg) translateZ(-500px);} img:nth-child(7){transform:rotateY(90deg) translateZ(500px);} img:nth-child(8){transform:rotateY(90deg) translateZ(-500px);}

俯视效果

先自身旋转,再向各个方向扩散。
一定要先旋转,使自身Z轴方向改变再位移,否则会发生如下情形:

自身旋转

先位移后再旋转,由于先位移时所有图片的z轴都为初始方向,会使得所有图片同向位移一段间隔,仍旧叠在一起,再旋转时也会挤在一起。

末了一步:给包着所有图片的div设置绕着初始位置旋转的动画效果即rotateY(360deg),这里要把稳是给div设置动画,而不是给图片,否则会变成“自转”,我们须要的效果是“公转”,设置margin使其在浏览器中间显示,方便不雅观察,设置3d视角,接着给动画设置过渡韶光6s(旋转快慢,可变动),再设置infinite使其无限循环,为了方便不雅观察我使全体div绕其x轴旋转-15度。

div{margin:0 auto;margin-top:600px;transform-style: preserve-3d;animation:zhuan 6s linear infinite;height:480px;width:320px;}@keyframes zhuan{ 0%{transform:rotateX(-15deg) rotateY(0);} 100%{transform: rotateX(-15deg) rotateY(360deg);} }

到此为止吧,网络有着1+1>2的力量,希望对你有帮助,或者就当自己做个条记。