前面我们已经介绍过了2D转换,那么我们即将学习的3D转换又是什么呢,它跟2D转换有什么不同呢?

在我们日常生活的环境就是3D的,我们多看到的物体也都是3D的,而我们拍的照片就是3D物体在2D平面中呈现的样子 。

3D的特点

  • 近大远小(离我们眼睛越近看上去越大,而离眼睛越远则看上去越小)
  • 物体后面遮挡不可见

根据这些特点我们就可以在网页上模拟构建出3D效果。

三维坐标系

我们前面讲过的2D是一个平面坐标系,而3D则是三维坐标系。三维坐标系其实就是指立体空间,立体空间是由3个轴共同组成的。

  • x轴:水平向右。x右边是正值,左边是负值
  • y轴:垂直向下。y下面是正值,上面是负值
  • z轴:垂直屏幕。往外面是正值,往里面是负值

在我们的网页中的左边原点就是我们屏幕的左上角。

3D转换

3D转换中我们主要来学习工作中最常用的3D位移和3D旋转

主要知识点

  • 3D位移:translate3d(x,y,z)
  • 3D旋转:rotate3d(x,y,z)
  • 透视: perspective
  • 3D呈现transfrom-style

3D移动 - translate3d

3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向

  • transform:translateX(200px)仅在x轴上移动
  • transform:translateY(200px)仅在y轴上移动
  • transform:translateZ(200px)仅在z轴上移动
  • transform:translate3d(x,y,z)其中x、y、z分别指要移动的轴的方向的距离

下面我们用代码来演示一下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>3d demo</title><style>div {width: 200px;height: 200px;background-color: pink;transform: translateX(100px) translateY(100px) translateZ(100px);}</style>
</head><body><div></div>
</body></html>

在上面这段代码中,我们让这个粉色盒子分别沿着x轴、y轴和z轴各移动了100像素,但是当我们运行起来是发现,z轴方向好像并没有明显的变化。这是因为z轴方向上的移动需要借助透视才能看出效果。接下来我们来看看什么是透视。

透视perspective

perspective 属性定义 3D 元素距视图的距离,以像素计。该属性允许您改变 3D 元素查看 3D 元素的视图。当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。

我们平时去电影院看3D电影时,如果直接用眼睛去看其实并看不出明显的3D效果,而是每次电影院都会发给我们一个3D眼镜,那么借助3D眼镜我们再看电影3D效果就非常明显了。那么在我们的网页中如果也需要让我们看到的3D效果明显一些,那就需要借助透视

  • 如果想要在网页产生3D效果需要借助透视(理解成3D物体投影在2D平面上)
  • 模拟人类的视觉位置,借助perspective和translateZ可以模拟实现元素的近大远小的效果
  • 透视的单位是像素
  • 透视越小效果越明显

注意:

  1. 透视必须写在被观察元素的父盒子上面
  2. perspective 属性只影响 3D 转换元素
  3. 要想改变translateZ实现近大远小效果,则必须要借助透视,否则translateZ是没有效果的
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>3d demo</title><style>body{perspective: 200px;}div {width: 200px;height: 200px;background-color: pink;transform: translateX(100px) translateY(100px) translateZ(100px);}</style>
</head><body><div></div>
</body></html>

上面的代码中我们给div的父元素body添加一个透视,这时再看这个粉色盒子发现明显比不加透视时变大了很多。这就是透视的作用。上面的示例可能还不够明显,接下来我们再看一个rotat3d的例子效果会更明显

3D旋转 rotate3d

3D旋转指可以让元素在三维平面内沿着x轴、y轴、z轴或自定义轴进行旋转

语法:

  • transform:rotateX(Xdeg):沿着x轴正向旋转X度
  • transform:rotateY(Ydeg):沿着y轴正向旋转Y度
  • transform:rotateZ(Zdeg):沿着z轴正向旋转Z度
  • transform:rotate3d(x,y,z,deg):沿着自定义轴旋转deg为旋转度数

对于元素的旋转方向也是正负之分的,那么如何区分元素旋转方向的正负呢,下面我们来学习一下左手准则,用我们的左手即可判断方向的正负

左手准则:

  • 左手的手指指向x轴、y轴、z轴的正方向
  • 其余手指的弯曲方向就是该元素沿着x轴、y轴、z轴旋转的方向

下面的代码是沿着x轴正向旋转的示例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
<style>
#div1
{
position: relative;
height: 150px;
width: 150px;
margin: 50px;
padding:10px;
border: 1px solid black;
perspective:50;
-webkit-perspective:150; /* Safari and Chrome */
}#div2
{
padding:50px;
position: absolute;
border: 1px solid black;
background-color: pink;
transform: rotateX(45deg);
-webkit-transform: rotateX(45deg); /* Safari and Chrome */
}
</style>
</head><body><div id="div1"><div id="div2">HELLO</div>
</div></body>
</html>

上述代码中如果我们不加透视效果则运行后就是下面第一个图的样子,如果使用了透视则就是第二张图的样子,这样来看透视的作用就很明显了。

3D呈现 transform-style

transform-style 属性规定如何在 3D 空间中呈现被嵌套的元素。

注释:

  1. 该属性必须与 transform 属性一同使用
  2. 代码与透视一样必须写在父级元素上,但会作用在子元素上

语法:transform-style: flat | preserve-3d;

描述
flat 子元素将不保留其 3D 位置。
preserve-3d 子元素将保留其 3D 位置。

下面来看个例子:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">
<style>
body{perspective: 300px;
}
.box{position:relative;width:200px;height:200px;margin:100px auto;transition:all 1s;transform-style: preserve-3d;
}
.box:hover{transform:rotateY(45deg)
}
.box div{position:absolute;top:0;left:0;width:100%;height:100%;background-color: pink;
}.box div:last-child{background-color:green;transform:rotateX(60deg)
}
</style>
</head><body><div class="box"><div></div><div></div>
</div></body>
</html>

上面代码中一个大盒子中嵌套两个小盒子,当我们鼠标悬浮到大盒子上时,我们先让绿色小盒子沿着X轴正向旋转60度,然后再让大盒子沿着Y轴正向旋转45度 。那么在我们不用transform-style修饰时会得到如下第一个图的效果,而使用了transform-style后会出现第二张图的样子。这个例子很好的描述了transform-style的作用(保留子元素的3D效果)。

案例

实现两个翻转的盒子

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>3d demo</title><style>body{perspective: 350px;}.box {position: relative;width: 200px;height: 200px;margin: 100px auto;transform-style: preserve-3d;transition: all 0.4s;}.box div {position: absolute;width: 200px;height: 200px;line-height: 200px;text-align: center;border-radius: 50%;}.box div:first-child {background-color: pink;z-index: 1;}.box div:last-child {background-color: green;transform: rotateY(180deg);}.box:hover{transform: rotateY(180deg);}</style>
</head><body><div class="box"><div>Hello</div><div>world</div></div>
</body></html>

3D导航栏案例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>3d demo</title><style>.box {position: relative;           transform-style: preserve-3d;transition: all 0.4s;}.box div {width: 200px;height: 50px;line-height: 50px;text-align: center;background-color:pink;}.box .shn {background-color: green;transform: translateY(-25px) translateZ(-25px) rotateX(-90deg)}.box:hover{transform: translateY(-50px) rotateX(90deg);}li{float: left;list-style: none;}</style>
</head><body>
<ul>
<li><div class="box"><div>导航一</div><div class="shn">导航一</div></div>
</li>
<li><div class="box"><div>导航二</div><div class="shn">导航二</div></div>
</li>
<li><div class="box"><div>导航三</div><div class="shn">导航三</div></div>
</li>
</ul>
</body></html>

旋转木马案例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>旋转木马</title><style>body {perspective: 1000px;}section {position: relative;width: 300px;height: 200px;margin: 200px auto;transform-style: preserve-3d;animation: rotate 10s linear infinite;background: url(caoyaolu.jpg) no-repeat center;}section div {position: absolute;width: 100%;height: 100%;background: url(timg.jfif) no-repeat;}section:hover {animation-play-state: paused;}section div:first-child {transform: translateZ(400px);}section div:nth-child(2) {transform: rotateY(60deg) translateZ(400px);}section div:nth-child(3) {transform: rotateY(120deg) translateZ(400px);}section div:nth-child(4) {transform: rotateY(180deg) translateZ(400px);}section div:nth-child(5) {transform: rotateY(240deg) translateZ(400px);}section div:nth-child(6) {transform: rotateY(300deg) translateZ(400px);}@keyframes rotate {0% {transform: rotateY(0deg);}100% {transform: rotateY(100deg);}}</style>
</head><body><section><div></div><div></div><div></div><div></div><div></div><div></div></section>
</body></html>

HTML+CSS中的3D转换translate/rotate 旋转木马/翻转盒子/3D导航栏相关推荐

  1. css中的伪元素、基线对齐、盒子模型

    目录 一.伪元素 二.基线对齐 三.盒子模型 1.外边距margin 2.边框(border) 一.伪元素 说明:伪类元素使用两个冒号(::)而不是一个冒号,目的是为区分伪类和伪元素,大多数浏览器都支 ...

  2. navbar fixed top.css,Bootstrap个人博客给nav设置navbar-fixed-top定位后导航栏遮盖内容完美解决方案!...

    这也是我在使用Bootstrap3开发 完美解决方案一:使用两个导航占位 大致意思就是给页面设置两个导航nav一个是空的导航栏一个则是设置navbar-fixed-top的导航栏 .......... ...

  3. Photoshop投影与CSS中box-shadow的转换

    来自:http://www.jb51.net/css/404167.html "混合模式":Photoshop提供了各式各样的混合模式,但是CSS3阴影只支持正常模式(normal ...

  4. 保姆级解读!CSS属性transform变形+2D转换+3D转换实例+代码+解析——Web前端系列学习笔记

    文章目录 transfrom 2D转换 案例代码 效果图 元素变形原点 3D转换 3D转换--案例 案例代码 transfrom transform,翻译成中文的含义是"改变,使-变形:转换 ...

  5. CSS3 2D和3D转换 Transform

    Transform 适应于对任一DOM元素的2D或3D转换,这些转换效果有:旋转(rotate).拉伸(scale).平移(move).倾斜(skew)等,利用Transform和javascript ...

  6. CSS3新特性(属性选择器 、结构伪类选择器、2D/3D转换、动画、浏览器私有前缀)

    这里写目录标题 一.CSS3 属性选择器 二.CSS3 结构伪类选择器 三. CSS3 伪元素选择器 四.CSS3 2D转换 1.2D 转换之移动 translate 2.2D 转换之旋转 rotat ...

  7. CSS基础(part22)--2D转换

    学习笔记,仅供参考,有错必究 参考自:pink老师教案 文章目录 2D转换 translate rotate scale 2D转换 2D 转换是改变标签在二维平面上的位置和形状: 移动: transl ...

  8. 前端学习笔记之CSS3新特性3D转换 3.23

    1 3D转换概念 我们生活的环境是3D的,照片就是3D物体在2D平面呈现的例子. 特点: 1.近大远小. 2.物体后面遮挡不可见 当我们在网页上构建3D效果的时候参考这些特点就能产出3D效果. 三维坐 ...

  9. CSS中定义多个链接样式,在CSS中定义【导航栏】超链接样式

    1.案例css代码 .divcss5 a:link{ color:#F00}/* 链接默认为红色 */ .divcss5 a:hover{ color:#000}/* 鼠标悬停黑色 */ .divcs ...

最新文章

  1. JavaScript异步史
  2. MySQL必知必会(使用子查询)
  3. 我们应当学会辞旧迎新——《不一样的天空》
  4. java liunx 日期格式化_java关于windows环境下显示日期格式正常,linux环境上异常的问题...
  5. CVE-2014-6332 修改浏览器安全属性开启Godmode
  6. python打包成exe
  7. linux之安装Apache服务
  8. 网络流24题-骑士共存问题
  9. java坦克大战案例_java坦克大战
  10. Discuz X 3.4 系列漏洞梳理
  11. 团队作业九---项目验收与总结
  12. css层叠实例,css 层叠与z-index的示例代码
  13. 签名档php,如何让签名档图片连接到自己空间
  14. 生活不可能像你想象的那么好,但也不会像你想象的那么糟。 ——莫泊桑《羊脂球》
  15. 由注意力机制中scaled sqrt(dk)操作联想到期望与方差的本质推导
  16. 查询电脑关机/重启记录
  17. lumerical安装教程
  18. 开机启动计算机时 屏幕无显示桌面,开机时电脑黑屏没有出现桌面怎么处理
  19. 一个项目的基本要素都有哪些?
  20. 随笔——不要活在别人的眼里

热门文章

  1. 2022-2027年中国益智玩具行业市场深度分析及投资战略规划报告
  2. Jquery获取一段时间内所有对应的日期,并获取日期对应的星期几。
  3. 【StreamSets】 JDBC_502 - Batch size greater than maximal batch size allowed in sdc.properties
  4. php 以自动打字程序,利用vbs脚本实现自动打字
  5. 一个敏感词检查功能是怎么来的
  6. ASCII码表,运算符,自加,加号的三种用法
  7. No instances available for XXX
  8. Vue+mintUI+Element(vscode)入门学习
  9. 小红书上线“品牌违规分”,618内容营销新风向
  10. linux实验六vi文本编辑器,Linux-实验六-vi文本编辑器.docx