CSS3的3D效果(纯干货)

3,123 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

路难行,行路难,一身汗水,满心长。脚下百里路,头顶艳阳天。坚定如磐石,信念似火烧。好男儿,人穷志不缺,天道也酬勤。四方走,走四方,一身是胆,豪气壮。前方坎坷途,千难万般阻。心若有明灯,身似般若行。好男儿,大志存高远,四海皆为家。

3D位移

translateZ()函数用于将元素在3D空间沿Z轴进行位移。

translateZ(t)
  • t:表示乙轴移动的偏移量。当其值为正值时,元素向Z轴越移动越近,导致元素变得越大;反之其值为负值时,元素向Z轴越移动越远,导致元素变得越小。

CSS3中还提供了translate3d())函数用于将元素在3D空间进行位移。

translate3d(tx.ty.tz)
  • tx:表示X轴移动的偏移量。
  • ty:表示Y轴移动的偏移量。
  • tz:表示乙轴移动的偏移量。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>3D平移</title>
    <style>
        .container {
            transform-style: preserve-3d;
            transform: rotateX(-15deg) rotateY(15deg);
        }
        .container div {
            width: 300px;
            height: 200px; 
        }
        .container div:nth-child(1) {
            background-color: pink;
            /* 
                HTMl结构 - 父级与子级的关系
                * 作为父级容器的元素
                    * 设置其所有子元素是3D效果
                      transform-style: preserve-3d;
                    * 将当前元素进行旋转
                * 作为子级元素
                    * 实现Z轴的平移效果
             */
            transform: translateZ(50px);
        }
    </style>
</head>
<body>
    <div class="container">
        <div></div>
    </div>
</body>
</html>

5g17m4.png

3D旋转

rotateZ()的数用于将元素在3D空间沿Z轴进行旋转。

rotateZ(a)
  • a:表示Z轴进行旋转

CSS3中还提供了rotate3d()函数用于将元素在3D空间进行旋转。

rotate3d(x,y,z,a)
  • x:表示X轴旋转的矢量值。
  • y:表示Y轴移动的矢量值。
  • z:表示乙轴移动的矢量值。
  • a:表示旋转的角度值。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>3D旋转</title>
    <style>
        /* .container {
            transform-style: preserve-3d;        
        } */
        .container div {
            width: 300px;
            height: 200px;
        }
        .container div:nth-child(1) {
            background-color: plum;
            /* 3D旋转至少使用两个轴的旋转 */
            transform: rotateX(-30deg) rotateZ(30deg);
        }
    </style>
</head>
<body>
    <div class="container">
        <div></div>
    </div>
</body>
</html>

5g1H0J.png

3D缩放

scaleZ()函数用于将元素在3D空间沿Z轴进行缩放。

scaleZ(s)
  • s:表示Z轴的缩放向量

CSS3中还提供了scale3d()函数用于将元素在3D空间进行缩放。

scale3d(sx,sy,sz)
  • sx:表示X轴的缩放向量。
  • sy:表示Y轴的缩放向量。
  • sz:表示Z轴的缩放向量。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>3D缩放</title>
    <style>
        .container {
            width: 367px;
            height: 297px ;
            background-image: url("imgs/花格布.jpg");
            background-repeat: no-repeat;
            position: relative;
            display: inline-block;
        }
        .container img {
            width: 150px;
            display: block;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
        }
        .box {
            /* 开启3d空间中的透视效果 */
            perspective: 1000px;
        }
        .box img#imgs1 {
            transform: scaleX(0.5);
        }
        .box img#imgs2 {
            transform: scaleY(0.5);
        }
        .box img#imgs3 {
            transform: scaleZ(0.5);
        }
    </style>
</head>
<body>
    <div class="container">
        <img src="imgs/u=3517379166,729986227&fm=26&gp=0.jpg.png">
    </div>
    <div class="container box">
        <img id="imgs1" src="imgs/u=3517379166,729986227&fm=26&gp=0.jpg.png">
    </div>
    <div class="container box">
        <img id="imgs2" src="imgs/u=3517379166,729986227&fm=26&gp=0.jpg.png">
    </div>
    <div class="container box">
        <img id="imgs3" src="imgs/u=3517379166,729986227&fm=26&gp=0.jpg.png">
    </div>
</body>
</html>

3D立体效果

Nb7RY9.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>3D立体效果</title>
    <style>
        .container {
            width: 300px;
            height: 300px;
            border: 1px solid black;
            margin: 100px auto;

            position: relative;

            perspective: 300px;
        }
        .face {
            width: 200px;
            height: 200px;
            position: absolute;
            left: 50%;
            top: 50%;
            margin-left: -100px;
            margin-top: -100px;
        }
        .front {
            transform: translateZ(100px);

            border: 1px solid black;
        }
        .back {
            transform: translateZ(-100px);

            border: 1px solid black;
        }
        .left {
            transform: rotateY(90deg) translateZ(-100px);

            border: 1px solid black;
        }
        .right {
            transform: rotateY(90deg) translateZ(100px);

            border: 1px solid black;
        }
        .top {
            transform: rotateX(90deg) translateZ(100px);

            border: 1px solid black;
        }
        .bottom {
            transform: rotateX(90deg) translateZ(-100px);

            border: 1px solid black;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="face front"></div>
        <div class="face back"></div>
        <div class="face left"></div>
        <div class="face right"></div>
        <div class="face top"></div>
        <div class="face bottom"></div>
    </div>
</body>
</html>

NbHfAg.png