空间转换

133 阅读1分钟

1.空间位移:

1.transform: translateX(100px);

/* X轴水平位移 取值负数向左位移 取值正数向右位移 */

2.transform: translateY(100px);

/* Y轴垂直位移 取值负数向上位移 取值正数向下位移 */

3.transform: translateZ(100px);

/* Z轴空间位移 取值正数 视距增加 元素会被放大*/

/* Z轴空间位移 取值负数 视距减少 元素会被缩小*/

(正值:屏幕由内到外 负值:屏幕由外到内)

4.位移多值写法

​ /* 两种写法效果相同 */

​ transform: translateX(100px) translateY(100px) translateZ(100px);

​ transform: translate3d(100px,100px,100px);

2.透视效果:

  1. perspective: 1000px;(视距一般随意的设置 1000)
  2. 视距:人的眼睛到被看到的物品之间的距离
  3. 如何使用:要给被观察的物体的父元素使用
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 视距:人的眼睛到被看到的物品之间的距离 */

        /* 如何使用:要给被观察的物体的父元素使用 */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            /* 视距一般随意的设置 1000 */
            perspective: 1000px;
        }
        div {
            width: 200px;
            height: 200px;
            background-color: pink;
            margin: 200px auto;
            transform: translateZ(500PX);
            /*但我们想要看见元素在Z轴上的变化的时候  需要给被观察的物体添加视距
             perspective: 1000px;
            */

            /* 两种写法效果相同 */
            transform: translateX(100px) translateY(100px) translateZ(100px);
            transform: translate3d(100px,100px,100px);
        }
    </style>

</head>
<body>
    <div>叼毛</div>

</body>
</html>

3.空间旋转:deg

1.空间旋转X轴:

1.transform: rotateX(-45deg)


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>空间旋转-X轴</title>
    <style>
      body {
        background-color: #333;
      }
      .box {
        width: 200px;
        margin: 100px auto;
      }

      img {
        width: 200px;
        transition: all 2s;
      }

      .box {
        /* 添加视距 */
        perspective: 1000px;
      }
      .box img:hover {
        transform: rotateX(-45deg);
      }
    </style>
  </head>
  <body>
    <div class="box">
      <img src="./images/pk1.png" alt="" />
    </div>
  </body>
</html>

2.空间旋转Y轴:

1.transform: rotateY(-50deg)


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>空间旋转-Y轴</title>
    <style>
      body {
        background-color: #333;
      }
      .box {
        width: 200px;
        margin: 100px auto;
      }

      img {
        width: 200px;
        transition: all 2s;
      }
      .box {
        perspective: 1000px;
      }
      .box img:hover {
        transform: rotateY(-50deg);
      }
    </style>
  </head>
  <body>
    <div class="box">
      <img src="./images/pk1.png" alt="" />
    </div>
  </body>
</html>

3.空间旋转Z轴:

1.transform: rotateZ(-360deg);


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>空间旋转-Z轴</title>
    <style>
      .box {
        width: 300px;
        margin: 100px auto;
      }

      img {
        width: 300px;
        transition: all 2s;
      }

      .box img:hover {
        transform: rotateZ(-360deg);
        /* transform: rotate(360deg); */
      }
    </style>
  </head>
  <body>
    <div class="box">
      <img src="./images/hero.jpeg" alt="" />
    </div>
  </body>
</html>

4.沿着多条对称轴(X,Y,Z)旋转

1.transform: rotateX(45deg) rotateY(45deg) rotateZ(45deg);

2.transform: rotate3d(x,y,z,deg);


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>空间旋转-X轴</title>
    <style>
      body {
        background-color: #333;
      }
      .box {
        width: 200px;
        margin: 100px auto;
      }

      img {
        width: 200px;
        transition: all 2s;
      }
      .box {
        perspective: 800px;
      }
      .box img:hover {
        transform: rotateX(45deg) rotateY(45deg) rotateZ(45deg);
      }
    </style>
  </head>
  <body>
    <div class="box">
      <img src="./images/pk1.png" alt="" />
    </div>
  </body>
</html>

4.立方体:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        .box {
        width: 200px;
        height: 200px;
        /* background-color: aqua; */
        position: relative;
        margin: 200px auto;
        transform-style: preserve-3d;
        transform: rotate3d(1,1,1,30deg);
        transition: all 20000s;
        /* opacity: 0.8; */
      }
      .box div {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        opacity: 0.8;
      }

      .front {
          /* 前面 */
        background-color: salmon;
        background-image: url(./立方体/preview.jpg);
        background-size: 100%;
        transform: translateZ(100px);
        /* opacity: 0.8; */
      }
      .back {
        /* 后面 */
        background-color: seagreen;
        background-image: url(./立方体/preview.jpg);
        background-size: 100%;
        transform: translateZ(-100px) rotateY(180deg);
        /* opacity: 0.8; */
      }
      .left {
        background-color: lawngreen;
        background-image: url(./立方体/preview.jpg);
        background-size: 100%;
        transform: translateX(-100px) rotateY(90deg);
        /* opacity: 0.8; */
      }
      .right {
        background-color: yellow;
        background-image: url(./立方体/preview.jpg);
        background-size: 100%;
        transform: translateX(100px) rotateY(90deg);
        /* opacity: 0.8; */
      }
      .up {
        background-color: aqua;
        background-image: url(./立方体/preview.jpg);
        background-size: 100%;
        transform: translateY(-100px) rotateX(90deg);
        /* opacity: 0.8; */
      }
      .bottom {
        background-color: purple;
        background-image: url(./立方体/preview.jpg);
        background-size: 100%;
        transform: translateY(100px) rotateX(-90deg);
        /* opacity: 0.8; */
      }
      body:hover .box{
        transform: rotate3d(1,1,1,3000000deg);
      }
    </style>
</head>
<body>
    <div class="box">
        <div class="front"></div>
        <div class="back"></div>
        <div class="left"></div>
        <div class="right"></div>
        <div class="up"></div>
        <div class="bottom"></div>
      </div>
</body>
</html>
<!-- 1.静态结构
1.定义一个父盒子box 抱着6个小平面(立方体的6个面)
2.写6个面 :1.先使用定位  来重叠在一起(后面方便一个一个来调他们的位置 来构建立方体)-->

<!-- 2.使用空间转换来构建立方体

    1.前:Z轴  正 移动   100px (50%)
    2.后:Z轴  负 移动  -100px (50%)
    3.右:X轴  正 移动   100px (50%)  Y轴  旋转 90deg
    4.左:X轴  负 移动  -100px (50%)  Y轴  旋转 90deg
    5.下:Y轴  正 移动   100px (50%)  X轴  旋转 90deg
    6.上:Y轴  负 移动  -100px (50%)  X轴  旋转 90deg

    3.开启立体空间: transform-style: preserve-3d;


        旋转 transform: rotate3d(1,1,1,50deg);

-->

5.立体导航:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      ul {
        width: 300px;
        height: 40px;
        margin: 50px auto;
      }
      li {
        float: left;
        height: 40px;
        list-style: none;
        transition: 0.5s;
        /* 开启 3D */
        transform-style: preserve-3d;
        /* 开启上帝视角,通过旋转(ps) */
        /* transform: rotateX(-20deg) rotateY(30deg); */
      }
      a {
        display: block;
        width: 100px;
        height: 40px;
        text-decoration: none;
        color: #fff;
        text-align: center;
        line-height: 40px;
      }
      li a:first-child {
        background-color: green;
        /* 往Z轴正方向移动20px */
        transform: translateZ(20px);
      }
      li a:last-child {
        background-color: orange;
        /* 向上平移60px,往页面里面沿着X轴正方向旋转90deg */
        transform: translateY(-60px) rotateX(90deg);
      }
      li:hover {
        /* 沿着X轴负方向旋转90deg */
        transform: rotateX(-90deg);
      }

    </style>
</head>
<body>
    <ul>
        <li>
            <a href="#">首页</a>
            <a href="#">index</a>
        </li>
        <li>
            <a href="#">登录</a>
            <a href="#">login</a>
        </li>
        <li>
            <a href="#">注册</a>
            <a href="#">register</a>
        </li>
    </ul>
</body>
</html>

6空间缩放:

1.transform:scaleX(X轴缩放) 宽度缩放

2.transform:scaleY(Y轴缩放) 高度缩放

3.空间缩放: transform:scaleZ(Z轴缩放) 厚度缩放

4.空间缩放: transform:scale3d(x,y,z) 同时缩放长宽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
      ul {
        width: 300px;
        height: 40px;
        margin: 50px auto;
      }
      li {
        float: left;
        height: 40px;
        list-style: none;
        transition: 0.5s;
        /* 开启 3D */
        transform-style: preserve-3d;
        /* 开启上帝视角,通过旋转(ps) */
        /* transform: rotateX(-20deg) rotateY(30deg); */
      }
      a {
        display: block;
        width: 100px;
        height: 40px;
        text-decoration: none;
        color: #fff;
        text-align: center;
        line-height: 40px;
      }
      li a:first-child {
        background-color: green;
        /* 往Z轴正方向移动20px */
        transform: translateZ(20px);
      }
      li a:last-child {
        background-color: orange;
        /* 向上平移60px,往页面里面沿着X轴正方向旋转90deg */
        transform: translateY(-60px) rotateX(90deg);
      }
      li:hover {
        /* 沿着X轴负方向旋转90deg */
        transform: rotateX(-90deg) scale3d(1.1,1.1,1.1);
      }


      /* 空间缩放:  transform:scaleX(X轴缩放)  宽度缩放;
      /* 空间缩放:  transform:scaleY(Y轴缩放)  高度缩放;
      /* 空间缩放:  transform:scaleZ(Z轴缩放)  厚度缩放;
      /* 空间缩放:  transform:scale3d(x,y,z) 同时缩放长宽高;
       */
    </style>
</head>
<body>
    <ul>
        <li>
            <a href="#">首页</a>
            <a href="#">index</a>
        </li>
        <li>
            <a href="#">登录</a>
            <a href="#">login</a>
        </li>
        <li>
            <a href="#">注册</a>
            <a href="#">register</a>
        </li>
    </ul>
</body>
</html>