CSS3实现3D立体效果

CSS3实现3D效果 1. 涉及到的几个CSS3属性 首先大家需要了解transform属性,主要有平移(translate),缩放(scale),拉伸(skew),旋转(rotate)。 这里涉及到3d转换的主要介绍旋转。 下面通过一组rotate效果直观理解rotateX,rotateY,rotateZ区别。 代码: .box{ width: 200px;height: 200px; background:#abcdef; margin:100px; float:left; } .box1{ -webkit-transform:rotatex(45deg) } .box2{ -webkit-transform:rotatey(45deg) } .box3{ -webkit-transform:rotatez(45deg) } .stage{ height: 300px; border: 1px solid blue; -webkit-transform-style:preserve-3d; -webkit-perspective:300px; }
rotateX
rotateY
rotateZ

效果如图:
这里写图片描述
分析:仔细看上面代阿码中,三个div框套在一个id为stage的div父框中。父框即为舞台,我们假设站在舞台下面看表演,整个父框就是舞台,里面的子元素就是演员,呈现出不同的姿态,面向我们的是rotateX,侧身的rotateY,在屏幕屏幕滚动的是rotateZ。
Z轴其实就是我们眼睛看过去的方向。

stage里面有个非常重要的属性:
1)transform–style属性指定嵌套元素是怎样在三维空间中呈现,CSS规范里面这样规定:
flat 子元素将不保留其 3D 位置。
preserve-3d 子元素将保留其 3D 位置。
所以我们为了3d呈现,添加该属性:
-webkit-transform-style:preserve-3d

2)perspective的中文意思是:透视,视角。我们透视点应该就在浏览器的前方。所以该属性设置的距离越大,舞台离我们越远,呈现的元素就会越小。
perspective属性的存在与否决定了你所看到的是2次元的还是3次元的,也就是是2D transform还是3D transform。没有透视,不成3D。

3)给子元素设置translateZ。我们知道在2d变换中有translate属性,这个也是一样,只不过是顺着z轴平移,也就是设置的translateZ值越小,则子元素大小越小(因为元素远去,我们眼睛看到的就会变小);translateZ值越大,该元素也会越来越大,当translateZ值非常接近perspective设置的像素,但是不超过该像素的时候(如300像素),该元素的大小就会撑满整个屏幕。接下来我们会利用该属性来调整子元素,实现一个立方体的效果。
2. 立方体制作
立方体有六个面,如果舞台中立方体正对我们,我们只能看到一个正面,也就是其他5个面都看不见。
我们通过代码完成前面(本文代码是在chrome浏览器测试,以下代码能够兼容webkit内核和火狐浏览器):
.box6{
-webkit-transform: translatez(100px);
-moz-transform:translatez(100px);
background: rgba(0,255,255,.5);
}

translateZ让平面向视点走100px。
所以第二个平面背面的代码:
.box5{
-webkit-transform: translatez(-100px);
-moz-transform:translatez(-100px);
background: rgba(153,204,255,.5)}
同理:两个侧面的代码就是rotateY:90,同时左右分开100px像素,代码如下:
.box1{
-webkit-transform:rotatey(90deg) translatez(-100px);
-moz-transform:rotatey(90deg) translatez(-100px);
background: rgba(128,0,128,.5);
}
.box2{
-webkit-transform:rotatey(90deg) translatez(100px);
-moz-transform:rotatey(90deg) translatez(100px);
background: rgba(255,0,255,.5);
}
上下两个平面,代码:
.box3{
-webkit-transform:rotatex(90deg) translatez(100px);
-moz-transform:rotatex(90deg) translatez(100px);
background: rgba(255,153,204,.5);
}
.box4{
-webkit-transform:rotatex(90deg) translatez(-100px);
-moz-transform:rotatex(90deg) translatez(-100px);
background: rgba(0,204,255,.5);
}

再将开始的html页面增加几个div,调整一下:整体代码如下:




.box{
width: 200px;height: 200px;
background:#abcdef;
position: absolute;/每个平面都需要进行平移,在舞台上默认水平居中,所以设置绝对定位/
left:50%;/在舞台上水平居中/
top:20%;

}
.box1{
-webkit-transform:rotatey(90deg) translatez(-100px);
-moz-transform:rotatey(90deg) translatez(-100px);
background: rgba(128,0,128,.5);
}
.box2{
-webkit-transform:rotatey(90deg) translatez(100px);
-moz-transform:rotatey(90deg) translatez(100px);
background: rgba(255,0,255,.5);
}
.box3{
-webkit-transform:rotatex(90deg) translatez(100px);
-moz-transform:rotatex(90deg) translatez(100px);
background: rgba(255,153,204,.5);
}
.box4{
-webkit-transform:rotatex(90deg) translatez(-100px);
-moz-transform:rotatex(90deg) translatez(-100px);
background: rgba(0,204,255,.5);
}
.box5{
-webkit-transform: translatez(-100px);
-moz-transform:translatez(-100px);
background: rgba(153,204,255,.5);
}
.box6{
-webkit-transform: translatez(100px);
-moz-transform:translatez(100px);
background: rgba(0,255,255,.5);
}

.stage{
height: 300px;
transform-style:preserve-3d;
-webkit-transform-style:preserve-3d;
-webkit-perspective:0px;
position: relative;/为了让子元素相对于stage参照定为,在此设置为定位属性/
}



运行后效果如下:
这里写图片描述
我们刚开始说了,只能看到正面,现在我们如果将舞台旋转起来,各个平面就可以一览无余了。
这里给舞台div设置旋转动画:
-webkit-animation:mydonghua 5s ease infinite;
-moz-animation:mydonghua 5s ease infinite;
接下来定义mydonghua的行为:
@-webkit-keyframes mydhua{
0%{-webkit-transform:rotateX(0deg) rotateY(0deg) rotateZ(0deg);-webkit-transform-origin: center center;}
100%{-webkit-transform:rotateX(180deg) rotateY(180deg) rotateZ(180deg);-webkit-transform-origin: center center; }
}
@-moz-keyframes mydhua{

0%{-moz-transform:rotateX(0deg) rotateY(0deg) rotateZ(0deg);-webkit-transform-origin: center center;}
100%{-moz-transform:rotateX(180deg) rotateY(180deg) rotateZ(180deg); -webkit-transform-origin: center center;}

}
最终运行效果(此处截图,应该是一个反复旋转的动画):
这里写图片描述
小结
CSS3涉及到3d变换关键属性:
1. perspective属性,该属性表示视点,该属性调整我们视点的远近。
2. rotate(degree),旋转分别绕x,y,z轴进行degree度旋转。
3. transform-style可以设置元素所处的是3d空间还是平面。Flat表示平面。
4. translateZ 绕z轴平移,调整平面向自己所面向的方向移动的距离。如果取值为负值,表示平面向背向的方向移动一定距离。

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,需要一定的HTML5和CSS3技能,我会尽可能地为您解答。首先,我们需要一个包含所有图片的容器,然后通过CSS3的transform属性来实现3D旋转效果。 以下是一个基本的HTML结构: ``` <div class="container"> <figure class="card"> <img src="image1.jpg"> </figure> <figure class="card"> <img src="image2.jpg"> </figure> <figure class="card"> <img src="image3.jpg"> </figure> <figure class="card"> <img src="image4.jpg"> </figure> <figure class="card"> <img src="image5.jpg"> </figure> </div> ``` 然后,我们需要为容器和每个图片分别设置样式: ``` .container { perspective: 1000px; /* 设置透视距离 */ width: 500px; margin: 0 auto; } .card { display: inline-block; width: 200px; height: 150px; margin: 20px; transform-style: preserve-3d; /* 启用3D变换 */ transition: transform 1s; /* 设置过渡效果 */ } .card:hover { transform: rotateY(180deg); /* 鼠标悬停时旋转180度 */ } .card img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; backface-visibility: hidden; /* 隐藏反面 */ } ``` 这里我们使用了perspective属性来设置透视距离,使得图片在旋转时可以呈现出3D效果。同时,我们使用transform-style属性启用了3D变换,并且设置了过渡效果,使得旋转时更加平滑。当鼠标悬停在图片上时,我们通过transform属性旋转图片180度,实现立体旋转的效果。 最后,我们需要通过CSS3的动画效果来使得相册自动旋转。以下是示例代码: ``` .container { animation: spin 10s infinite linear; } @keyframes spin { from { transform: rotateY(0deg); } to { transform: rotateY(360deg); } } ``` 这里我们设置了一个名为spin的动画,使得容器在10秒内无限循环旋转360度。通过这个动画,我们就可以实现一个自动旋转的3D相册。 希望这个简单的示例能够帮助您理解如何使用HTML5和CSS3实现3D立体旋转相册。如果您还有其他问题,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值