CSS3 3D转换 - 创建空间立体效果

最后编辑于2025-04-14 12:11:43.4819807 +0800 CST

CSS3 3D 转换

CSS3 3D转换允许你在三维空间中操作元素,创建更具深度和空间感的视觉效果。


浏览器支持

下表显示了主要浏览器对 CSS3 3D 转换的支持情况:

属性 Chrome IE Firefox Safari Opera
3D Transform 12.0
1.0 -webkit-
10.0 10.0
4.0 -moz-
4.0
3.1 -webkit-
15.0
11.0 -o-

CSS3 3D转换方法

CSS3提供了多种3D转换方法,主要包括:

  • rotateX() - 沿X轴旋转元素
  • rotateY() - 沿Y轴旋转元素
  • rotateZ() - 沿Z轴旋转元素
  • translate3d() - 3D平移
  • scale3d() - 3D缩放
  • perspective() - 设置透视视图

CSS3 透视效果

要在网页中创建3D效果,必须先定义透视效果。透视效果可以让用户感知元素在3D空间中的距离。

perspective 属性定义了3D元素距离视图的距离,以像素为单位。

css
1#div1 {
2    perspective: 100px;
3}

该值越小,你离3D元素就越近,效果越明显;值越大,效果越小。

对于一组3D元素,透视属性应该添加到父元素上:

css
1.container {
2    perspective: 1000px;
3}

rotateX() 方法

rotateX()方法使元素围绕其X轴旋转给定的角度。

css
1div {
2    transform: rotateX(120deg);
3    -webkit-transform: rotateX(120deg); /* Safari 和 Chrome */
4}

rotateX示意图


rotateY() 方法

rotateY()方法使元素围绕其Y轴旋转给定的角度。

css
1div {
2    transform: rotateY(130deg);
3    -webkit-transform: rotateY(130deg); /* Safari 和 Chrome */
4}

rotateY示意图


rotateZ() 方法

rotateZ()方法使元素围绕其Z轴旋转给定的角度,效果类似于2D rotate()方法。

css
1div {
2    transform: rotateZ(90deg);
3    -webkit-transform: rotateZ(90deg); /* Safari 和 Chrome */
4}

translate3d() 方法

translate3d()方法将元素向X、Y和Z三个方向移动。

css
1div {
2    transform: translate3d(50px, 100px, 200px);
3    -webkit-transform: translate3d(50px, 100px, 200px); /* Safari 和 Chrome */
4}

你也可以单独使用translateZ()方法来只在Z轴上移动:

css
1div {
2    transform: translateZ(100px);
3}

scale3d() 方法

scale3d()方法可以在X、Y和Z三个方向上缩放元素。

css
1div {
2    transform: scale3d(2, 3, 2);
3    -webkit-transform: scale3d(2, 3, 2); /* Safari 和 Chrome */
4}

transform-style 属性

transform-style属性指定嵌套元素是否在3D空间中呈现。

css
1div {
2    transform-style: preserve-3d;
3    -webkit-transform-style: preserve-3d; /* Safari 和 Chrome */
4}

该属性有两个值:

  • flat - 所有子元素在2D平面呈现(默认值)
  • preserve-3d - 所有子元素在3D空间中呈现

backface-visibility 属性

backface-visibility属性定义当元素不面向屏幕时是否可见。

对于一些3D效果,如翻牌效果,这个属性非常有用:

css
1div {
2    backface-visibility: hidden;
3    -webkit-backface-visibility: hidden; /* Safari 和 Chrome */
4}

该属性有两个值:

  • visible - 默认值,元素的背面可见
  • hidden - 元素的背面不可见

实际应用示例

1. 3D翻牌效果

css
 1.card-container {
 2    width: 200px;
 3    height: 300px;
 4    perspective: 1000px;
 5}
 6
 7.card {
 8    width: 100%;
 9    height: 100%;
10    position: relative;
11    transform-style: preserve-3d;
12    transition: transform 1s;
13}
14
15.card:hover {
16    transform: rotateY(180deg);
17}
18
19.front, .back {
20    position: absolute;
21    width: 100%;
22    height: 100%;
23    backface-visibility: hidden;
24}
25
26.back {
27    transform: rotateY(180deg);
28}

2. 3D立方体

css
 1.cube-container {
 2    width: 200px;
 3    height: 200px;
 4    perspective: 800px;
 5    margin: 100px auto;
 6}
 7
 8.cube {
 9    width: 100%;
10    height: 100%;
11    position: relative;
12    transform-style: preserve-3d;
13    transform: rotateX(-30deg) rotateY(30deg);
14    transition: transform 1s;
15}
16
17.cube:hover {
18    transform: rotateX(30deg) rotateY(210deg);
19}
20
21.face {
22    position: absolute;
23    width: 200px;
24    height: 200px;
25    opacity: 0.8;
26}
27
28.front { transform: translateZ(100px); background: red; }
29.back { transform: rotateY(180deg) translateZ(100px); background: blue; }
30.right { transform: rotateY(90deg) translateZ(100px); background: green; }
31.left { transform: rotateY(-90deg) translateZ(100px); background: yellow; }
32.top { transform: rotateX(90deg) translateZ(100px); background: purple; }
33.bottom { transform: rotateX(-90deg) translateZ(100px); background: orange; }

3. 3D转盘效果

css
 1.carousel {
 2    perspective: 1000px;
 3    width: 300px;
 4    height: 200px;
 5    margin: 100px auto;
 6}
 7
 8.carousel-inner {
 9    width: 100%;
10    height: 100%;
11    transform-style: preserve-3d;
12    animation: rotate 10s infinite linear;
13}
14
15.carousel-item {
16    position: absolute;
17    width: 100%;
18    height: 100%;
19    backface-visibility: hidden;
20}
21
22.item-1 { transform: rotateY(0deg) translateZ(200px); background: red; }
23.item-2 { transform: rotateY(72deg) translateZ(200px); background: blue; }
24.item-3 { transform: rotateY(144deg) translateZ(200px); background: green; }
25.item-4 { transform: rotateY(216deg) translateZ(200px); background: yellow; }
26.item-5 { transform: rotateY(288deg) translateZ(200px); background: purple; }
27
28@keyframes rotate {
29    from { transform: rotateY(0); }
30    to { transform: rotateY(360deg); }
31}

CSS3 3D转换属性总结

属性 描述
transform 向元素应用3D转换
transform-origin 允许改变被转换元素的位置
transform-style 规定如何在3D空间中呈现被嵌套的元素
perspective 规定3D元素的透视效果
perspective-origin 规定3D元素的底部位置
backface-visibility 定义元素不面向屏幕时是否可见