css3动画&2D|3D

一、css3的transform属性

  • 2d坐标轴(图示)

  • x轴:水平,向右为正,向左为负

  • y轴:垂直,向下为正,向上为负

2d转换的方法

1、2D变形:平移、旋转、缩放、倾斜

1) transform: translate()平移

  • transform: translate(x,y) 沿着x轴和y轴移动

  • transform: translateX(x) 沿着x轴移动

  • transform: translateY(y) 沿着y轴移动

取值:

  • px

  • 百分比(强调相对于元素本身计算)

  • 水平,向右为正,向左为负

  • 垂直,向下为正,向上为负

  • x与y之间用逗号隔开

水平向右为正值,垂直方向向下正值

/* 沿着水平方向位移 */
当为一个值的时候,只沿着水平方向位移
transform: translate(50px);注意:元素位移之后,原来的位置还在

2) transform: rotate(ndeg) 旋转

  • 语法

  • transform:rotate(deg);沿着中心点旋转,默认值

  • transform: rotateX(deg);沿着X轴旋转

  • transform: rotateY(deg);沿着Y轴旋转

单位:deg ​ 当角度值为正数时,元素沿着顺时针方向旋转 ​ 当角度值为负数时,元素沿着逆时针方向旋转

创建网页3d空间.wrap {perspective: 800px;}
​.wrap div {width: 100px;height: 100px;background-color: pink;margin: 30px;text-align: center;line-height: 100px;font-size: 30px;
​/* 过渡动画 */transition: 2s;
​
​}
​.box1:hover {background-color: blue;transform: rotate(45deg);}
​.box2:hover {background-color: tomato;transform: rotate(-45deg);}
​.box3:hover {transform: rotateX(60deg);}
​.box4:hover {transform: rotateY(60deg);}
​.box5:hover {transform: rotateY(-60deg);}
​
​.box6:hover {transform: rotateX(120deg);}
​.box7:hover {transform: rotateX(-120deg);}
​
​<div class="wrap"><div class="box1">1</div><div class="box2">2</div><div class="box3">3</div><div class="box4">4</div><div class="box5">5</div><div class="box6">6</div><div class="box7">7</div></div>

3)transform: scale() 缩放

  • transform: scale(x,y) 沿着x轴和y轴缩放

  • transform: scaleX(x) 沿着x轴缩放

  • transform: scaleY(y) 沿着y轴缩放

取值范围0~1之间表示缩小,1表示正常大小,1以上表示放大,默认值为1 取值为负值表示先翻转后缩放

为一个值的时候,沿着水平方向和垂直方向等比例缩放

元素缩放为0 后,原来的位置还在

x与y之间用逗号隔开

transform: scale(1.5);/* 沿着水平方向和垂直方向都放大1.5倍,等比例缩放 */
transform: scale(-1.5);/* 先翻转,然后 沿着水平方向和垂直方向都放大1.5倍 */

4)transform: skew() 倾斜

  • transform: skew(x,y) 沿着x轴和y轴倾斜

  • transform: skewX(x) 沿着x轴倾斜

  • transform: skewY(y) 沿着y轴倾斜

单位deg(角度) 正值,向左上角和右下角倾斜;负值,向右上角和左下角倾斜

为一个值的时候,只沿着水平方向倾斜

  /* 为一个值的时候,只沿着水平方向位移 */.box1:hover {transform: skew(45deg);}/* skew(30deg,45deg) 围绕 X 轴把元素翻转 30 度,围绕 Y 轴翻转 45 度 */.box2:hover {background-color: tomato;transform: skew(30deg, 45deg);}
​.box3:hover {transform: skewX(-45deg);}
​.box4:hover {transform: skewY(45deg);
​}.box5:hover {transform: skewY(-45deg);}

5)transform-origin属性 设置元素的基点位置

  • transform-origin: 水平方向 垂直方向;

  • 设置元素的基点位置,设置围绕哪个点进行变化

  • 取值

    百分比(参照自身计算)

px

关键字

水平:left center right ​ 垂直:top center bottom

  • 说明: 两个空格隔开的值,分别表示x,y轴的原点 一个值时,另一个值默认center

  • 可为负数

必须与transform属性配合使用

位移不能用

<!DOCTYPE html>
<html lang="en">
​
<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>.wrap {width: 400px;height: 400px;background-color: aquamarine;margin: 50px auto;/* overflow: hidden; */}
​.wrap .box {width: 200px;height: 200px;background-color: pink;/* margin: 50px auto; */transition: 2s;
​
​transform-origin: 200px 100px;transform-origin: -200px 100px;
​transform-origin: 100% 80%;transform-origin: -100% 80%;
​transform-origin: 70% 150%;
​transform-origin: left top;
​
​
​}
​.wrap:hover .box {transform: rotate(180deg);
​
​}</style>
</head>
​
<body>
​<div class="wrap"><div class="box">box</div></div>
​
</body>
​
</html>

5)旋转,位移,缩放,倾斜的复合写法

属性之间用空格隔开
​.wrap:hover .box1 {transform: rotate(135deg);transform: translate(50px);transform: scale(1.5);transform: translate(100px) rotate(120deg) scale(1.5);}
  • 总结:

名称 语法 取值 单位 其他
位移 transform:translate(); 一个值(沿着水平方向位移),两个值 像素px transform: translateX(); transform: translateY()
旋转 transform: rotate(); 一个值 deg角度
缩放 transform: scale(); 一个值(等比例缩放)、两个值 没有单位 transform: scaleX(); transform: scaleY()
倾斜 transform: skew(); 一个值(沿着水平方向倾斜)、两个值 deg角度 transform: skewX(); transform: skewY();

2、3D变形:平移、旋转、缩放

什么是3d转换

定义元素在三维空间移动、缩放、旋转

3d坐标轴(图示)

###

3D立体空间的3根轴线

  • x轴:水平,向右为正,向左为负

  • y轴:垂直,向下为正,向上为负

  • z轴:垂直于屏幕,向外为正,向内为负

1)3D必备属性

  • transform-style: preserve-3d; 创建3d空间

  • 什么时候搭建3d舞台?

    • 父元素有3D变形,子元素也有3D变形

  • perspective属性:景深(透视),属性值为透视点到元素的距离,近大远小;也可以让网页产生3D效果,单位像素

  • 一般取值:800px-1000px
    perspective:800px 就是人离屏幕800px 的地方观看这个div元素。
    当translateZ的大小临近与800px时图片离我们越来越近了
    当它大于800px时,这个图片就消失了
    ​
    反之当translateZ为负值时,我们可以看到图片变小了,也就是图片离人越来越远了。
    ​
    ​透视点到元素的距离1000px: 我到乔乔的距离 1000px
    ​300px:我往前走到了300px位置看乔乔
    ​600px:我往前走到了600px位置看乔乔​-300px:我往后走到了-300px位置看乔乔,-1300-600px:我往后走到了-600px位置看乔乔,-1600
    ​
    ​1000px:走到了乔乔面前看>1000px:走过了乔乔,看不见了
  • preserve-3d, 如果搭配overflow: hidden/scroll/auto使用,相当于2D效果

transform-style属性和perspective属性放在父元素中,有时候perspective属性放在body中

2) 位移

  • transform: translateZ(z); 沿着z轴方向位移

  • transform: translate3d(x,y,z) 沿着x、y、z轴方向位移

    z指的是 z 轴的向量位移长度。当其值为负值时,元素在 Z 轴越移越远,导致元素变小。反之当值为正值时,

    其在 Z 轴越移越近,导致元素变得较大。

<!DOCTYPE html>
<html lang="en">
​
<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>.father {width: 400px;height: 400px;border: 2px solid tomato;margin: 100px auto;/* 景深效果,创建网页3d效果 */perspective: 1000px;}
​.father .son {width: 200px;height: 200px;background-color: tomato;margin: 100px auto;
​}
​.father:hover .son {transform: translateZ(200px);transform: translateZ(-200px);transform: translateX(100px) translateY(50px) translateZ(200px);transform: translate3d(100px, 50px, 200px);
​}</style>
</head>
​
<body><div class="father"><div class="son"></div></div>
</body>
​
</html>

3) 旋转

  • transform: rotateX(a); 沿着x轴方向旋转

  • a 指的是一个旋转角度值,如果为正值,元素围绕X轴顺时针旋转;反之,如果为负值,元素围绕X轴逆时针旋转。

  • transform: rotateY(a); 沿着y轴方向旋转

  • a 指的是一个旋转角度值,如果为正值,元素围绕Y轴顺时针旋转;反之,如果为负值,元素围绕Y轴逆时针旋转。

  • transform: rotateZ(a); 沿着Z轴方向旋转

  • a 指的是一个旋转角度值,如果为正值,元素围绕 Z 轴顺时针旋转;反之,如果为负值,元素围绕 Z 轴逆时针

    旋转。

  • transform: rotate3d(x,y,z,angle);

  • 参数:

    x:是一个 0 到1之间的数值,主要用来描述元素围绕 X 轴旋转的矢量值。

    y:是一个 0 到1之间的数值,主要用来描述元素围绕 Y 轴旋转的矢量值。

    z:是一个 0 到1之间的数值,主要用来描述元素围绕 Z 轴旋转的矢量值。

    angle:一个角度值,指定在 3D 空间旋转角度,正值顺时针旋转,反之元素逆时。

1、两个值为零,定义X,Y,Z轴旋转
rotate3d(1,0,0,angle)   x轴旋转
rotate3d(0,1,0,angle)   y轴旋转
rotate3d(0,0,1,angle)   z轴旋
​
/* 沿着x轴方向旋转 */
transform: rotateX(-45deg);
transform: rotate3d(1,0,0,-45deg);
​
/* 沿着y轴方向旋转 */
transform: rotateY(-45deg);
transform: rotate3d(0,1,0,-45deg);
​
/* 沿着z轴方向旋转 */
transform: rotateZ(-45deg);
transform: rotate3d(0,0,1,-45deg);
​
​
2、两个值不为零,定义多轴旋转
rotate3d(1,0.5,0,30deg)
​
x 1*30   30deg
​
y 0.5*30  15deg
​
z 0*0     0deg
​
.box5:hover img {/* z */transform: rotate3d(.5, 1, 0, 60deg);/* x:0.5*60=30degy:1*60=60degz:0*60=0deg
​*/
}
3、三个值不为零,定义多轴旋转
​
.box6:hover img {/* z */transform: rotate3d(.5, 1, 1, 60deg);/* x:0.5*60=30degy:1*60=60degz:1*60=60deg
​*/
}

4)缩放

  • transform: scaleZ() 沿着z轴方向缩放 (厚度)

  • transform: scale3d() 沿着x、y、z轴方向缩放

  • 取值

    • 默认值为1

    • 使用0~1之间的值缩小元素 使用超过1的值放大元素

  • 注意:scaleZ单独使用看不到效果,需要配合其他变换属性一起使用

transform: scaleZ(3);
transform: scale3d(2, 3, 3);

3D缩放Z轴演示

<!doctype html>
<html>
​
<head><meta charset="utf-8"><title>无标题文档</title>
​<style>.wrap {width: 1000px;height: 600px;border: 1px solid red;perspective: 500px;perspective-origin: right top;}
​.box {position: absolute;left: 50%;margin-left: -100px;top: 50%;margin-top: -100px;width: 200px;height: 200px;transform-style: preserve-3d;/* transform: scale3d(1.5, 1, 1.5); */transform: scaleZ(1.5);}
​.box div {position: absolute;left: 0;top: 0;width: 200px;height: 200px;}
​.box div:nth-child(1) {background: red;transform: rotateX(90deg) translateZ(100px);}
​.box div:nth-child(2) {background: yellow;transform: rotateX(90deg) translateZ(-100px);}
​.box div:nth-child(3) {background: green;transform: rotateY(90deg) translateZ(100px);}
​.box div:nth-child(4) {background: blue;transform: rotateY(90deg) translateZ(-100px);}
​.box div:nth-child(5) {background: pink;transform: translateZ(100px);}
​.box div:nth-child(6) {background: orange;transform: translateZ(-100px);}</style>
​
</head>
​
<body><div class="wrap"><div class="box"><div class="bg1"></div><div class="bg2"></div><div class="bg3"></div><div class="bg4"></div><div class="bg5"></div><div class="bg6"></div></div></div>
</body>
​
</html>

二、帧动画

1、定义关键帧

@keyframes 动画名称(英文) {0% {/* 动画的开始 */}
​25% {/* 在25%的时候进行的一个动画 */}
​50% {/* 在50%的时候进行的一个动画 */}
​100% {/* 动画结束 */}
​}
​from,to表示开始、结束状态,也可以使用0%,100%定义
​@keyframes 动画名称(英文) {from {/* 动画开始 */}
​to {/* 动画结束 */}}

2、引用帧动画

 animation: name duration timing-function delay iteration-count direction fill-mode;animation: 动画名称 动画执行时间 动画速度曲线 延迟时间 动画播放次数 动画运动方向 动画结束之后显示的状态
​注意:动画名称和动画执行时间必须写,否则动画无效
​1.animation-name 动画名称 是定义关键帧是所定义的动画名称
​2.animation-duration 动画的执行时间  单位:s/ms
​3.animation-timing-function 规定动画运动的速度曲线1.linear 相同的速度从开始到结束,也就是匀速2.ease  默认值 慢速度开始--速度变快--慢速度结束3.ease-in 慢速度开始的过渡效果,也就是以低速度开始4.ease-out 慢速度结束的过渡效果,也就是以低速结束5.ease-in-out 以慢速度开始和结束的过渡效果
​4.animation-delay 定义动画何时开始 单位:s/ms取值- 以秒或毫秒计- 默认值是 0- 允许负值,(-2s 使动画马上开始,但跳过 2 秒进入动画)
​5.animation-iteration-count 动画的执行次数1.n 默认执行动画次数1次2.infinite 无限次播放动画
​6.animation-direction 定义是否应该轮流反向播放动画1.normal 默认值,正常播放2.alternate 动画轮流反向播放3.alternate-reverse 从第一次就反向运动
​7.animation-fill-mode d动画结束之后的显示状态1.both:动画开始或结束的状态2.fowards 动画结束时状态3.backwards 动画开始的状态8.animation-play-state: paused;动画播放方式   暂停取值:running:运动 paused: 暂停
​
​

三、animate.css动画插件

https://animate.style/
https://www.dowebok.com/demo/2014/98/
css3动画库,预设了抖动(shake)、闪烁(flash)、弹跳(bounce)、旋转(rotateIn|rotateOut)、翻转(flip)、淡入淡出(fadeIn|fadeOut)等动画效果。

使用方法:

  • 1、第一步. 引入animate.css文件

<link rel="stylesheet" href="css/animate.min.css">
  • 第二步. 给指定的元素加上指定的动画样式名

    animation-name定义动画的效果名称
    animation-duration定义动画持续的时间
    animation-delay 定义动画延迟的时间
    animation-iteration-count: 定义动画重复的次数
    animation-timing-function 定义动画的速度
    ​
    animation:动画效果 执行时间 延迟时间 执行次数 速度曲线;
    animation: bounce 1s 2s infinite linear;
    ​
    选择自己想要的动画效果,然后复制粘贴
    第一个animated是必须添加的样式名,第二个是指定的动画样式名。
    <div class="animated fadeInUp"></div>
    ​
    2、加统一的类名animated,然后选择自己想要的动画效果,然后复制粘贴
    //1.直接加自己选择的类名
    ​
    <h3 class="animated tada">tada</h3>
    <p class="animated rubberBand">rubberBand</p>
    <div class="animated shake">shake</div>
    ​
    改变其原有属性(覆盖)
    .shake {
    animation-delay: .5s;
    animation-iteration-count: infinite;
    animation-timing-function: linear;
    }
    ​
    <p id="box1">内容内容1</p>

四、css3中过渡和动画的区别?

  • 区别:语法、触发、执行次数、复杂度

  • 相同点 : 都是随着时间改变元素的属性值。

  • 不同点:

    1、过渡动画是需要触发条件的(hover事件或click事件等),只能完成简单的动画

    2、帧动画不需要任何的触发条件,可以完成复杂轨迹的动画

前端 css3动画2D|3D相关推荐

  1. CSS3动画(2D/3D转换、过渡、动画和多列)

    [index.html] <!DOCTYPE html> <html lang="en"> <head><meta charset=&qu ...

  2. CSS3动画之3D动画

    所有东西一跟3D扯上关系,复杂指数都是噌噌噌往上走.不过也正常,毕竟多了一个维度,要有三维应有的尊严. 3D Transforms要怎么写?能写翻牌效果吗?能写翻书效果吗?能写出立体书的效果吗?点进来 ...

  3. CSS3 2 2D 3D转换

    CSS3 2 2D 3D转换 通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 转换是使元素改变形状.尺寸和位置的一种效果,使用 2D或 3D 转换来转换元素. 1浏览器支持 I ...

  4. CSS3 动画 2D基础知识

    css3过渡动画--transition属性 - 语法 transition: transition-proterty transition-duration transition-timing-fu ...

  5. CSS3动画及3D初识

    CSS3中动画: animation:动画(通过在animation属性中设置关键帧属性值,用来实现一个更为复杂的动画效果.)(连写顺序为:animation: animation-name anim ...

  6. CSS3动画和3D动画

    动画属性 :animation 1.animation-name (必要的)检索或设置对象所应用的动画名,必须与规则@keyframes配合使用, 定义关键帧: @keyframes mymove{} ...

  7. Unity 程序动画 2D,3D程序蜘蛛脚,人物程序性动画

    强大的程序腿效果 程序脚完全使用算法完成,没有复杂的物理运算 3D蜘蛛脚算法 public class SpiderProceduralAnimation : MonoBehaviour{public ...

  8. css3动画实现3d旋转效果

    这个项目我只用了css3中的animation和transition配合使用,主要是把六个面全部根据旋转角度与偏移实现的. 下面直接上代码. <!DOCTYPE html> <htm ...

  9. CSS3动画正方体3D旋转

    为什么80%的码农都做不了架构师?>>>    感谢万老师的讲课,无意中连接进入听了一下,感觉效果还不错,学习了一下. 先看效果: 代码 如下: <!DocType html& ...

最新文章

  1. Assembly--软件PBcR和Canu
  2. 清华大学计算机系2015分数线,清华大学2015-2017高考录取分数线,附各省录取数据...
  3. window连接不上linux ftp_xftp怎么连linux,教你xftp怎么连linux
  4. 金融专业计算机大几可以不学,大学选专业,只要明白4个档次,3个原则,基本不会有太大的问题...
  5. C#生成PDF文件中时,设置边框为虚线和隐藏显示单个或者多个边框。
  6. android 如何判断h5页面是否加载完成_H5 键盘兼容性小结
  7. 《构建之法》阅读第四章、第十七章收获
  8. 经典Android开发教程!这些新技术你们都知道吗?年薪超过80万!
  9. Codeforces Round #510 (Div. 2) AB By cellur925
  10. 【前端】创建元素并插入到现有文档
  11. docker跑codalab_Codalab使用与采坑
  12. CCF-CSP历年真题大全附题解(202209已更)
  13. 【VBA】Word批量改变图片的大小,进行排版
  14. 苹果id退出后数据还在吗_【保留数据修复】升级iOS 14后,出现白苹果的修复方法!...
  15. android 获取电池最大容量,地表最大容量:Energizer推出16000mAh电池安卓机,续航长达一个周...
  16. HTTP相关:DNS防止劫持
  17. UI自动化测试面试题总结
  18. 梅科尔工作室苏慎臻,鸿蒙实战项目
  19. echarts 绘制力导向地图
  20. python for in循环列表_python 之 使用 for-in 循环遍历范围,元组,列表,字典

热门文章

  1. 电子学会图形化一级编程题解析:希神吓走猫头鹰
  2. 产品细节中的情感化设计
  3. 四国军棋引擎开发(8)主要变例提取
  4. 如何在Ubuntu 16.04上安装Swift和Vapor
  5. 江湖小白之一起学Python (五)爬取淘宝商品信息
  6. SEO权重MIP泛站群程序_MIP泛目录站群php程序 快速收录排名
  7. JavaSwing3
  8. Tourist Attractions
  9. 数据可视化设计指南(信息图表篇)
  10. 基于wifibroadcast的无人机数字图传