如何用CSS3制作3D效果的正方体
要用CSS3来制作一个正方体,我们先来看正方体的结构,如图:
1.建立结构
正方体有六个面,我们可以先建立六个面,放在li里。设置宽高,和背景色(方便区分),效果如图:
2.位移
接下来可以通过定位(position)和位移(translate)将他们移动到图一的位置。
先用绝对定位将六块正方形定位到第1块的位置,然后再用位移移动到相对的位置,第6块和第1块的水平垂直的位置相同,可以用translateZ沿着z轴移动即可。
transform:translateX(-100px)
transform:translateX(100px)
transform:translateY(-100px)
transform:translateY(100px)
transform:translateZ(-100px)
效果如图:
3.设置3D效果
此时,第6块位置是看不出来的,需要设置3D效果才能做到真正的立体图形。
transform-style: preserve-3d;
4.旋转
第2块需要以右侧为旋转中心绕着Y轴旋转-90°就可以达到效果;
第3块需要以左侧为旋转中心绕着Y轴旋转90°就可以达到效果;
第4块需要以底侧为旋转中心绕着X轴旋转90°就可以达到效果;
第5块需要以上侧为旋转中心绕着X轴旋转-90°就可以达到效果。
- transform-origin: right center;
transform:rotateY(-90deg);- transform-origin: left center;
transform:rotateY(90deg);- transform-origin:bottom center;
transform: rotateX(90deg);- transform-origin: top center;
transform:rotateX(-90deg);
正方体在这里就完成了。
附:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{margin: 0;padding: 0;}
li{list-style: none;}
.box{
width: 100px;
height: 100px;
margin: 200px auto;
position: relative;
transform-style: preserve-3d;
transition: 10s;
transform-origin: 50% 50% -50px;
}
.box li{
width: 100px;
height: 100px;
position:absolute ;
left: 0;right: 0;
top: 0;bottom: 0;
margin: auto;
}
.box li:nth-child(1){
background: rgba(200,255,200,0.5);
}
.box li:nth-child(2){
transform-origin: right center;
transform:translateX(-100px) rotateY(-90deg);
background: rgba(255,200,200,0.5);
}
.box li:nth-child(3){
transform-origin: left center;
transform:translateX(100px) rotateY(90deg);
background: rgba(255,255,200,0.5);
}
.box li:nth-child(4){
transform-origin: center bottom;
transform:translateY(-100px) rotateX(90deg);
background: rgba(255,200,255,0.5);
}
.box li:nth-child(5){
transform-origin: center top;
transform:translateY(100px) rotateX(-90deg);
background: rgba(200,200,255,0.5);
}
.box li:nth-child(6){
transform:translateZ(-100px) rotateY(180deg);
background: rgba(200,255,255,0.5);
}
.box:hover{
transform: rotateY(360deg) rotateX(360deg) rotateX(360deg);
}
</style>
</head>
<body>
<div class="box">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
</div>
</body>
</html>