【Transform3D】转换详解(看完就会)

news/2024/5/9 19:53:58/文章来源:https://blog.csdn.net/m0_62360527/article/details/127271718

文章内包含个人理解,如有错误请指出。 

  往期文章

【css动画】移动的小车

【CSS3】 float浮动与position定位常见问题(个人笔记)

如何完成响应式布局,有几种方法?看这个就够了

详解 CSS3中最好用的布局方式——flex弹性布局(看完就会)

[前端CSS高频面试题]如何画0.5px的边框线(详解)
CSS3基础属性大全
CSS3动画属性 animation详解(看完就会)
CSS3 transform 2D转换之移动 旋转 缩放(详细讲解看完就会)
CSS3 Z—Index 详解
CSS3 positon定位详解(通俗易懂)

目录

前言

教学

        坐标轴

        移动

        旋转

        透视

        打开3D空间

总结 

案例

        3D转换

        3D翻转


前言

3D可以帮助我们实现更好的页面动画效果,我们生活的环境是 3D 的,照片就是 3D 物体在 2D 平面呈现的例子。

有什么特点

  • 近大远小
  • 物体后面遮挡不可见

当我们在网页上构建 3D 效果的时候参考这些特点就能产出 3D 效果。

教学

        坐标轴

                

                三维坐标系其实就是指立体空间,立体空间是由3个轴共同组成的。

                在x,y轴的基础上,又增加了一条从外向内的Z轴, 

                在这里插入图片描述 

        移动

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

     注意重点:坐标轴原点为图形的左上角

<style>
#div1
{position: relative;height: 200px;width: 200px;margin: 100px;padding:10px;border: 1px solid black;}#div2
{padding:50px;position: absolute;border: 1px solid black;background-color: red;transform: translateX(100px);z-index: 1;}
#div3
{padding:50px;position: absolute;border: 1px solid black;background-color: red;}
</style>
</head><body><div id="div1"><div id="div2">HELLO</div><div id="div3">HELLO</div>
</div></body>

 

左边的是原位置的,右边的是移动100px的。

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

  • transform:translateX(100px):仅仅是在 X 轴上移动  (x轴右边)
  • transform:translateY(100px):仅仅是在 Y 轴上移动    (Y轴下边)
  • transform:translateZ(100px):仅仅是在 Z 轴上移动(注意:translateZ 一般用 px 单位,Z轴向外。)
  • transform:translate3d(x, y, z):其中 x、y、z 分别指要移动的轴的方向的距离

因为 z 轴是垂直屏幕,由里指向外面,所以默认是看不到元素在 z 轴的方向上移动(要借助透视)。

        旋转

        在这里插入图片描述

<style>
#div1
{position: relative;height: 200px;width: 200px;margin: 100px;padding:10px;border: 1px solid black;}#div2
{padding:50px;position: absolute;border: 1px solid black;background-color: green;transform: rotateX(100deg);z-index: 1;}
#div3
{padding:50px;position: absolute;border: 1px solid black;background-color: red;}
</style>
</head><body><div id="div1"><div id="div2">HELLO</div><div id="div3">HELLO</div>
</div></body>

  

 以x轴旋转100°,就是向里旋转100°,看着变窄了是因为没有使用透视,绕Z轴旋转就跟2d旋转一样。

transform:rotate3d(0,1,0,45deg)  绕y轴旋转45°,前三位分别是 xyz  ,写1就是选择某个坐标轴,  第四位写度数。

矢量旋转:
transform:rotate3d(1,1,0,45deg) 第四域的对角线旋转45°。

注意重点:坐标轴原点为图形的中心点,实际上是由左上角的原点,通过transform-origin:50% 50% ;移动到了图形的中心点,transform-origin的默认值就是 50% 505 0;我们可以通过transform-origin属性来改变原点的位置,  注意中的注意就是  这个属性只是改变旋转的中心点,translate移动的的中心点不变,依然是左上角的。

        透视

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

  • 如果想要在网页产生 3D 效果需要透视(理解成 3D 物体投影在 2D 平面内)
  • 模拟人类的视觉位置,可认为安排一只眼睛去看
  • 透视我们也称为视距:视距就是人的眼睛到屏幕的距离
  • 距离视觉点越近的,在电脑平面成像越大,越远成像越小
  • 透视的单位是像素

我们给之前的3dX旋转加上透视效果, 

               

<style>
#div1
{position: relative;height: 200px;width: 200px;margin: 100px;padding:10px;border: 1px solid black;perspective: 500px;}#div2
{padding:50px;position: absolute;border: 1px solid black;background-color: green;transform: rotateX(100deg);z-index: 1;}
#div3
{padding:50px;position: absolute;border: 1px solid black;background-color: red;}
</style>
</head><body><div id="div1"><div id="div2">HELLO</div><div id="div3">HELLO</div>
</div></body>

这样在平面上通过透视产生一种长短大小不一的3d效果。

perspective就相当于人眼到图像的距离,就相当于你看某个东西,你距离写的越大,你就站的越远,物体就越小,站的越近,距离写的越小,物体越大。

页面上显示的就相当于是你看到的物体的投影。

perspective尽可能写在直接父级上,写在大于父亲级的祖元素上有可能会失灵,但如果搭配transform-style: preserve-3d,两个一起用,又会起作用。

perspective只是实现了2d里的3d视觉显示,并不是一个3d空间,就比如前面的div向里倾斜,如果是3d的空间的话 那么会穿透后面的红色盒子,如何达到真正的3d效果呢   就是接下来要说的的属性。

        打开3D空间

        transform-style: preserve-3d;  

        看例子

  <style>#div1 {position: relative;height: 200px;width: 200px;margin: 100px;padding: 10px;border: 1px solid black;perspective: 300px;transform-style: preserve-3d;transition: all 3s;}#div1:hover {transform: rotateY(-120deg);}#div2 {padding: 50px;position: absolute;border: 1px solid black;background-color: green;transform: rotateX(60deg);z-index: 1;}#div3 {padding: 50px;position: absolute;border: 1px solid black;background-color: red;}</style>
</head><body><div id="div1"><div id="div2">HELLO</div><div id="div3">HELLO</div></div></body>

        

下面是给box盒子加上透视的效果


       

总结 

1.移动的中心点跟旋转中心点是分开的,transform-origin只是修改旋转的原点,移动位置不变依然是左上角。

2.3d旋转是坐标轴是跟随移动的,所以建议当完成某种效果时,先移动后旋转,先旋转改变坐标轴,移动的方向就会有差别。

3.想要完成一个3D效果 需要用到perspective: 500px;和 transform-style: preserve-3d;两个属性才能完全达到3D效果,注意perspective属性放在更高的父级上的效果区别,建议用在直接父级上。

案例

        3D转换

   <style>* {margin: 0;padding: 0;}ul {margin: 100px;}ul li {width: 120px;height: 35px;list-style: none;float: left;margin-left: 10px;text-align: center;color: white;}.box {position: relative;width: 100%;height: 100%;perspective: 500px;transform-style: preserve-3d;transition: all 1s;line-height: 35px;}.box:hover {transform: rotateX(90deg);}.front,.bottom {position: absolute;left: 0;top: 0;right: 0;bottom: 0;}.front {background-color: pink;transform: translateZ(17.5px);z-index: 1;}.bottom {background-color: purple;transform: translateY(17.5px) rotateX(-90deg);}</style>
</head><body><ul><li><div class="box"><div class="front">黑马程序员</div><div class="bottom">pink老师</div></div></li><li><div class="box"><div class="front">黑马程序员</div><div class="bottom">pink老师</div></div></li><li><div class="box"><div class="front">黑马程序员</div><div class="bottom">pink老师</div></div></li><li><div class="box"><div class="front">黑马程序员</div><div class="bottom">pink老师</div></div></li></ul>
</body>

        3D翻转

 <style>.box {width: 300px;height: 300px;margin: 100px auto;position: relative;transition: all 3s;transform-style: preserve-3d;}.box:hover {transform: rotateY(180deg);}.front {backface-visibility: hidden;}.front,.back {position: absolute;left: 0;right: 0;height: 100%;border-radius: 50%;color: #fff;text-align: center;font-size: 30px;line-height: 300px;}.front {background-color: pink;z-index: 1;}.back {background-color: purple;transform: rotate3d(0, 1, 0, 180deg);}</style>
</head><body><div class="box"><div class="front">黑马程序员</div><div class="back">pink老师</div></div>
</body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_589198.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】准点跑路人必备小程序~ 不信你用不到

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 有时候下班~忙着跑路&#xff0c;忘记关电脑&#xff0c;逮到了会被老板扣工资&#xff01;&#xff01;怎么办&#xff1f; python带你制做一个小程序&#xff0c;到点自动关机~ 再也不怕忘关电…

APS计划排产软件在食品饮料行业的应用

近年来&#xff0c;我国饮料行业飞速发展&#xff0c;已经成长为一个庞大、成熟的市场&#xff0c;形成了原料供应—制造—流通完整的产业链条和工业体系。 据报道&#xff0c;2022年上半年&#xff0c;国内饮料行业销量同比下滑6.8%&#xff0c;销售额同比下滑5.5%。消费行业整…

CUDA程序调试的一些经验

目录 1. 存储分配检查 2. 变量名检查 3. 核函数输出检查 4. 核函数局部存储空间回收 最近在做一个点云配准的项目&#xff0c;重新把之前就开始玩的CUDA重新拾起来。本来想着稍微改改代码就能够愉快的跑起来&#xff0c;结果改Bug改的我相当上头。结合我之前的帖子和我最近的一…

使用油猴下载文库

简介 工作中经常需要下载资料&#xff0c;大多数情况下&#xff0c;我们搜索到的资料会在某度文库中&#xff0c;激动的准备存在本地方便以后观摩&#xff0c;又因为页面下方的VIP下载&#xff0c;露出尴尬的笑容。这里介绍两种方式&#xff0c;一种省钱省事&#xff0c;一种免…

matlab之Signal Labeled APP

APP工作流程 &#xff08;1&#xff09;导入数据进信号标注器 &#xff08;2&#xff09;创建或导入信号标注定义 &#xff08;3&#xff09;交互式或自动标记信号 &#xff08;4&#xff09;自定义标注视图 &#xff08;5&#xff09;仪表板 &#xff08;6&#xff09;导出标记…

“箭”指智能家居,卫浴龙头企业箭牌家居即将登陆A股

智哪儿获悉&#xff0c;2022年10月13日&#xff0c;国内卫浴龙头企业箭牌家居集团股份有限公司&#xff08;以下简称箭牌家居&#xff0c;001322.SZ&#xff09;刊登首次公开发行股份发行公告&#xff0c;计划近期在深市主板上市。据披露&#xff0c;箭牌家居本次共计发行新股9…

【Google三驾马车系列】GFS原理总结

这里写自定义目录标题GFS基本框架容错机制Master 的容错机制 &#xff1a;操作日志 Checkpoint ShadowMasterChunkServer的容错机制&#xff1a;复制多个副本 checksum一致性问题元数据的一致性Chunk的强一致性其它重要的技术点总结如何避免单一master的性能瓶颈垃圾延迟删除…

Keithley吉时利2182A/Keysight是德34420A纳伏表测量软件-纳伏表软件

1、软件概述 纳伏表程控软件用于需要更高精度的电压测量和温度测量的应用&#xff0c;操作简便、绘制测量波形图直观。 2、软件功能 ◆纳伏表程控软件可以满足GPIB、RS-232两种连接方式。 ◆纳伏表程控软件可以满足CH1、CH2两通道选择。 ◆纳伏表程控软件可以满足多量程及分辨率…

(附源码)计算机毕业设计ssm河南美丽乡村旅游信息网

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

支付模块-微信支付

目录 接口实现 第一步&#xff1a;当点击立即购买生成订单 第二步&#xff1a;根据订单id查询订单信息 第三步&#xff1a;生成微信支付的二维码 第四步&#xff1a;查询订单支付状态 前端实现 ​编辑 1.点击支付 2.订单详情页 接口实现 像这种微服务B2C模式的&#…

【牛客刷题】每日一练——最小K个数

✨hello&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f345;&#x1f345;系列专栏:【牛客刷题】 ✈️✈️本篇内容: 最小K个数&#xff01; ⛵⛵作者简介&#xff1a;一名双非本科大三在读的科班Java编程小白&#xff0c;道阻且长&#xff0c;你我同…

《漂浮城堡历险记》的云端之旅

《漂浮城堡历险记》是 The Sandbox 游戏制作基金支持的项目之一。让我们告诉你更多关于这个 The Sandbox 元宇宙独有的、令人上瘾的奇幻游戏的信息吧。它已在 The Sandbox Alpha 第 3 季中上线了&#xff01; 关于体验 在《漂浮城堡历险记》这个冒险战斗游戏中&#xff0c;玩家…

基于深度学习的机载激光扫描森林单株茎的检测、分割与模型拟合

Abstract 精确测量树木的结构特征&#xff0c;如高度、直径、宽度和锥度&#xff0c;是森林资源调查的重要组成部分。目前&#xff0c;地面和空中激光雷达都被用来产生点云数据&#xff0c;通过这些数据可以确定清单指标。陆地/地面扫描通常提供每平方米数千个点的点云分辨率&…

(附源码)计算机毕业设计ssm核酸结果查询系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【 java 多线程】同步锁 (Lock) 解决线程的安全问题

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

计算机网络课程设计——中小型网络工程设计

文件地址:https://github.com/Recursiondzl/Computer-Network 摘 要&#xff1a;本次计算机网络实践&#xff0c;完成了中小型网络工程设计与实现对计算机网络知识进行了系统的复习&#xff0c;实践能力获得了巨大的提升。 中小型网络工程设计与实现中&#xff0c;使用路由器…

DDD初步简单理解

概述 最近有一个项目要使用DDD模式来写&#xff0c;大致整理一下笔记。 问题&#xff1a;为什么要使用DDD&#xff1f;大概要怎么使用DDD&#xff1f; 目录 概述 MVC和DDD比较 实例介绍 简洁代码逻辑示例 总结 MVC和DDD比较 MVC&#xff08;module&#xff0c;view&#xff0c…

最适合跑步用的耳机有哪些、精选五款最优秀的跑步耳机推荐

越来越多的人选择在运动的时候佩戴蓝牙耳机&#xff0c;身为健身教练&#xff0c;也有很多人会让我们推荐蓝牙耳机&#xff0c;那么现在到底市面上哪些机型是最适合跑步的时候用的呢&#xff1f;我趁着最近有空搜集了一些资料跟我使用过的经验&#xff0c;给大家整理了一份最值…

揭秘EVM Opcodes

1. 引言 本文主要源自Macro团队的Gilbert在ETHNewYork 2022分享 Demystifying EVM Opcodes&#xff0c;同时结合evm.codes来理解。 学习EVM Opcodes&#xff0c;可成为更好的Solidity工程师。 更好的Solidity工程师&#xff0c;意味着&#xff1a; 1&#xff09;理解Solidity…

【新手向】Rock5B官方Debian系统设置中文环境(简单设置)和远程桌面连接

一、环境与说明 Rock5B的系统&#xff1a;官方Debian11&#xff08;2022-10-01版本&#xff09; 前面的两篇文章都是在2022-09-19版本镜像中操作的&#xff0c;2022-10-01版本内置了中文字体&#xff0c;不要自己下载了。目前Rock5B的硬件版本是v1.42&#xff0c;大概在23年初…