css动画

<meta charset="utf-8">

css3动画

  • 过渡:transition
  • 2D 转换 transform
  • 3D 转换 transform
  • 动画:animation

过渡:transition

transition的中文含义是过渡。过渡是CSS3中具有颠覆性的一个特征,可以实现元素不同状态间的平滑过渡(补间动画),经常用来制作动画效果。

  • 补间动画:自动完成从起始状态到终止状态的的过渡。不用管中间的状态。

  • 帧动画:通过一帧一帧的画面按照固定顺序和速度播放。如电影胶片。

  • transition-property: all; 如果希望所有的属性都发生过渡,就使用all。

  • transition-duration: 1s; 过渡的持续时间。

  • transition-timing-function: linear; 运动曲线。属性值可以是:

  • linear 线性

  • ease 减速

  • ease-in 加速

  • ease-out 减速

  • ease-in-out 先加速后减速

  • transition-delay: 1s; 过渡延迟。多

上面的四个属性也可以写成综合属性:

transition: 让哪些属性进行过度 过渡的持续时间 运动曲线 延迟时间;

transition: all 3s linear 0s;

其中,transition-property这个属性是尤其需要注意的,不同的属性值有不同的现象。我们来示范一下。

如果设置 transition-property: width,意思是只让盒子的宽度在变化时进行过渡。效果如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<style type="text/css">

*{

margin: 0 auto;

}

box{

width: 100px;

height: 100px;

background: red;

transition: width 2s ease-in-out /*运动曲线 */ 0s ;

transition-delay: 1s;

}

box:hover{

width: 500px;

}

</style>

<body>

<div id="box">

</div>

</body>

</html>

2D 转换

转换是 CSS3 中具有颠覆性的一个特征,可以实现元素的位移、旋转、变形、缩放,甚至支持矩阵方式。

转换再配合过渡和动画,可以取代大量早期只能靠 Flash 才可以实现的效果。

在 CSS3 当中,通过 transform 转换来实现 2D 转换或者 3D 转换。

  • 2D转换包括:缩放、移动、旋转。

2、位移:translate

格式:

transform: translate(水平位移, 垂直位移); transform: translate(-50%, -50%);

参数解释:

  • 参数为百分比,相对于自身移动。
  • 正值:向右和向下。 负值:向左和向上。如果只写一个值,则表示水平移动。

应用:让绝对定位中的盒子在父亲里居中

我们知道,如果想让一个标准流中的盒子在父亲里居中(水平方向看),可以将其设置margin: 0 auto属性。

3、旋转:rotate

格式:

transform: rotate(角度);

transform: rotate(45deg);

参数解释:正值 顺时针;负值:逆时针。

transform 中的 rotate 旋转,但同时还要给盒子设置 transition 过渡。没有过渡效果 会卡

3D 转换

1、旋转:rotateX、rotateY、rotateZ

3D坐标系

旋转的方向:(左手法则)

左手握住旋转轴,竖起拇指指向旋转轴的正方向,正向就是其余手指卷曲的方向。

从上面这句话,我们也能看出:所有的3d旋转,对着正方向去看,都是顺时针旋转。

格式:

transform: rotateX(360deg); //绕 X 轴旋转360度

transform: rotateY(360deg); //绕 Y 轴旋转360度

transform: rotateZ(360deg); //绕 Z 轴旋转360度

2、移动:translateX、translateY、translateZ

格式:

transform: translateX(100px); //沿着 X 轴移动

transform: translateY(360px); //沿着 Y 轴移动

transform: translateZ(360px); //沿着 Z 轴移动

3、透视:perspective

电脑显示屏是一个 2D 平面,图像之所以具有立体感(3D效果),其实只是一种视觉呈现,通过透视可以实现此目的。

透视可以将一个2D平面,在转换的过程当中,呈现3D效果。但仅仅只是视觉呈现出3d 效果,并不是正真的3d。

格式有两种写法:

  • 作为一个属性,设置给父元素,作用于所有3D转换的子元素
  • 作为 transform 属性的一个值,做用于元素自身。

4、3D呈现(transform-style)

3D元素构建是指某个图形是由多个元素构成的,可以给这些元素的父元素设置transform-style: preserve-3d来使其变成一个真正的3D图形。属性值可以如下:

transform-style: preserve-3d; //让 子盒子 位于三维空间里

transform-style: flat; //让子盒子位于此元素所在的平面内(子盒子被扁平化)

动画

动画是CSS3中具有颠覆性的特征,可通过设置多个节点 来精确控制一个或一组动画,常用来实现复杂的动画效果。

1、定义动画的步骤

(1)通过@keyframes定义动画;

(2)将这段动画通过百分比,分割成多个节点;然后各节点中分别定义各属性;

(3)在指定元素里,通过 animation 属性调用动画。

之前,我们在 js 中定义一个函数的时候,是先定义,再调用:

js 定义函数:

function fun(){ 函数体 }

调用:

fun();

同样,我们在 CSS3 中定义动画的时候,也是先定义,再调用:

定义动画:

@keyframes 动画名{

from{ 初始状态 }

to{ 结束状态 }

}

调用:

animation: 动画名称 持续时间;

其中,animation属性的格式如下:

animation: 定义的动画名称 持续时间 执行次数 是否反向 运动曲线 延迟执行。(infinite 表示无限次)

animation: move1 1s alternate linear 3;

animation: move2 4s;

2、动画属性

我们刚刚在调用动画时,animation属性的格式如下:

animation属性的格式如下:

animation: 定义的动画名称 持续时间 执行次数 是否反向 运动曲线 延迟执行。(infinite 表示无限次)

animation: move1 1s alternate linear 3;

animation: move2 4s;

可以看出,这里的 animation 是综合属性,接下来,我们把这个综合属性拆分看看。

(1)动画名称:

animation-name: move;

(2)执行一次动画的持续时间:

animation-duration: 4s;

备注:上面两个属性,是必选项,且顺序固定。

(3)动画的执行次数:

animation-iteration-count: 1; //iteration的含义表示迭代

属性值infinite表示无数次。

(3)动画的方向:

animation-direction: alternate;

属性值:normal 正常,alternate 反向。

(4)动画延迟执行:

animation-delay: 1s;

(5)设置动画结束时,盒子的状态:

animation-fill-mode: forwards;

属性值: forwards:保持动画结束后的状态(默认), backwards:动画结束后回到最初的状态。

(6)运动曲线:

animation-timing-function: ease-in;

线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)

ease:平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)

ease-in:由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)

ease-out:由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)

ease-in-out:由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)

step-start:等同于 steps(1, start)

step-end:等同于 steps(1, end)

steps(<integer>[, [ start | end ] ]?):接受两个参数的步进函数。第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是start或end,指定每一步的值发生变化的时间点。第二个参数是可选的,默认值为end。cubic-bezier(<number>, <number>, <number>, <number>):特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内

属性值可以是:linear ease-in-out steps()等。

注意,如果把属性值写成steps(),则表示动画不是连续执行,而是间断地分成几步执行。我们接下来专门讲一下属性值 steps()。

steps()的效果

我们还是拿上面的例子来举例,如果在调用动画时,我们写成:

animation: move2 4s steps(2);

css3动画基本知识:

1.过渡动画:transition动画

2.关键帧动画:animation动画 配合@keyframe实现

学习资料(CSS3动画详解(图文教程))

https://www.cnblogs.com/smyhvae/p/8435182.html

css3手册:https://css.doyoe.com/

css loader

动画:https://github.com/ConnorAtherton/loaders.css

先克隆下来,然后运行demo目录中的文件

贝塞尔曲线

http://www.zhangxinxu.com/wordpress/2013/08/%E8%B4%9D%E5%A1%9E%E5%B0%94%E6%9B%B2%E7%BA%BF-cubic-bezier-css3%E5%8A%A8%E7%94%BB-svg-canvas/

http://cubic-bezier.com/#.17,.67,.83,.67

perspective 透视

http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/

总结

过渡:transition :不同状态的平滑过渡

两种效果

1 补间动画 :自动完成开始到结束的过渡 期间移动效果平滑

2 帧动画 : 按开始到结束的顺序播放 一卡一卡的效果

transition 有4个属性

1 transition-property: all;设置所有属性为过渡状态 值为all

none:不指定过渡的css属性

all:所有可以进行过渡的css属性

<IDENT>:指定要进行过渡的css属性

2 transition-duration: 1s; 指定过渡播放时间 职位时间数值 单位s

<time>:指定对象过渡的持续时间

3 transition-timing-function: linear; 过渡运动线路

值为

  • linear 线性 :直线过渡效果 等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0)
  • ease 减速 :平滑过渡 等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0)
  • ease-in 加速: 由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1.0)
  • ease-out 减速:由快到慢。等同于贝塞尔曲线(0, 0, 0.58, 1.0)
  • ease-in-out 先加速后减速:由慢到快再到慢。等同于贝塞尔曲线(0.42, 0, 0.58, 1.0)
  • step-start:等同于 steps(1, start)
  • step-end:等同于 steps(1, end)
  • steps(<integer>[, [ start | end ] ]?):接受两个参数的步进函数。第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是start或end,指定每一步的值发生变化的时间点。第二个参数是可选的,默认值为end。cubic-bezier(<number>, <number>, <number>, <number>):特定的贝塞尔曲线类型,4个数值需在[0, 1]区间内

4 transition-delay: 1s; 过渡延迟。多长时间后再执行这个过渡动画。

缩放:scale

transform: scale(x, y);

transform: scale(2, 0.5);

x:水平方向的缩放倍数。y:垂直方向的缩放倍数。如果只写一个值就是等比例缩放。

取值:大于1表示放大,小于1表示缩小。不能为百分比

位移:translate

transform: translate(水平位移, 垂直位移)

transform: translate(-50%, -50%);

参数为百分比,相对于自身移动。

正值:向右和向下。 负值:向左和向上。如果只写一个值,则表示水平移动。

旋转:rotate

transform: rotate(角度);

transform: rotate(45deg);

参数解释:正值 顺时针;负值:逆时针。

旋转:rotateX、rotateY、rotateZ

transform: rotateX(360deg); //绕 X 轴旋转360度

transform: rotateY(360deg); //绕 Y 轴旋转360度

transform: rotateZ(360deg); //绕 Z 轴旋转360度

移动:translateX、translateY、translateZ

transform: translateX(100px); //沿着 X 轴移动

transform: translateY(360px); //沿着 Y 轴移动

transform: translateZ(360px); //沿着 Z 轴移动

透视:perspective

电脑显示屏是一个 2D 平面,图像之所以具有立体感(3D效果),其实只是一种视觉呈现,通过透视可以实现此目的。

透视可以将一个2D平面,在转换的过程当中,呈现3D效果。但仅仅只是视觉呈现出3d 效果,并不是正真的3d。

3D呈现(transform-style)transform-style: preserve-3d; transform-style: flat;

定义动画的步骤

(1)通过@keyframes定义动画;

(2)将这段动画通过百分比,分割成多个节点;然后各节点中分别定义各属性;

(3)在指定元素里,通过 animation 属性调用动画。

<!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title></title><style>.box {

width: 100px;

height: 100px;

margin: 100px;

background-color: red;

/* 调用动画// animation: 动画名称 持续时间 执行次数 是否反向 运动曲线 延迟执行。infinite 表示无限次//animation: move 1s alternate linear 3;*/animation: move2 4s;

}

/* 方式一:定义一组动画*/

@keyframes move1 {

from {

transform: translateX(0px) rotate(0deg);

}

to {

transform: translateX(500px) rotate(555deg);

}

}

/* 方式二:定义多组动画*/

@keyframes move2 {

0% {

transform: translateX(0px) translateY(0px);

background-color: red;

border-radius: 0;

}

25% {

transform: translateX(500px) translateY(0px);

}

/动画执行到 50% 的时候,背景色变成绿色,形状变成圆形/

50% {

/* 虽然两个方向都有translate,但其实只是Y轴上移动了200px。

因为X轴的500px是相对最开始的原点来说的。可以理解成此时的 translateX 是保存了之前的位移 */transform: translateX(500px) translateY(200px);

background-color: green;

border-radius: 50%;

}

75% {

transform: translateX(0px) translateY(200px);

}

/动画执行到 100% 的时候,背景色还原为红色,形状还原为正方形/

100% {

/坐标归零,表示回到原点。/transform: translateX(0px) translateY(0px);

background-color: red;

border-radius: 0;

}

}

</style></head><body><div class="box"></div></body></html>

动画属性

我们刚刚在调用动画时,animation属性的格式如下:

animation属性的格式如下:

animation: 定义的动画名称 持续时间 执行次数 是否反向 运动曲线 延迟执行。(infinite 表示无限次)

animation: move1 1s alternate linear 3;

animation: move2 4s;

(1)动画名称: animation-name: move;

(2)执行一次动画的持续时间: animation-duration: 4s;

备注:上面两个属性,是必选项,且顺序固定。

(3)动画的执行次数: animation-iteration-count: 1; *属性值infinite表示无数次。

(3)动画的方向: animation-direction: alternate;*属性值:normal 正常,alternate 反向。

(4)动画延迟执行: animation-delay: 1s;

(5)设置动画结束时,盒子的状态: animation-fill-mode: forwards;

属性值: forwards:保持动画结束后的状态(默认), backwards:动画结束后回到最初的状态。

(6)运动曲线: animation-timing-function: ease-in;*属性值可以是:linear ease-in-out steps()等

steps()的效果 animation: move2 4s steps(2);

  • @keyframes定义的动画名称用来被animation-name所使用。
  • 定义动画时,简单的动画可以直接使用关键字from和to,即从一种状态过渡到另一种状态:
  • 示例代码:
  • @keyframes testanimations {
  • from { opacity: 1; }
  • to { opacity: 0; }
  • }
  • 其中testanimations是该动画的名字,该动画表示某个东西将逐渐消失。

from to === 0% 100% 分别为最小值的数值 和最大值的数值

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 1,854评论 0 4
  • transitiontransition-property 过渡属性transition-duration 过渡持...
    Rella7阅读 426评论 0 0
  • CSS 中的 transform,transition 和 animation 是分开的三部分内容,其中 tran...
    单纯的土豆阅读 713评论 0 4
  • 我们的身边都不乏这样的超人,他们的生活和工作平衡的非常好,他们似乎有超凡的毅力和精力去享受生命,他们有很多好的习惯...
    子喻女士阅读 369评论 0 3
  • 富文本编辑器上新啦 修复了之前存在的一些bug 增加了插入本地图片的功能 PS: chrome 33.0.175...
    简书阅读 537评论 14 6