前言:

之前学这部分的时候只粗略地看了一点,实事证明我现在已经完全没了印象🤣实在惭愧,所以还是自己重新学一遍,毕竟动画效果还是挺吸引人的。

当然,很多效果网上能找到现成的,比如我在这期间找到的CSS Animation Kit (angrytools.com)

另外,为了更好地展现效果,我第一次正式在Markdown中使用了iframe

鉴于我这菜鸟的水平,本文不可避免的可能会有些错误,如有发现欢迎大佬指出🤣

我自己在学习的途中,觉得这一篇不错深入浅出 CSS 动画 - ChokCoco - 博客园 (cnblogs.com)里面有许多干货

【转载说明】本文优先发布于我的个人博客www.226yzy.com ,转载请注明出处并注明作者:星空下的YZY。

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。

尝试

首先我们Hello World的仪式不少😆🚀🚀🚀

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div>Hello World</div>
<style>
div {
animation: change 3s;
animation-iteration-count: infinite;
}
@keyframes change {
0% {
color: #10a4ed;
}
100% {
color: #000;
}
}
</style>

CSS3的动画属性

animation(动画)、transition(过渡)是css3中的两种动画属性。

animation强调流程与控制,对元素的一个或多个属性的变化进行控制,可以有多个关键帧(animation 和@ keyframes结合使用);

transition强调过渡,是元素的一个或多个属性发生变化时产生的过渡效果,同一个元素通过两个不同的途径获取样式,而第二个途径当某种改变发生(例如hover)时才能获取样式,这样就会产生过渡动画。可以认为它有两个关键帧(Transition + Transform = 两个关键帧的Animation)。

参考自CSS动画 animation与transition - 昵称你好 - 博客园 (cnblogs.com)

本篇我记录的是animation

对于animation,@keyframes规则、animation-nameanimation-duration 是必须的

在上文的示例中

animation-namechange即动画的名称

animation-duration设的是3s即动画完成一个周期所花费的秒或毫秒

实现的效果是初始为蓝色,然后逐渐变为黑色

animation-iteration-count: infinite;是为了一直重复执行上面的效果

该部分摘录自CSS3 动画 | 菜鸟教程 (runoob.com)

下面的表格列出了 @keyframes 规则和所有动画属性:

属性 描述
@keyframes 规定动画,在内部设定动画关键帧
animation 所有动画属性的简写属性
animation-name 规定 @keyframes 动画的名称
animation-duration 规定动画完成一个周期所花费的秒或毫秒。默认是 0
animation-timing-function 规定动画的速度曲线。默认是 “ease”
animation-fill-mode 规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式
animation-delay 规定动画何时开始。默认是 0
animation-iteration-count 规定动画被播放的次数。默认是 1,无限是infinite
animation-direction 规定动画是否在下一周期逆向地播放。默认是 “normal”
animation-play-state 规定动画是否正在运行或暂停。默认是 “running”

@keyframes 规则

@keyframes 规则中指定了 CSS 样式,动画将在特定时间逐渐从当前样式更改为新样式。

可以进行更细节的处理,具体就像上面是示例那样,你可以设定更多的关键帧和属性。

animation-timing-function

描述
linear 动画从头到尾的速度是相同的。
ease 默认。动画以低速开始,然后加快,在结束前变慢。
ease-in 动画以低速开始。
ease-out 动画以低速结束。
ease-in-out 动画以低速开始和结束。
steps(int,start\ end) 指定了时间函数中的间隔数量(步长)。有两个参数,第一个参数指定函数的间隔数,该参数是一个正整数(大于 0)。 第二个参数是可选的,表示动画是从时间段的开头连续还是末尾连续。含义分别如下:start:表示直接开始。end:默认值,表示戛然而止。
cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。

看表格不太直观,我就用iframe弄出来吧

这里我写这个演示的代码其实偷懒用transition(过渡)写的

transition有四个过渡属性

transition-property 、transition-duration 、transition-timing-function 、transition-delay

然后对于cubic-bezier函数,可以通过下面这个工具网站调试

cubic-bezier.com

animation-direction

animation-direction 规定动画是否在下一周期逆向地播放。默认是 “normal”

这里用菜鸟教程的表格

描述 测试
normal 默认值。动画按正常播放。 测试 »
reverse 动画反向播放。 测试 »
alternate 动画在奇数次(1、3、5…)正向播放,在偶数次(2、4、6…)反向播放。 测试 »
alternate-reverse 动画在奇数次(1、3、5…)反向播放,在偶数次(2、4、6…)正向播放。 测试 »
initial 设置该属性为它的默认值。请参阅 initial
inherit 从父元素继承该属性。请参阅 inherit

animation-delay、animation-play-state

这两个就放在一起记录吧

animation-delay 规定动画何时开始。默认是 0,当然,也可以是负数或正数

animation-play-state 规定动画是否正在运行或暂停。默认是 “running” ,另外一个值是paused指定暂停动画

对这几个属性,我写了下面这个

这里平移我@keyframes 规则写的是

1
2
3
@keyframes change {
100%{transform: translate(200px, 0);}
}

animation-fill-mode

这个我也还迷迷糊糊😵‍💫,还是下面这位大佬总结的好

深入浅出 CSS 动画 - ChokCoco - 博客园 (cnblogs.com)

或者参考菜鸟教程的

animation-fill-mode

其它属性

还有一些像color这些小属性,就参考菜鸟教程的吧🤣

CSS 动画 | 菜鸟教程 (runoob.com)

不过还是有几个常见或重要的属性

transform 属性

Transform属性应用于元素的2D或3D转换。这个属性允许你将元素旋转,缩放,移动,倾斜等。

你可以通过下面的链接查看Transform 各种变形旋转

Css3 Transform 各种变形旋转 | 菜鸟工具 (runoob.com)

描述
none 定义不进行转换。
matrix(n,n,n,n,n,n) 定义 2D 转换,使用六个值的矩阵。
matrix3d(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n) 定义 3D 转换,使用 16 个值的 4x4 矩阵。
translate(x,y) 定义 2D 转换。
translate3d(x,y,z) 定义 3D 转换。
translateX(x) 定义转换,只是用 X 轴的值。
translateY(y) 定义转换,只是用 Y 轴的值。
translateZ(z) 定义 3D 转换,只是用 Z 轴的值。
scale(x[,y]?) 定义 2D 缩放转换。
scale3d(x,y,z) 定义 3D 缩放转换。
scaleX(x) 通过设置 X 轴的值来定义缩放转换。
scaleY(y) 通过设置 Y 轴的值来定义缩放转换。
scaleZ(z) 通过设置 Z 轴的值来定义 3D 缩放转换。
rotate(angle) 定义 2D 旋转,在参数中规定角度。
rotate3d(x,y,z,angle) 定义 3D 旋转。
rotateX(angle) 定义沿着 X 轴的 3D 旋转。
rotateY(angle) 定义沿着 Y 轴的 3D 旋转。
rotateZ(angle) 定义沿着 Z 轴的 3D 旋转。
skew(x-angle,y-angle) 定义沿着 X 和 Y 轴的 2D 倾斜转换。
skewX(angle) 定义沿着 X 轴的 2D 倾斜转换。
skewY(angle) 定义沿着 Y 轴的 2D 倾斜转换。
perspective(n) 为 3D 转换元素定义透视视图。

私有前缀

有时候,会看见一些属性加上了前缀,比如@-webkit-keyframes加上了-webkit的前缀

该部分参考了-moz、-ms、-webkit浏览器私有前缀详解,作用、出处wyx100的博客-CSDN博客私有前缀

作用:为了兼容老版本的写法。对于一般比较新版本的浏览器可以不加

常见前缀:

-moz代表firefox浏览器私有属性

-ms代表ie浏览器私有属性

-webkit代表safari、chrome私有属性

-o代表Opera私有属性

因为制定HTML和CSS标准的组织W3C动作是很慢的。
通常,有w3c组织成员提出一个新属性,比如说圆角border-radius,大家都觉得好,但w3c制定标准,要走很复杂的程序,审查等。而浏览器商市场推广时间紧,如果一个属性已经够成熟了,就会在浏览器中加入支持。
为避免日后w3c公布标准时有所变更,加入一个私有前缀,比如-webkit-border-radius,通过这种方式来提前支持新属性。
等到日后w3c公布了标准,border-radius的标准写法确立之后,再让新版的浏览器支持border-radius这种写法。
————————————————
版权声明:本文为CSDN博主「wyx100」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wyx100/article/details/50450728

在线工具

CSS 动画套件 (angrytools.com)

cubic-bezier(.25,.1,.25,.95) ✿ cubic-bezier.com

参考文献

CSS3 动画 | 菜鸟教程 (runoob.com)

深入浅出 CSS 动画 - ChokCoco - 博客园 (cnblogs.com)

-moz、-ms、-webkit浏览器私有前缀详解,作用、出处wyx100的博客-CSDN博客私有前缀

如何理解animation-fill-mode及其使用? - SegmentFault 思否

CSS动画 animation与transition - 昵称你好 - 博客园 (cnblogs.com)

最后

暂时就写到这了,如有错误,欢迎大佬留言指出😆

欢迎访问我的小破站https://www.226yzy.com/ 或者GitHub版镜像 https://226yzy.github.io/ 或Gitee版镜像https://yzy226.gitee.io/

我的Github:226YZY (星空下的YZY) (github.com)

【转载说明】本文优先发布于我的个人博客www.226yzy.com ,转载请注明出处并注明作者:星空下的YZY。

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。