当前位置: 首页 > news >正文

css3新特性第七章(3D变换)

css新特性第七章(3D变换)

一、3d空间和景深

元素进行 3D 变换的首要操作:父元素必须开启 3D 空间!

使用 transform-style 开启 3D 空间,可选值如下:

  • flat : 让子元素位于此元素的二维平面内( 2D 空间)—— 默认值
  • preserve-3d : 让子元素位于此元素的三维空间内( 3D 空间)

景深

何为景深?—— 指定观察者与 z=0 平面的距离,能让发生 3D 变换的元素,产生透视效果,看来更加立
体。

  • perspective
    • none : 不指定透视 ——(默认值)
    • 长度值 : 指定观察者距离 z=0 平面的距离,不允许负值。
  • perspective 设置给发生 3D 变换元素的父元素!

基础html结构

  .outer {width: 200px;height: 200px;border: 2px solid black;font-size: 30px;text-align: center;line-height: 200px;margin: 0 auto;margin-top: 100px;/* 父元素需要开启3d空间 */transform-style: preserve-3d;/* 设置景深   近大远小  必须要设置在父元素上面 */perspective: 150px;}<div class="outer"><div class="inner">3D变换</div></div>

设置 rotateX 旋转效果

在这里插入图片描述

代码

.inner {

​ width: 200px;

​ height: 200px;

​ background-color: palegreen;

​ /* 设置x轴旋转 类似于体操运动员,一直在单杠上面上下 */

​ transform: rotateX(50deg);

}

设置rotateY 旋转效果

在这里插入图片描述

代码

.inner {

​ width: 200px;

​ height: 200px;

​ background-color: palegreen;

​ /* 设置Y轴旋转 类似于旋转,沿着柱子左右方向 */

​ transform: rotateY(50deg);

}

总结

我们发现,当我们设置了 perspective 的参数大小会发现,我们数值设置的越小,那么我们看到的z轴面积就越大,改值跟我们眼睛看东西一样,越近对应看到的物体也就越大,数字越小就代表越近,因为只有旋转效果是最好的,位移和缩放是看不出来的,因为没有厚度

二、透视点位置

所谓透视点位置,就是观察者位置;默认的透视点在元素的中心。通常我们不需要跳转透视点位置;

  • perspective-origin
  • 400px 300px 相对坐标轴往右偏移400px, 往下偏移300px(相当于人蹲下300像素,然后向右移动400像素看元素)

默认效果

在这里插入图片描述

代码

 <style>.outer {width: 200px;height: 200px;border: 2px solid black;font-size: 30px;text-align: center;line-height: 200px;margin: 0 auto;margin-top: 100px;/* 父元素需要开启3d空间 */transform-style: preserve-3d;/* 设置景深   近大远小  必须要设置在父元素上面 */perspective: 500px;/* 修改透视点位置 默认是正中央 *//* perspective-origin: 102px 102px; *//* 透视点位置  x 轴代表是右下角   y代表底下蹲下来看 *//* perspective-origin: 400px 300px; */}.inner {width: 200px;height: 200px;background-color: rgb(60, 209, 209,0.7);/* 设置x轴旋转    */transform: rotateX(50deg);/* 设置Y轴旋转    类似于旋转,沿着柱子左右方向 *//* transform: rotateY(50deg); */}</style>
</head>
<body><div class="outer"><div class="inner">3D透视</div></div>
</body>

设置透视点位置

perspective-origin: 400px 300px; 透视点位置 x 轴代表是右下角 y代表底下蹲下来看

rotateX 效果

.inner {

​ width: 200px;

​ height: 200px;

​ background-color: rgb(60, 209, 209,0.7);

​ /* 设置x轴旋转 */

​ transform: rotateX(50deg);

}

在这里插入图片描述

rotateY 效果

transform: rotateY(50deg);

在这里插入图片描述

三、3D位移

3D 位移是在 2D 位移的基础上,可以让元素沿 z 轴位移,具体使用方式如下:

  1. 先给元素添加 转换属性 transform

  2. 编写 transform 的具体值, 3D 相关可选值如下:

    含义
    translateZ设置 z 轴位移,需指定长度值,正值向屏幕外,负值向屏幕里,且不能
    写百分比。
    translate3d第1个参数对应 x 轴,第2个参数对应 y 轴,第3个参数对应 z 轴,且均
    不能省略。

html基本结构

  .outer {width: 200px;height: 200px;border: 2px solid black;font-size: 30px;text-align: center;line-height: 200px;margin: 0 auto;margin-top: 100px;/* 父元素需要开启3d空间 */transform-style: preserve-3d;/* 设置景深   近大远小  必须要设置在父元素上面 */perspective: 500px;/* 修改透视点位置 默认是正中央 */perspective-origin: 259px 226px;}<div class="outer"><div class="inner">3D位移</div></div>

写法1:translateZ

.inner {

​ width: 200px;

​ height: 200px;

​ background-color: rgba(87, 62, 230, 0.8);

​ /* 写法1 z 轴 我们可以看到是放大了 实际上是从里面出来*/

​ transform: translateZ(150px);

​ /* 增加阴影 */

​ box-shadow: 0px 0px 10px black;

}

在这里插入图片描述

写法2:transform

x 轴 y 轴 z轴 三个参数都不能省

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

在这里插入图片描述

总结

我们看到的第一眼以为是一个放大,实际上不是的,位移后,原本盒子没有厚度导致我们以为只是放大,这个时候我们需要调整透视点位置即可

四、3D选择

旋转是这些效果中最明显的。

3D 旋转是在 2D 旋转的基础上,可以让元素沿 x 轴和 y 轴旋转,具体使用方式如下:

1. 先给元素添加 转换属性 transform
2. 编写 transform 的具体值, 3D 相关可选值如下:
含义
rotateX设置 x 轴旋转角度,需指定一个角度值( deg ),面对 x 轴正方向:正值顺时针,负
值逆时针。
rotateY设置 y 轴旋转角度,需指定一个角度值( deg ),面对 y 轴正方向:正值顺时针,负
值逆时针。
rotate3d前 3 个参数分别表示坐标轴: x , y , z ,第 4 个参数表示旋转的角度,参数不允
许省略。
例如: transform: rotate3d(1,1,1,30deg) ,意思是: x 、 y 、 z 分别旋转
30 度。

rotateX

沿着x轴开启3d空间

效果

在这里插入图片描述

代码

  .outer {width: 200px;height: 200px;border: 2px solid black;font-size: 30px;text-align: center;line-height: 200px;margin: 0 auto;margin-top: 100px;/* 父元素需要开启3d空间 */transform-style: preserve-3d;/* 设置景深   近大远小  必须要设置在父元素上面 */perspective: 500px;/* 修改透视点位置 默认是正中央 */perspective-origin: 102px 102px;}.inner {width: 200px;height: 200px;background-color: rgb(167, 248, 44,0.9);/* x 轴 顺时针 *//* transform: rotateX(45deg) *//* y 轴 顺时针 *//* transform: rotateY(45deg); *//* 写法3  写的是4个值  x y z  旋转角度   */transform: rotate3d(1,0,1,30deg);}
<div class="outer"><div class="inner">3D旋转</div></div>

rotateY

沿着y轴进行旋转

效果

在这里插入图片描述

代码

 /* y 轴 顺时针 */transform: rotateY(45deg);

rotate3d

复合属性写法 写的是4个值 x y z 旋转角度

transform: rotate3d(1,0,1,50deg);

在这里插入图片描述

五、3D缩放

3D 缩放是在 2D 缩放的基础上,可以让元素沿 z 轴缩放,具体使用方式如下:

  1. 先给元素添加 转换属性 transform
  2. 编写 transform 的具体值, 3D 相关可选值如下:
含义
scaleZ设置 z 轴方向的缩放比例,值为一个数字, 1 表示不缩放,大于 1 放大,小
于 1 缩小。
scale3d第1个参数对应 x 轴,第2个参数对应 y 轴,第3个参数对应 z 轴,参数不允许
省略。

代码结构

<style>.outer {width: 200px;height: 200px;border: 2px solid black;font-size: 30px;text-align: center;line-height: 200px;margin: 0 auto;margin-top: 100px;/* 父元素需要开启3d空间 */transform-style: preserve-3d;/* 设置景深   近大远小  必须要设置在父元素上面 */perspective: 500px;/* 修改透视点位置 默认是正中央 */perspective-origin: 102px 102px;}.inner {width: 200px;height: 200px;background-color: rgb(167, 248, 144,0.9);/* 写法1  scaleZ我们看到好像没有效果,我们调转旋转角度看  如果真的有厚度,到90度那么就可以看得到 */transform: scaleZ(4) rotateY(45deg);/* 写法2  最后一个参数是景深除以 最后一个参数,代表的就是离得近了*/transform: scale3d(1.5,1.5,4) rotateY(45deg);}</style>
</head>
<body><div class="outer"><div class="inner">3D缩放</div></div>

scaleZ

scaleZ我们看到好像没有效果,这个时候我们调整一下角度再看效果

  • transform: scaleZ(4) rotateY(45deg);

在这里插入图片描述

scale3d

最后一个参数是景深除以 最后一个参数,代表的就是离得近了

transform: scale3d(1.5,1.5,4) rotateY(45deg);

在这里插入图片描述

六、多重变换

我们同时使用多个属性同时实现变换,多重变换时,建议最后旋转。

方式1

transform-origin: left;

transform: rotateY(45deg);

在这里插入图片描述

方式2

y 轴线 右边 需要计算宽度

transform-origin: 200px 0px;

transform: rotateY(45deg);

在这里插入图片描述

方式3

/* 方式3 x 轴线 上方 */

​ transform-origin: 0px 0px;

​ transform: rotateX(45deg);

在这里插入图片描述

方式4

/* 方式4 x 轴线 下方 需要计算宽和高度 */

​ transform-origin: 202px 202px;

​ transform: rotateX(45deg);

在这里插入图片描述

方式5

位移 放大 旋转一起使用 旋转放到最后

/* 位移 放大 旋转一起使用 旋转放到最后 */

transform: translateZ(100PX) scaleZ(1.5) rotateY(45deg);

在这里插入图片描述

七、背部可见性

使用 backface-visibility 指定元素背面,在面向用户时是否可见,常用值如下:

  • visible : 指定元素背面可见,允许显示正面的镜像。—— 默认值
  • hidden : 指定元素背面不可见

** backface-visibility 需要加在发生 3D 变换元素的自身上。**

效果

在这里插入图片描述

代码

<style>.outer {width: 200px;height: 200px;border: 2px solid black;font-size: 30px;text-align: center;line-height: 200px;margin: 0 auto;margin-top: 100px;/* 父元素需要开启3d空间 */transform-style: preserve-3d;/* 设置景深   近大远小  必须要设置在父元素上面 */perspective: 500px;/* 修改透视点位置 默认是正中央 */perspective-origin: 102px 102px;}.inner {width: 200px;height: 200px;background-color: rgba(240, 35, 161, 0.9);/* 越过90度,背后不能看到 */backface-visibility: hidden;/* 旋转y轴 */transform: rotateY(40deg);}</style>
</head>
<body><div class="outer"><div class="inner">3D背部可见性</div></div>

相关文章:

  • OpenBMC:BmcWeb login认证
  • vscode插件系列-2、认识vscode
  • Golang 闭包学习
  • 数论知识啊
  • 电子处方模块开发避坑指南:从互联网医院系统源码实践出发
  • 办公人导航网站
  • JavaWeb:HtmlCss
  • Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
  • STM32F407 HAL库使用 DMA_Normal 模式实现 UART 循环发送(无需中断)
  • 【axios取消请求】如何在token过期后取消未响应的请求
  • CSS学习笔记8——表格
  • kubernetes》》k8s》》Heml
  • 开源模型应用落地-语音合成-MegaTTS3-零样本克隆与多语言生成的突破
  • 从 Java 到 Kotlin:在现有项目中迁移的最佳实践!
  • SpringMVC知识体系
  • Java语言的进化:JDK的未来版本
  • Convenience Variable in GDB
  • 缓存穿透、雪崩、击穿深度解析与解决方案
  • 驱动开发硬核特训 · Day 19:从字符设备出发,掌握 Linux 驱动的实战路径(含 gpio-leds 控制示例)
  • oralce 查询未提交事务和终止提交事务
  • “养老规划师”实则售卖保险,媒体:多部门须合力整治乱象
  • 专访倪军:人要有终身学习能力,一张文凭无法像以往支撑那么多年
  • 北京市平谷区政协原主席王春辉接受纪律审查和监察调查
  • 神二十明日发射,长二F火箭推进剂加注工作已完成
  • 今天是世界读书日,上海准备了哪些文化大餐?
  • 日媒:日本公明党党首将访华,并携带石破茂亲笔信