用css实现3D效果

前提:

        父元素设置transfrom-style:preserve-3d,开启3D,同时可设transition: transform 0.5s ease-in;来表示动画过渡时间。

一,3D旋转

        相关属性
属性名属性值属性含义
transfromrotateX/Y/Z /rotate3D

rotateX/Y/Z是沿着对应的轴进行旋转,

rotate3D是沿着自定义的轴进行旋转

transfrom-origin

(x,y,z)

x可取值:left/center/right/百分数/length

y;可取值:top/center/bottom/百分数/length

z:可取值:length

旋转轴的位置

下面是一张效果图:

在X轴和Y轴旋转中,我们可以看到旋转轴都在页面正中间。但是也可通过CSS改变轴的位置

下面是相关代码,红色代表旋转轴

.ziX{
            /* 沿X轴进行旋转 */
            transform: rotateX(60deg);
            transform-origin: center top 0;
            border-top:2px solid red;
        }
 .ziY{
            /* 沿Y轴进行旋转 */
            transform: rotateY(60deg);
            transform-origin: left center 0;
            border-left:2px solid red;
        }
        案例:盒子旋转
.fu{
            width: 200px;
            height: 300px;
            position: relative;
            transform-style: preserve-3d;
            /* transform: rotateX(0deg) rotateY(119deg); */
            animation: rotateAnimation 8s infinite;
            margin-top: 100px;
            margin-left: 100px;
           
        }
        .fu div{
            width: 200px;
            height: 200px;
            background: #ccc;
            color: red;
            text-align: center;
            line-height: 200px;
            font-size: large;
            border: 1px solid red;
            position: absolute;

        }
        .div1{
            transform:translateZ(100px);
        }
        .div2{
            transform:rotateY(180deg) translateZ(100px);

        }
        .div3{
            transform: rotateY(90deg) translateZ(100px);
        }
        .div4{
            transform: rotateY(270deg) translateZ(100px);
        }
        @keyframes rotateAnimation{
            0%{
                transform: rotateY(0deg);
            }
            100%{
                transform: rotateY(360deg);
            }
        }

               

<div class="fu">
        <div class="div1">前</div>
        <div class="div2">后</div>
        <div class="div3">左</div>
        <div class="div4">右</div>
    </div>
        注意:

1,父元素要设置:transform-style: preserve-3d来保证3D效果。且父元素的宽度要与设置的3D图形的宽度相近,否则在进行动画旋转时会进行公转而不是自转。

2,做自转3D动画时,子元素要先旋转后位移,即transfrom:rotate(60deg) translateZ(200px);而不是transfrom:translateZ(200px) rotate(60deg)

二,旋转和位移的先后顺序有什么不同?

下面的效果图为了更好的展示,都在其父元素上做了一定角度的偏转。

1,先位移的话,会默认所有的子元素使用同一个坐标系。

.left{
            transform: translateZ(200px) rotateY(90deg);
        }
.right{
            transform: translateZ(-200px) rotateY(90deg);
       }

结果如下图所示:两个元素在同一平面上,此时的Z轴垂直于屏幕。

2,先旋转的话,会默认每个子元素都有一个单独的坐标系。

.left{
            transform: rotateY(90deg) translateZ(200px);
        }
        .right{
            transform: rotateY(90deg) translateZ(-200px);
        }

结果如下图所示:两个图像平行,旋转后每个元素的轴也跟着旋转,此时两个元素的Z轴都垂直于两个元素,而不是垂直于屏幕了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值