★文章内容学习来源:拉勾教育大前端就业集训营


3D 转换

  • transform 属性不止能实现 2D 转换,也可以制作 3D 立体转换效果,比普通的 x、y 轴组成 的平面效果多了一条 z 轴,如下图:
  • 本文目录如下:

一、透视属性

1.应用背景:
  • 电脑显示屏是一个 2D 平面,图像之所以具有立体感(3D效果),其实只是一种视觉呈现, 通过透视可以实现此目的。
  • 透视可以将一个 2D 平面,在转换的过程当中,呈现 3D 效果。
  • 透视特点:近大远小。
  • 注意:并非任何情况下需要透视效果,根据开发需要进行设置,如果需要展示 z 轴的变化, 则设置透视效果。
2.透视属性 perspective
  • 属性名:perspective
  • 作用:设置在 z 轴的视线焦点的观察位置,从而实现 3D 查看效果。
  • 属性值:像素值;
  • 数值越大,观察点距离 z 轴原点越远,图形效果越完整且接近原始尺寸。 (一般设置1000px以上)
  • 注意:透视属性需要设置给 3D 变化元素的父级

二、3D 旋转

  • 3D旋转比2D旋转更复杂,需要分别对三个方向的旋转角度值:
属性值 说明
rotateX(angle) 定义沿着 X 轴的 3D 旋转
rotateY(angle) 定义沿着 Y 轴的 3D 旋转
rotateZ(angle) 定义沿着 Z 轴的 3D 旋转
  • 注意:属性值的角度区分正负
  • 正数表示沿对应坐标轴顺时针方向旋转,负数表示沿对应坐标轴逆时针方向旋转。
1.1 举例(3D 旋转-rotateX(angle))
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>1.1 举例(3D 旋转-rotateX(angle))</title>
	<style> *{
     margin: 0; padding: 0; } .box{
     width: 250px; height: 200px; border: 1px solid red; margin: 50px; perspective: 1000px; /* 透视,设置给3D变化元素的父级 */ } .box img{
     width: 250px; height: 200px; transition: all 1s ease; /*过渡属性,让动画运动方式可控 */ } .box img:hover {
     /*鼠标悬浮则沿X轴顺时针旋转60deg */ transform: rotateX(60deg); } </style>
</head>
<body>
	<div class="box">
		<img src="samoye.jpg" alt="">
	</div>
</body>
</html>

1.2 举例(3D 旋转-rotateY(angle))
.box img:hover {
        /*鼠标悬浮则沿Y轴顺时针旋转60deg */
     transform: rotateY(60deg);
}

1.3 举例(3D 旋转-rotateZ(angle)
.box img:hover {
     /*鼠标悬浮则沿Z轴顺时针旋转60deg */
     transform: rotateZ(60deg);
}


三、 3D 位移

  • 类似的,位移也分为三个方向的移动;
  • 属性值:属性值为像素值或百分比,正负表示位移的方向;
  • 正值向对应轴的正方向移动,负值向对应轴的负方向移动。
属性值 说明
translateX(x) 设置 X 轴的位移值
translateY(y) 设置 Y 轴的位移值
translateZ(z) 定义3D位移,设置Z轴的位移值
1.1 举例(3D 位移-translateX(x)
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>1.1 举例(3D 位移-translateX(x))</title>
	<style> *{
     margin: 0; padding: 0; } .box{
     width: 250px; height: 200px; border: 1px solid red; margin: 50px; perspective: 50000px; /* 透视,设置给3D变化元素的父级 */ } .box img{
     width: 250px; height: 200px; transition: all 1s ease; /*过渡属性,让动画运动方式可控 */ } .box img:hover {
     /*鼠标悬浮,则沿X轴正方向移动60px */ transform: translateX(60px); } </style>
</head>
<body>
	<div class="box">
		<img src="samoye2.jpg" alt="">
	</div>
</body>
</html>

1.2举例(3D 位移-translateY(y)
.box img:hover {
     /*鼠标悬浮,则沿Y轴正方向移动60px */
	transform: translateY(60px);
}

1.3 举例(3D 位移-translateZ(z)
.box img:hover {
    /*鼠标悬浮,则沿Z轴正方向移动70px */
	transform: translateZ(70px);
}

四、transform-style属性

  • 用于:设置被嵌套的子元素在父元素的 3D 空间中显示,子元素会保留自己的 3D 转换坐标轴。
  • 属性值:
    flat:所有子元素在 2D 平面呈现 (默认);
    preserve-3d:保留 3D 空间 。
  • 3D 元素构建是指某个图形是由多个元素构成的,可以给这些元素的父元素设置 transform-style: preserve-3d;,来使其变成一个真正的 3D 图形。
  • 一般来说,该属性设置给 3D 变换图形的父级元素
transform-style: preserve-3d;

五、3D 正方体案例

<html>
     <head>
            <title>正方体特效</title>
            <style> .box {
     width: 200px; height: 200px; margin: 200px auto; } .stage {
     position: relative; width: 200px; height: 200px; perspective: 50000px; transition: all 4s ease; transform-style: preserve-3d; } .stage:hover {
     transform: rotateX(360deg) rotateY(360deg) ; } .stage div {
     position: absolute; left: 0; top: 0; width: 200px; height: 200px; font: bold 80px/200px "arial"; text-align: center; } .stage div:nth-child(1) {
     background-color: rgba(0,255,0,0.3); transform: translateZ(100px); } .stage div:nth-child(2) {
     background-color: rgba(255,0,0,0.3); transform:rotateX(90deg) translateZ(100px); } .stage div:nth-child(3) {
     background-color: rgba(0,0,255,0.3); transform: rotateX(180deg) translateZ(100px); } .stage div:nth-child(4) {
     background-color: rgba(0,255,255,0.3); transform:rotateX(270deg) translateZ(100px); } .stage div:nth-child(5) {
     background-color: rgba(255,255,0,0.3); transform:rotateY(90deg) translateZ(100px); } .stage div:nth-child(6) {
     background-color: rgba(255,0,255,0.3); transform:rotateY(-90deg) translateZ(100px); } </style>
     </head>
     <body>
           <div class="box">
                   <div class="stage">
                            <div>1</div>
                            <div>2</div>
                            <div>3</div>
                            <div>4</div>
                            <div>5</div>
                            <div>6</div> 
                   </div>
           </div>
     <body>
</html>

六、浏览器兼容

  • Internet Explorer 10、Firefox 以及 Opera 支持 transform 属性。
  • Chrome 和 Safari 需要前缀 -webkit-
  • Internet Explorer 9 需要前缀 -ms-

下篇继续:
【46】CSS3 (4)——新增属性④动画