32.三维转换属性

三维在网页中显示出来有两个特点

  • 近大远小
  • 被遮挡后不可见

三维转换有四个常用属性,3D位移(translate3d),3D旋转(rotate3d),透视(perspective),3D呈现(transfrom-style)

与二维转换相同,由于转换的属性名都为transform,所以无论写多少transform只有最后的语句生效,写一个二维的再写一个三维的,也是只有最后的语句生效

目录

1  三维坐标系

2  透视 perspective

3  三维移动 translate3d

4  三维旋转

4.1  x轴旋转 rotateX()

4.2  y轴旋转 rotateY()

4.3  z轴旋转 rotateZ()

4.4  自定义轴旋转 rotate3d(x,y,z,deg)

5  三维呈现 transform-style

6  两面反转的盒子效果

7  三维导航栏效果

8  旋转木马效果


1  三维坐标系

三维坐标系的x,y与二维一致

z轴的正方向是从屏幕指向屏幕前的你

2  透视 perspective

部分3D效果如果想在页面上有效果,必须加入透视,加入透视就相当于将斜着看当前页面,如果没加透视效果就是这样的

下面我对一张图片进行3D旋转

加入了透视就是这样的

perspective需要跟下图的参数d

我们称参数d为视距,可以理解为眼镜与屏幕的距离,d值设置的越小,原本的图像就会显示的越大

透视属性一定要设置在被透视元素的父对象上,比如我现在要对div进行透视

那么就要设置在body上

只设置perspective在视觉上没有任何效果的,我们下面移动z轴就可以看出效果了

3  三维移动 translate3d

它的语法是这样的

  • transform:translateX(100px):仅在x轴上移动
  • transform:translateY(100px):仅在y轴上移动
  • transform:translateZ(100px):仅在z轴上移动,translateZ一般只用px单位(不用百分比等其他单位)
  • transform:translate3d(x,y,z) 其中x,y,z分别指要移动的轴方向的距离

如果你想要同时使用多个那么可以这样写 transform:translateX(50px) translateY(100px) 这样它就会在X方向移动50px,在y方向移动100px。与二维转换的统一设置同理

我们现在用一下

我们现在再将z轴置为负数

效果并不是很明显,我们将其做成一组动画看一看

看完这一组动画就能明白Z轴的移动效果了

4  三维旋转

在三维旋转中我们可以让元素沿着x,y,z轴或自定义轴进行旋转,它的语法是这样的

最后一个一般不用

为了更好的展示效果,我们用一张图片进行旋转,我们依然使用动画

4.1  x轴旋转 rotateX()

  • 这里是可以不加透视的,透视会让效果更加明显

它是以图片的横中线进行旋转的

如果把perspective调小就会有糊脸的感觉

角度也可以给负值,

如果是正值则上端会向屏幕倾斜,下端会向屏幕倾斜

如果是负值则上端会向屏幕倾斜,下端会向屏幕倾斜

4.2  y轴旋转 rotateY()

y是沿着图片的竖中线进行旋转

角度也可以给负值

如果是正值则右端会向屏幕倾斜,左端会向屏幕倾斜

如果是负值则右端会向屏幕倾斜,左端会向屏幕倾斜

4.3  z轴旋转 rotateZ()

z轴是从屏幕指向你的轴,所以z轴的旋转,实际上就是平面的旋转

它默认以图像中心点所在轴进行旋转

角度也可以给负值,旋转Z轴时,正值是顺时针,负值是逆时针

4.4  自定义轴旋转 rotate3d(x,y,z,deg)

x,y,z只能是1或者0,如果我设置三个1,那么它则会绕x,y,z三轴的矢量和进行旋转,大概是下图中的原点指向你的这条轴

效果可以自己看一下

如果你只想绕一个轴旋转,将另外的两个轴置为0就可以了

5  三维呈现 transform-style

我们现在想做这样一个效果,父盒子Y轴转动,红盒子X轴转60度不动

代码我们这样写

我们发现此时的效果是这样的

红色的盒子没有展示出来3D的效果,这个时候我们在父对象中加入3D呈现

这样就达到了我们想要的效果

transform-style默认情况下取值flat,flat不呈现3D效果,我们现在设置为preserve-3d,preserve-3d是呈现3D效果

6  两面反转的盒子效果

效果是这样的,打开后出现我们的正面盒子

鼠标悬停后逐渐看到我们的反面盒子

代码是这样的

思路是先将反面的盒子翻个个儿,然后在整体盒子的hover中将盒子整体翻个,perspective写不写无所谓,注意保留3D呈现

7  三维导航栏效果

打开页面后是这样的

当我们鼠标移动上去的时候回把下面的面翻上去

代码是这样的

在调试的时候可以加入perspective,加上了效果就是这样的

原理是以这个体的中心轴进行旋转,这样这两个盒子的位置就不会变

要使用中心轴旋转就必须将 正常面 与 隐藏面 分别移动,这样就能构成一个上图样子的体

8  旋转木马效果

效果是这样的

内侧1张图像,外侧6张图像,均可以放置不同的图片,这七张图像会像旋转木马一样不停旋转

代码是这样的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            perspective:2000px;
        }
        div {
            position:absolute;
            width:325px;
            height:462px;
        }
        img {
            width:100%;
            height:100%;
        }
        .all {
            margin:300px auto;
            position:relative;
            transform-style:preserve-3d;
            animation:six_rotate 15s linear infinite;
        }

        @keyframes six_rotate {
            100% {transform:rotateY(360deg);}
        }

        .all div:nth-child(1) {
            transform:translateZ(300px);
        }
        .all div:nth-child(2) {
            transform:rotateY(60deg) translateZ(300px);
        }

        .all div:nth-child(3) {
            transform:rotateY(120deg) translateZ(300px);
        }

        .all div:nth-child(4) {
            transform:rotateY(-60deg) translateZ(300px);
        }

        .all div:nth-child(5) {
            transform:rotateY(-120deg) translateZ(300px);
        }

        .all div:nth-child(6) {
            transform:translateZ(-300px);
        }

    </style>
</head>
<body>
<div class="all">
    <div><img src="../CSS3.png" alt=""></div>
    <div><img src="../CSS3.png" alt=""></div>
    <div><img src="../CSS3.png" alt=""></div>
    <div><img src="../CSS3.png" alt=""></div>
    <div><img src="../CSS3.png" alt=""></div>
    <div><img src="../CSS3.png" alt=""></div>
<!--    中间的图像-->
    <div><img src="../CSS3.png" alt=""></div>
</div>
</body>
</html>

这里注意一点,先转再移动Z轴,这样就能便捷的让每一张图像与体的中心点一致了

也可以换别的个数,改一下度数就可以了,度数是360/n

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值