为什么3d旋转一定要添加到添加在3d移动后面,先旋转不也一样吗?例如以下正方体嵌套例子

为什么3d旋转一定要添加到添加在3d移动后面,先旋转不也一样吗?例如以下正方体嵌套例子

<!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>正方体嵌套案例</title>

    <style>

        *{

            padding:0;

            margin:0;

        }

        section{

            width:1000px;

            height:1000px;

            position:absolute;

            top:0;

            left:0;

            right:0;

            bottom:0;

            margin:auto;

        }

        section div.small-box{

            width:300px;

            height:300px;

            position:absolute;

            top:0;

            left:0;

            right:0;

            bottom:0;

            margin:auto;

            perspective: 500;

            transform-style:preserve-3d;

            transform: rotateX(45degrotateY(45deg);

        }

        section div.small-box div{

            width:300px;

            height:300px;

            position:absolute;

            top:0;

            left:0;

        }

        section .small-box div:nth-child(1){

            background:rgba(25500,.5);

            transform:translateY(-150pxrotateX(90deg);

        }

        section .small-box div:nth-child(2){

            background:rgba(2551650,.5);

            transform:translateY(150pxrotateX(-90deg);

        }

        section .small-box div:nth-child(3){

            background:rgba(2552550,.5);

            transform:translateX(150pxrotateY(90deg);

        }

        section .small-box div:nth-child(4){

            background:rgba(01280,.5);

            transform:translateX(-150pxrotateY(-90deg);

        }

        section .small-box div:nth-child(5){

            background:rgba(0255255,.5);

            transform:translateZ(150px);

        }

        section .small-box div:nth-child(6){

            background:rgba(00255,.5);

            transform:translateZ(-150px);

        }


        section div.big-box{

            width:600px;

            height:600px;

            position:absolute;

            top:0;

            left:0;

            right:0;

            bottom:0;

            margin:auto;

            perspective: 500;

            transform-style:preserve-3d;

            transform: rotateX(45degrotateY(45deg);

        }


        section div.big-box div{

            width:600px;

            height:600px;

            position:absolute;

            top:0;

            left:0;

        }

        section .big-box div:nth-child(1){

            background:rgba(25500,.5);

            transform:translateY(-300pxrotateX(90deg);

        }

        section .big-box div:nth-child(2){

            background:rgba(2551650,.5);

            transform:translateY(300pxrotateX(-90deg);

        }

        section .big-box div:nth-child(3){

            background:rgba(2552550,.5);

            transform:translateX(300pxrotateY(90deg);

        }

        section .big-box div:nth-child(4){

            background:rgba(01280,.5);

            transform:translateX(-300pxrotateY(-90deg);

        }

        section .big-box div:nth-child(5){

            background:rgba(0255255,.5);

            transform:translateZ(300px);

        }

        section .big-box div:nth-child(6){

            background:rgba(00255,.5);

            transform:translateZ(-300px);

        }


        section:hover .big-box div:nth-child(1){

            transform:translateY(-600pxrotateX(90deg);

        }

        section:hover .big-box div:nth-child(2){

            background:rgba(2551650,.5);

            transform:translateY(600pxrotateX(-90deg);

        }

        section:hover .big-box div:nth-child(3){

            background:rgba(2552550,.5);

            transform:translateX(600pxrotateY(90deg);

        }

        section:hover .big-box div:nth-child(4){

            background:rgba(01280,.5);

            transform:translateX(-600pxrotateY(-90deg);

        }

        section:hover .big-box div:nth-child(5){

            background:rgba(0255255,.5);

            transform:translateZ(600px);

        }

        section:hover .big-box div:nth-child(6){

            background:rgba(00255,.5);

            transform:translateZ(-600px);

        }

    </style>

</head>

<body>

    <section>

        <div class="small-box">

            <div></div>

            <div></div>

            <div></div>

            <div></div>

            <div></div>

            <div></div>

        </div>

        <div class="big-box">

            <div></div>

            <div></div>

            <div></div>

            <div></div>

            <div></div>

            <div></div>

        </div>

    </section>

    

</body>

</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕久久 2021-05-26 17:26:39

同学你好,理解的是对的。

祝学习愉快!

好帮手慕久久 2021-05-26 16:32:33

同学你好,先移动后旋转、先旋转后移动都行,问题在于旋转会改变轴线方向,如果先旋转了,那么“再移动”时,会沿着新的轴线方向移动,比如下面的例子:

http://img1.sycdn.imooc.com//climg/60ae04d909a440ff07950811.jpg

两个盒子outer1、outer2样式一模一样,outer1中的子元素是先平移后旋转,效果如下:

http://img1.sycdn.imooc.com//climg/60ae05a9098e37fa09400429.jpg

而outer2先旋转(此时x轴线会跟着转),再平移(会沿着新轴线),效果如下:

http://img1.sycdn.imooc.com//climg/60ae06410978e9fc09180426.jpg

会发现,二者的最终效果有差异:

http://img1.sycdn.imooc.com//climg/60ae065d093af7c309130877.jpg

如果我们想要的效果是outer1、inner1那样,则inner2需要同时调整x、y方向的位移才行,例如:

http://img1.sycdn.imooc.com//climg/60ae06a90969a0e215390823.jpg

调整inner2位置的过程中会发现,x、y方向位移的具体值,并不好确定(不好调)。因此,要具体问题具体分析,哪种方式利于实现最终的效果,就选用哪种。

祝学习愉快!

  • 提问者 怒焰狂暴 #1

    是不是如以下理解就OK了,无论先移动或者先旋转都不会影响判断


    * 当元素进行3d旋转后,即可继续添加translateX()、translateY()、translateZ()属性让元素在空间移动【使用3d移动,会利用到gpu的3d加速功能】

                * 空间移动可以添加在旋转前或者旋转后,一定要区分清x,y,z轴【需要一定的想象思维】

                * 在网页中,可以这么理解三维空间【默认情况下】

                    【1】 x轴:显示器的宽度

                    【2】 y轴:显示器的高度

                    【3】 z轴:眼睛离显示器屏幕的距离【元素无论怎么进行3d旋转,首先要认清一个面,眼睛距离显示器屏幕的距离就是z轴】  


    2021-05-26 16:36:16
  • 提问者 怒焰狂暴 #2

    * 当元素进行3d旋转后,即可继续添加translateX()、translateY()、translateZ()属性让元素在空间移动【使用3d移动,会利用到gpu的3d加速功能】

                * 空间移动可以添加在旋转前或者旋转后,一定要区分清x,y,z轴【需要一定的想象思维】

                * 在网页中,可以这么理解三维空间【默认情况下】

                    【1】 x轴:显示器的宽度

                    【2】 y轴:显示器的高度

                    【3】 z轴:眼睛离显示器屏幕的距离【元素无论怎么进行3d旋转,首先要认清一个面,眼睛距离显示器的距离就是z轴】  


    2021-05-26 16:37:49
怒焰狂暴 提问者 2021-05-26 15:40:41

说错了,应该是先移动不也是可以的吗?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师