CSS3 3D转换 - 创建空间立体效果
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}
rotateY() 方法 ¶
rotateY()方法使元素围绕其Y轴旋转给定的角度。
css
1div {
2 transform: rotateY(130deg);
3 -webkit-transform: rotateY(130deg); /* Safari 和 Chrome */
4}
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 | 定义元素不面向屏幕时是否可见 |