css动画

作者: 刘松阳 | 来源:发表于2019-06-03 15:26 被阅读0次

<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% 分别为最小值的数值 和最大值的数值

相关文章

  • CSS-3D知识

    1.CSS动画 1.1 CSS动画属性-animation animation:为CSS动画属性,使用该属性可以替...

  • Css动画 小球横移

    学习css 动画,建立小球左右横移的动画原料:html5 Css3html CSS css 动画属性介绍 其中an...

  • 网页高级知识点(三)

    CSS3 transition动画 CSS3 transform变换 CSS3 animation动画

  • 有用的Vue第三方库

    Animate.css - CSS动画库 Velocity.js - JS动画库 TweenJS - 状态过渡动画...

  • 动画类文章

    css3常用动画+动画库 vue2使用animate css

  • Vue.js 过渡动画

    1. css实现过度 transition 动画 css-transform动画 动态组件 上述动画,如果设置mo...

  • 前端开发入门到实战:CSS动画@keyframes的用法

    CSS动画 CSS动画允许大多数HTML元素的动画,而无需使用JavaScript或Flash! 动画浏览器支持 ...

  • 2018-06-13

    Css动画: css3动画主要包括Transform、Transition、Animation 区别 transi...

  • 2018-08-15

    CSS动画 CSS3 @keyframes 规则如需在 CSS3 中创建动画,您需要学习 @keyframes 规...

  • CSS3 动画

    动画属性 动画(animation)是CSS3新增的属性,动画属性可以为元素创建动画,CSS3以前在网页上实现动画...

网友评论

      本文标题:css动画

      本文链接:https://www.haomeiwen.com/subject/navcxctx.html