三维坐标系

x轴:水平向右 

y轴:垂直向下

z轴:垂直屏幕 注意: 往外面是正值,往里面是负值(肥肠重要!).

主要知识点

3D位移: translate3d(x,y,z)

3D旋转: rotate(x,y,z)

透视perspective

3D呈现: transform-style

3D移动之 translate3d

  其中,xyz都是不能省略的,没有的话就写0.

透视 perspective 

在2D平面产生近大远小视觉立体,但是效果是二维的.

如果想要网页产生3D效果需要透视(理解成3D物体投影在2D平面内).

模拟人类的视觉位置,可认为安排一只眼睛去看.

透视,我们也称视距,就是人的眼睛到屏幕的距离.

距离视觉点越近在电脑上成像越大,越远成像越小.(也就是说,视距越小,越靠近屏幕,看到的成像越大)

透视的单位是像素

透视写在被观察的父盒子上面

    d:就是视距,即我们的眼睛到屏幕的距离.

    z:就是z轴

   body {

            perspective:300px;

        }

        .bb {

            margin: 0 auto;

            width: 200px;

            height: 200px;

            background-color: pink;

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

        }

    </style>

</head>

<body>

    <div></div>

</body>

3D旋转之 rotate3d

3D旋转指可以让元素平面内沿着x轴,y轴,z轴或者自定义进行旋转.

语法:

现在我们做一个让小猪佩奇3d旋转的小例子.

<!DOCTYPE html>

<html>

<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>

        body {

            perspective: 500px;

        }

        img {

            display: block;

            margin: 100px auto;

            transition: all 2s;

        }

        img:hover {

            transform: rotateX(360deg);

        }

</style>

</head>

<body>

    <img src="../images/pig.jpg" alt="">

</body>

</html>

  我们可以通过左手准则来判断元素朝哪个方向转动.

  transform:rotate3d(x,y,z,deg):沿着自定义轴旋转deg为角度(了解即可)

  xyz是代表旋转轴的矢量,是标示你是否希望沿着该轴旋转,最后一个标示旋转的角度.

  假如说,我们设置旋转的矢量是(1,1,0,45deg),那么就是沿着下图的轴旋转.

  看一个动图理解一下:

  做到现在发现有一些透视效果火狐居然不能显示出来,所以现在在将vscode的liveserver的默认浏览器换成Chrome的,结果居然一直打不开,现在正在解决...

  重装了一次Chrome以后就可以了...

3D呈现之 transform-style

控制子元素是否开启三维立体环境.

transform-style:flat子元素不开启3d立体空间,这是默认的.

transform-style:preserve-3d子元素开启立体空间.

代码写给父级,但是影响的是子盒子.

这个属性很重要,后面必用.

现在我们要做一个小案例:

  我现在已经做到了这一步:用整个box装两个盒子,一个是粉色的,一个是黄色的,我们给黄色的盒子一个沿X轴转60度的旋转,给body500px的透视.出来的效果是这样的:

  但是当我想要这个盒子转过去的时候,出现了这样的状况:

  可以看到,黄色盒子的旋转的效果突然变回二维平面的.

变成了这样的效果

  现在我们就给我们的父盒子box加上一个transform-style:preserve-3d,看看效果如何:

  现在便有了立体的效果嘿嘿.

刚刚又做了一个案例,还是稍稍有点难的,主要是很难想:

主要的思路:

  先放一个大的盒子.box,然后再在里面放两个小盒子,一个是正面.front,一个是背面.back,给两个盒子设置好大小和文字之类的属性,最后再让整个盒子旋转.  就可以得到上面的旋转图.

  重点来了:

当我们给两个盒子设置了定位以后,出现在上面的是back盒子,因为back盒子在结构中处于下面,必然会把正面的盒子压住.

如何让正面反过来的时候出现背面的盒子且是正确显示的呢?按理来说,背后的盒子如果直接翻转过来,文字是反的.

最后翻转的时候盒子的背面显示不出来.

  解决方法:

我们可以使用z-index,给.front来个1的z-index值.front盒子就可以显示在上面了.

我们可以首先让两个盒子处于"背对背拥抱"的位置,也就是说,先给背面的盒子沿着Y轴旋转180度.

因为3d效果的环境没有开启,所以是看不到效果的,我们只要添加transform-style:preserve-3d即可.

  下面来展示一下代码:

<!DOCTYPE html>

<html>

<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>

        .box {

            position: relative;

            width: 200px;

            height: 200px;

            margin: 100px auto;

            transition: all 2s;

            transform-style: preserve-3d;

        }

        .front,

        .back {

            position: absolute;

            width: 200px;

            height: 200px;

            border-radius: 50%;

            text-align: center;

            line-height: 200px;

            font-size: 30px;

            color: #fff;

        }

        .back {

            background-color: seagreen;

            /* 先让背面的盒子转108度到背面去 */

            transform: rotateY(180deg);

        }

        .front {

            background-color: salmon;

            z-index: 1;

        }

        .box:hover {

            transform: rotateY(180deg);

            /* z-index: 0; */

        }

</style>

</head>

<body>

    <div>

        <div>

            你好

        </div>

        <div>

            再见

        </div>

    </div>

</body>

</html>

  刚刚又做了一个案例,实在是太累了,我自己想了很久才做好,中间出了很多岔子,好在还是做出来的,但是还是有点点问题....

重点!!!如果移动(translate)的属性和其他属性同时出现,必须先写translate!!!

  今天学得很累,就不做多解释了...

<!DOCTYPE html>

<html>

<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>

        body {

            /* perspective: 500px; */

            transform-style: preserve-3d;

        }

        .box {

            float: left;

            transform-style: preserve-3d;

            position: relative;

            width: 100px;

            height: 50px;

            margin: 100px 10px;

            transition: all .5s;

        }

        .front,

        .down {

            position: absolute;

            width: 100px;

            height: 50px;

            text-align: center;

            line-height: 50px;

            font-size: 20px;

            color: #fff;

        }

        .front {

            background-color: salmon;

            z-index: 1;

        }

        .down {

            top: 25px;

            background-color: sandybrown;

            transition: all 2s;

            /* 270deg或者-90deg都是可以的 */

            transform: translateZ(-25px) rotateX(270deg);

        }

        .box:hover{

            /* 如果有移动和其他的属性同时出现,必须把移动写在前面!!!!!!!! */

            transform: translateY(-25px) rotateX(90deg);

        }

</style>

</head>

<body>

    <div>

        <div>你好</div>

        <div>再见</div>

    </div>

    <div>

        <div>你好</div>

        <div>再见</div>

    </div>

    <div>

        <div>你好</div>

        <div>再见</div>

    </div>

    <div>

        <div>你好</div>

        <div>再见</div>

    </div>

    <div>

        <div>你好</div>

        <div>再见</div>

    </div>

</body>

</html>

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月19日

热门专题

弥勒综合高中|弥勒综合高中
弥勒综合高中
综合高中|云南综合高中,昆明综合高中,综合高中能考本一吗,综合高中和普通高中的区别,综合高中是什么意思,综合高中能参加全国统一高考吗,综合高中可以考哪些大学,综合高中的学籍是什么
综合高中
易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招
安徽开放大学|安徽开放大学报名,安徽开放大学报考,安徽开放大学,什么是安徽开放大学,安徽开放大学学历,安徽开放大学学费,安徽开放大学报名条件,安徽开放大学报名时间,安徽开放大学学历,安徽开放大学专业
安徽开放大学
安徽中源管业有限公司|安徽中源管业有限公司,安徽中源管业有限公司介绍,安徽中源管业有限公司电话,安徽中源管业有限公司地址,安徽中源管业有限公司厂家,安徽中源管业有限公司电力管,安徽中源管业有限公司管材
安徽中源管业有限公司
大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
昆明综合高中|昆明综合高中
昆明综合高中
云南巨榕教育投资集团有限公司|云南巨榕教育投资集团有限公司,巨榕教育集团,巨榕教育
云南巨榕教育投资集团有限公司

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部