03-css3中的3D转换
一、CSS3-3D转换
1.3D
特点:近大远小,物体和面遮挡不可见
1.1三维坐标系
x 轴:水平向右 -- x 轴右边是正值,左边是负值
y 轴:垂直向下 -- y 轴下面是正值,上面是负值
z 轴:垂直屏幕 -- 往外边的是正值,往里面的是负值
2.3D移动tranlate3d
2.1 语法
transform:translate3d(x,y,z);
transform:translateZ(z);
2.2用法
.box3 {
/* 向里面移动100 */
transform: translateZ(-100px);
}
.box4 {
/* 向右移动50,向下移动50,向外移动50 */
/* translate3d */
transform: translate3d(50px, 50px, 50px);
}
.box5 {
/* 向里面移动100 */
/* translate3d里面的值不能省略,没有就写0 */
transform: translate3d(0, 0,-100px);
}
2.3总结
1.translate3d里面的3d要小写。
2.translate3d后面的值一定是三个值(x,y,z),不能省略,没有的就写0,且顺序不能颠倒。
3.3d的z值一般都是精准的像素值。
4.z值为正数就是往外面移动,为负数就是往里面移动
3.透视perspective
1.产生3d效果必须写透视。
2.透视就是视距,即人眼到屏幕的距离。
3.近大远小
4.透视prespective的单位是像素
5.透视写在被观察元素的父盒子上。
4.3D转换之移动—translatedZ
给父元素加perspective后,再给子元素添加translateZ会产生近大远小。
body {
/* 人眼距屏幕500px */
perspective: 500px;
}
.box1 {
/*变小*/
transform: translateZ(-100px);
}
.box2 {
/*变大*/
transform: translateZ(100px);
}
5.3D转换之旋转—rotate
transform: rotateX(45deg)-- 沿着 x 轴正方向旋转 45 度transform: rotateY(45deg)-- 沿着 y 轴正方向旋转 45 度transform: rotateZ(45deg)-- 沿着 z 轴正方向旋转 45 度transform: rotate3d(x, y, z, 45deg)-- 沿着自定义轴旋转 45 deg 为角度
5.1 rotateX
transform: rotateX(45deg) -- 沿着 x 轴正方向旋转 45 度,即上边向后转
transform: rotateX(-45deg) -- 沿着 x 轴反方向旋转 45 度,即上边向前转
5.2 rotateY
transform: rotateY(45deg) -- 沿着 y 轴正方向旋转 45 度,即右边向后转
transform: rotateY(-45deg) -- 沿着 y 轴反方向旋转 45 度,即左边向后转
5.3 rotateZ
transform: rotateZ(45deg) -- 沿着 z 轴正方向旋转 45 度,即顺时针
transform: rotateZ(-45deg) -- 沿着 z 轴反方向旋转 45 度,即逆时针
5.4 rotate3d
transform: rotate3d(x, y, z, 45deg) -- 沿着自定义轴旋转 45 deg 为角度
transform: rotate3d(1, 1, 0, 45deg) -- 沿着左上右下对角线旋转 45度
rotate()默认就是rotatez()。
6 3D呈现—transfrom-style
控制子元素是否开启三维立体环境 ,真3d。
6.1 用法
/* 给父元素加preserve-3d */
/* 默认是flat,不开启三维立体环境 */
/* transform-style: flat; */
transform-style: preserve-3d;
6.2总结
1.代码给父亲加,影响的是子元素
2.默认是flat,不开启,preserve-3d开启
3.作用是当父元素3d变换时,子元素任然保留之前的3d状态。
6.3 与视距的区别
preserve-3d是真3D,让子元素保留了3D空间。
perspective是伪3D,傻瓜式近大远小,只是起辅助视觉观察效果的作用。
7.案例
7.1翻转盒子案例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
body {
perspective: 400px;
}
.box {
position: relative;
width: 300px;
height: 300px;
margin: 100px auto;
border-radius: 50%;
transition: all .3s;
/* 要保留子盒子的三维立体环境 */
transform-style: preserve-3d;
}
.box:hover {
transform: rotateY(180deg);
}
.box::before,
.box::after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
line-height: 300px;
text-align: center;
border-radius: 50%;
font-size: 30px;
color: #fff;
}
.box::before {
content: "小艾同学";
background-color: #09f;
/* 提高层级,让他在前面 */
z-index: 1;
}
.box::after {
content: "加油鸭~";
background-color: #90f;
/* 先让盒子反过来,和before背靠背 */
transform: rotateY(180deg);
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
7.2 3D旋转导航栏
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
li {
float: left;
margin: 100px 5px 0;
list-style: none;
width: 120px;
height: 35px;
perspective: 500px;
}
.box {
position: relative;
width: 100%;
height: 100%;
transform-style: preserve-3d;
transition: all .4s;
}
/* 鼠标经过,向上翻转90度 */
.box:hover {
transform: rotateX(90deg);
}
.box::after,
.box::before {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
line-height: 35px;
text-align: center;
}
.box::before {
content: "小艾同学";
background-color: #f34;
/* 第二步,将这个盒子向外移动高度的一半 */
/* 原因是立方体旋转的轴是中心点,要让这两个盒子中心点一样 */
z-index: 1;
transform: translateZ(17.5px);
}
.box::after {
content: "要加油鸭~";
background-color: #09f;
/* 第一步:先让盒子向下移动高度的一半,再向前翻转90度 */
/* 位移写前面 */
transform: translateY(17.5px) rotateX(-90deg);
}
</style>
</head>
<body>
<ul>
<li>
<div class="box"></div>
</li>
<li>
<div class="box"></div>
</li>
<li>
<div class="box"></div>
</li>
<li>
<div class="box"></div>
</li>
<li>
<div class="box"></div>
</li>
<li>
<div class="box"></div>
</li>
<li>
<div class="box"></div>
</li>
</ul>
</body>
</html>
7.3 旋转相册
图片上传不了,可将案例中的图片任意替换
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
body {
/* 透视 */
perspective: 1000px;
}
section {
position: relative;
width: 300px;
height: 200px;
margin: 200px auto;
/* 使子元素保留三维立体空间 */
transform-style: preserve-3d;
/* 匀速循环播放10s */
animation: rotate 10s linear infinite;
}
@keyframes rotate {
0% {
transform: rotateY(0deg);
}
100% {
transform: rotateY(360deg);
}
}
section div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url(images/xi.gif) no-repeat;
background-size: 300px;
}
section div:first-child {
/* 向外300 */
transform: translateZ(300px);
}
section div:nth-child(2) {
/* 先沿着y轴右内转60度,在向外移动300 */
/* 此时要先写旋转再写移动 */
transform: rotateY(60deg) translateZ(300px);
}
section div:nth-child(3) {
/* 先沿着y轴右内转120度,在向外移动300 */
transform: rotateY(120deg) translateZ(300px);
}
section div:nth-child(4) {
/* 先沿着y轴右内转180度,在向外移动300 */
transform: rotateY(180deg) translateZ(300px);
}
section div:nth-child(5) {
/* 先沿着y轴右内转180度,在向外移动300 */
transform: rotateY(240deg) translateZ(300px);
}
section div:nth-child(6) {
/* 先沿着y轴右内转180度,在向外移动300 */
transform: rotateY(300deg) translateZ(300px);
}
</style>
</head>
<body>
<section>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</section>
</body>
</html>
7.4 立方体
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
position: relative;
width: 200px;
height: 200px;
margin: 100px auto;
transform-style: preserve-3d;
transition: all 5s;
}
div[class ^=content] {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-align: center;
line-height: 200px;
opacity: .5;
}
/* 前 */
.content1 {
/* 向外移动一半 */
transform: translateZ(100px);
background-color: #90f;
}
/* 后 */
.content2 {
/* 向里移动一半 */
transform: translateZ(-100px);
background-color: #99a;
}
/* 左 */
.content3 {
/* 先旋转90度,再向左移动一半 */
transform: rotateY(90deg) translateZ(-100px);
background-color: #09f;
}
/* 右 */
.content4 {
/* 先旋转90度,再向右移动一半 */
transform: rotateY(90deg) translateZ(100px);
background-color: #f34;
}
/* 上 */
.content5 {
/* 先沿x轴旋转180度,在向上移动一半 */
transform: rotateX(90deg) translateZ(-100px);
background-color: #f99;
}
/* 下 */
.content6 {
/* 先沿x轴旋转180度,在向下移动一半 */
transform: rotateX(90deg) translateZ(100px);
background-color: green;
}
.box:hover {
transform: rotate3d(1, 1, 1, 360deg);
}
</style>
</head>
<body>
<div class="box">
<div class="content1">前</div>
<div class="content2">后</div>
<div class="content3">左</div>
<div class="content4">右</div>
<div class="content5">上</div>
<div class="content6">下</div>
</div>
</body>
</html>
7.5 相册
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
body {
perspective: 1000px;
}
ul {
position: relative;
width: 300px;
height: 400px;
margin: 200px auto;
/* 旋转中线点在底部 */
transform-origin: bottom;
transition: transform .5s;
/* 开启3d状态 */
transform-style: preserve-3d;
}
ul:hover {
transform: rotateX(30deg);
}
ul li {
position: absolute;
top: 0;
left: 0;
list-style: none;
width: 100%;
height: 100%;
}
ul li img {
width: 100%;
height: 100%;
border: 5px solid #09f;
border-radius: 10px;
transform-origin: left;
/* 匀速过渡1s */
transition: transform linear 1s
}
ul:hover li:nth-child(5) img {
/* 给每一张图片设置延迟 */
transition-delay: .5s;
transform: rotateY(-180deg);
}
ul:hover li:nth-child(4) img {
transition-delay: 1s;
transform: rotateY(-150deg);
}
ul:hover li:nth-child(3) img {
transition-delay: 1.5s;
transform: rotateY(-120deg);
}
ul:hover li:nth-child(2) img {
transition-delay: 2s;
transform: rotateY(-50deg);
}
ul li:nth-child(1) img {
transform: rotateY(0deg);
}
</style>
</head>
<body>
<ul>
<li><img src="./images/01.jpg" alt=""></li>
<li><img src="./images/02.jpg" alt=""></li>
<li><img src="./images/03.jpg" alt=""></li>
<li><img src="./images/04.jpg" alt=""></li>
<li><img src="./images/05.jpg" alt=""></li>
</ul>
</body>
</html>
分享结束!有不足之处敬请批评指正!
03-css3中的3D转换的更多相关文章
- CSS3中2D/3D转换、过渡、动画
转换.过渡.动画 2D 转换 1.translate() 方法 通过 translate() 方法,元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数: 实例 d ...
- CSS3中的3D动画实现(钟摆、魔方)--实现代码
CSS3中的3D动画实现(钟摆.魔方) transition-property 过渡动画属性 all|[attr] transition-duration 过渡时间 transition-delay ...
- CSS3 2D、3D转换
2D转换方法:transform().rotate().scale().skew().matrix() 3D转换方法:rotateX().rotateY() 1.示例代码 <!DOCTYPE h ...
- CSS3中的2D转换
通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 转换是使元素改变形状.尺寸和位置的一种效果. 注:Internet Explorer 10.Firefox 以及 Opera 支 ...
- css3中做3D导航栏
看别人做的一个3D导航栏,觉得很厉害,这里先保存下来,后面有时间好好分析一下: <!doctype html> <html lang="en"> <h ...
- css3 中的2D转换
一.CSS3转换 通过转换实现对对元素进行旋转.缩放.移动.拉伸的效果:这种原来必须要通过JS或者图片处理才可以实现的效果,现在都可以通过CSS3来完成. 2D转换采用transform属性来实现效果 ...
- 前端笔记之HTML5&CSS3(下)2D/3D转换&animate动画
一.2D转换(transform) CSS3中的transform转换和PS中的变换是一样的,分别有:缩放.位移.斜切.旋转 1.1 transform:scale()缩放 transform:sca ...
- CSS3 3D转换——rotateX(),rotateY(),rotateZ()
CSS3 允许使用 3D 转换来对元素进行格式化. ㈠浏览器支持 Internet Explorer 10 和 Firefox 支持 3D 转换. Chrome 和 Safari 需要前缀 -webk ...
- CSS3带你实现3D转换效果
前言 在css3中允许使用3D转换来对元素进行格式化,在原本只是2D转化的平面中引入了Z轴.在这之前我们讲解了css3中的2D转换,也就是二维空间变换,本篇的3D转换就是基于原来的2D转换而来,与2D ...
随机推荐
- Java基础 - 数据类型和运算符
Java 语言支持的类型分为两类:基本数据类型(Primitive Type)和引用类型(Reference Type). 目录 基本数据类型 数值类型 整数类型 byte short int lon ...
- python基础知识6——函数
函数:自定义函数:函数的参数:不带参数,普通参数,默认参数,动态参数:返回值return:函数作用域:内置函数高阶函数:map,reduce,filter,sorted:lambda表达式:文件操作: ...
- Github搜索技巧整理
Github官方网址:https://github.com/ 一.详细官方文档:https://help.github.com/en/github/searching-for-information- ...
- jwt token认证
目录 1.drf-jwt手动签发与校验 2.drf小组件:过滤.筛选.排序.分页 => 针对与群查接口 jwt_token源码分析(入口) 签发token源码分析 校验token源码分析 url ...
- django复习 以及源码
django请求生命周期 在浏览器上输入网址会发生什么事?(地址会朝我对应的ip地址发送get请求,get请求遵循http协议)先进入实现了wsgi协议的web服务器---->进入django- ...
- Java并发编程之set集合的线程安全类你知道吗
Java并发编程之-set集合的线程安全类 Java中set集合怎么保证线程安全,这种方式你知道吗? 在Java中set集合是 本篇是<凯哥(凯哥Java:kagejava)并发编程学习> ...
- TPYBoard v202开发板通过I2C协议驱动oled
最近无聊的时候研究了一下TPYBoard v202开发板,发现网上TPYBoard开发驱动oled的这块资料比较少,本人测试成功后给大家分享一下经验 下面通过代码讲解一下 1.首先需要导包, 在网上下 ...
- 关于js中iframe 中 location.href的用法
关于js中"window.location.href"."location.href"."parent.location.href".&qu ...
- PyTorch专栏开篇
目前研究人员正在使用的深度学习框架不尽相同,有 TensorFlow .PyTorch.Keras等.这些深度学习框架被应用于计算机视觉.语音识别.自然语言处理与生物信息学等领域,并获取了极好的效果. ...
- Rust入坑指南:居安思危
任何事情都是相对的,就像Rust给我们的印象一直是安全.快速,但实际上,完全的安全是不可能实现的.因此,Rust中也是会有不安全的代码的. 严格来讲,Rust语言可以分为Safe Rust和Unsaf ...