【学习记录】CSS动画
前言:
之前学这部分的时候只粗略地看了一点,实事证明我现在已经完全没了印象🤣实在惭愧,所以还是自己重新学一遍,毕竟动画效果还是挺吸引人的。
当然,很多效果网上能找到现成的,比如我在这期间找到的CSS Animation Kit (angrytools.com)
另外,为了更好地展现效果,我第一次正式在Markdown中使用了iframe
鉴于我这菜鸟的水平,本文不可避免的可能会有些错误,如有发现欢迎大佬指出🤣
我自己在学习的途中,觉得这一篇不错深入浅出 CSS 动画 - ChokCoco - 博客园 (cnblogs.com)里面有许多干货
【转载说明】本文优先发布于我的个人博客www.226yzy.com ,转载请注明出处并注明作者:星空下的YZY。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。
尝试
首先我们Hello World的仪式不少😆🚀🚀🚀
代码如下
1 | <div>Hello World</div> |
CSS3的动画属性
animation(动画)、transition(过渡)是css3中的两种动画属性。
animation强调流程与控制,对元素的一个或多个属性的变化进行控制,可以有多个关键帧(animation 和@ keyframes结合使用);
transition强调过渡,是元素的一个或多个属性发生变化时产生的过渡效果,同一个元素通过两个不同的途径获取样式,而第二个途径当某种改变发生(例如hover)时才能获取样式,这样就会产生过渡动画。可以认为它有两个关键帧(Transition + Transform = 两个关键帧的Animation)。
本篇我记录的是animation
对于animation,@keyframes
规则、animation-name
和animation-duration
是必须的
在上文的示例中
animation-name
是change
即动画的名称
animation-duration
设的是3s
即动画完成一个周期所花费的秒或毫秒
实现的效果是初始为蓝色,然后逐渐变为黑色
animation-iteration-count: infinite;
是为了一直重复执行上面的效果
下面的表格列出了 @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
函数,可以通过下面这个工具网站调试
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 | @keyframes change { |
animation-fill-mode
这个我也还迷迷糊糊😵💫,还是下面这位大佬总结的好
深入浅出 CSS 动画 - ChokCoco - 博客园 (cnblogs.com)
或者参考菜鸟教程的
其它属性
还有一些像color
这些小属性,就参考菜鸟教程的吧🤣
不过还是有几个常见或重要的属性
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代表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
在线工具
cubic-bezier(.25,.1,.25,.95) ✿ cubic-bezier.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许可协议。