css动画

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,意思是只让盒子的宽度在变化时进行过渡。效果如下:

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([, [ start | end ] ]?):接受两个参数的步进函数。第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是start或end,指定每一步的值发生变化的时间点。第二个参数是可选的,默认值为end。cubic-bezier(, , , ):特定的贝塞尔曲线类型,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属性

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

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

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([, [ start | end ] ]?):接受两个参数的步进函数。第一个参数必须为正整数,指定函数的步数。第二个参数取值可以是start或end,指定每一步的值发生变化的时间点。第二个参数是可选的,默认值为end。cubic-bezier(, , , ):特定的贝塞尔曲线类型,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 属性调用动画。

动画属性

我们刚刚在调用动画时,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% 分别为最小值的数值 和最大值的数值

你可能感兴趣的:(css动画)