HTML系列:

CSS系列:

00、CSS动画

CSS系列:

CSS 动画就是由一种状态(CSS样式),过渡到另一中状态(CSS样式)的动态过程,CSS中提供了两种动画实现方式:transitionanimation

对比 transition动画 animation动画
定义 基于CSS属性变化的简单过渡动画 基于关键帧@keyframes实现更复杂的动画
复用 只能执行一次,不可重复执行,复用不便 可多次执行,复用方便
执行方式 页面加载不会默认执行,须触发执行 可直接执行、可控制
动画事件 无,只能预估动画时间,用定时器setTimeout模拟 支持监听事件,如动画开始、结束
动画帧 只有初始帧(当前样式)、结束帧(触发动画时的样式) 支持任意多帧动画设置
五星好评 灵活简单 功能丰富

01、transition过渡动画

1.1、transition动画

transition 过渡动画是针对CSS样式的变化,进行过渡,如widthopacitycolor改变的过渡,可以实现CSS样式的平滑动态过渡动画效果。

transition 动画本身并不会主动执行,须通过其他方式触发,动画属性变化才会触发执行。常用一些伪类触发::hover:focus:active(鼠标按下激活)、:target(锚点元素id)、:checked,或者JS控制CSS样式来触发动画执行。

transition过渡 描述 示例
transition 过渡动画的简写属性,包括下面这些小弟 (transition /trænˈzɪʃ(ə)n/ 过渡)
transition-property 指定过渡动画的CSS属性名,多个,分割,默认all都生效 transition-property: width;
transition-duration 动画时长,默认0,单位s、ms,*必备 transition-duration: 1s;
transition-delay 动画延时时长,延时执行动画 transition-delay: 1s;
*-timing-function 指定过渡动画执行缓动曲线函数,详见后面animation章节 transition-timing-function: linear;

简写属性:transiton: property duration timing-function delay

transition-property指定的属性值变化时,就会触发动画执行,且只对该属性执行过渡动画,设置all则任意属性变化都会触发动画执行。

如下示例分析:

  • 页面初始加载时并不会触发动画执行。
  • 当鼠标移入时,属性widthbackground-color值变化,触发了动画执行。
  • 当鼠移出时,属性widthbackground-color值回到初始状态,再次触发了动画执行。
  1. <div>
  2. <button onclick="active()">动起来</button>
  3. <p class="goodstudy">好好学习</p>
  4. </div>
  5. <style>
  6. .goodstudy {
  7. background-color: #63a9e7;
  8. width: 150px; margin: 40px 0; padding: 8px;
  9. /* 设置动画 页面加载并不会执行 */
  10. transition-property: width,background-color;
  11. transition-duration: 1s;
  12. transition-delay: 0.2s;
  13. transition-timing-function: ease-out;
  14. transition: all 1s ease-out;
  15. }
  16. .goodstudy:hover {
  17. width: 350px;
  18. background-color: red;
  19. }
  20. .active {
  21. transform: rotate(360deg);
  22. background-color: #0cdb39;
  23. transition: all 3s;
  24. }
  25. </style>
  26. <script>
  27. //通过脚本添加CSS类,触发动画执行
  28. const pnode = document.querySelector('.goodstudy');
  29. function active() {
  30. pnode.classList.add('active');
  31. //执行完移除,没有事件只能定时执行移除动作
  32. setTimeout(() => {
  33. console.log('removed');
  34. pnode.classList.remove('active');
  35. }, 3000);
  36. }
  37. </script>

1.2、transform变换

transform 可实现元素的各种图形变换,如缩放、旋转,及3D的变换,(transform /trænsˈfɔːrm/ 变换)。transform 本身并不是动画,不过常用来配合transition来实现各种炫酷的变换动画效果。

transform变换函数 描述 示例
transform 元素变换,值支持下面这些函数,可设置多个值 transform: skew(30deg) rotate(60deg);
translate(x, y) 位移变换,x、y方向的移动,可负数。扩展函数translateX()、translateY(),其他变换函数类似 transform: translateY(100);
( translate /trænzˈleɪt/ 变化、移动)
scale(x, y) 缩放变换,1为100%原始大小 transform: scaleX(2);
rotate(angle) 旋转,参数单位为角度deg,(rotate /rəʊˈteɪt/ ) transform: rotate(30deg);
skew(x, y) 元素倾斜,单位为角度deg( skew /skjuː/ 倾斜) transform: skew(-60deg,0);
translate3d(x,y,z) 3D的位置变换,指定x、y、z坐标轴的偏移距离 transform: translate3d(100px,0,0);
scale3d(x,y,z) 3D的缩放变换,指定x、y、z坐标轴的缩放值 transform: scale3d(2,1.2,1);
rotate3d(x,y,z,angle) 3D旋转,指定x、y、z坐标轴 transform: rotateX(180deg);
matrix() 基于X轴和Y轴矩阵变换(/ˈmeɪtrɪks/矩阵)
其他变换相关属性
transform-origin 元素中心坐标,默认center transform-origin: 150px 50px;
perspective 3D变换的透视视角,在父元素上设置 /pərˈspektɪv/ perspective: 500px;

3D坐标系的手势图:

  1. <div>
  2. <button onclick="active()">动起来</button>
  3. <p class="goodstudy">好好学习</p>
  4. <p class="ddup">天天向上</p>
  5. </div>
  6. <style>
  7. .ddup{
  8. background-color: #0cdb39;
  9. width: 100px;
  10. height: 100px;
  11. line-height: 100px;
  12. text-align: center;
  13. transition: all 1s ease-out;
  14. transform: skew(-30deg);
  15. }
  16. .ddup:hover{
  17. transform: translateX(-30px); /* transform只有一个生效,被后面的覆盖了*/
  18. transform: rotateX(180deg); /* 围绕x轴3d旋转*/
  19. }
  20. </style>


02、animation帧动画

CSS 动画 animation帧动画,动画的实际CSS样式是由 @keyframes 规则实现的,animation属性负责设置动画的各项运动参数。

2.1、animation

animation 属性/值 描述 示例/备注
animation 动画组合简写属性,包括下面这些小弟 是有顺序的,支持多组动画,逗号隔开
animation-name *必填,指定由@keyframes定义的动画序列名称 @keyframes animation-name {}
animation-duration *必填,动画时长,单位s、ms animation-duration: 2.5s
animation-iteration-count 动画循环次数(1),infinite无限循环(/ˈɪnfɪnət/无限) animation-iteration-count: 3;
animation-timing-function 设置动画速度变化函数,提供了函数、预置函数关键字 animation-timing-function: linear;
 linear、ease、... 预置的函数关键字定义,默认ease
cubic-bezier() 三次贝塞尔曲线函数,参数为两个坐标点,在线工具 cubic-bezier(x1, y1, x2, y2)
animation-fill-mode 动画执行元素样式应用方式,默认none,动画执行完成后恢复到原来的样式。
animation-fill-mode: forwards;
forwards:动画后保留最后一帧的样式
backwards:立刻应用第一帧样式,包括animation-delay延迟时间生效
both:forwards+backwards,全都要!
animation-delay 动画延时时长,默认0s立即执行,可为负数 animation-delay: 2s;
animation-direction 播放方向方式,默认normalanimation-iteration-count多次执行时可以使用交替运行alternate alternate:动画交替反向运行,结合多次
reverse:反向播放动画
alternate-reverse:反向交替运行
animation-play-state 动画运行状态,running、paused,可用来控制动画 animation-play-state: paused;

简写属性:animation: name duration timing-function delay iteration-count direction fill-mode play-state

  1. <div class="div-abox">
  2. 断肠人在天涯
  3. </div>
  4. <style>
  5. .div-abox {
  6. padding: 4px;
  7. width: 150px;
  8. background-color: red;
  9. animation-delay: 1s;
  10. animation-duration: 1s;
  11. animation-name: box-line-ani;
  12. animation-direction: alternate; /*动画交替反向运行*/
  13. animation-iteration-count: infinite; /*无限重复*/
  14. animation-fill-mode: both;
  15. animation-timing-function: cubic-bezier(.4, .52, .93, .4);
  16. /*animation 简写属性*/
  17. animation: box-line-ani 1.5s alternate 4 cubic-bezier(.4, .52, .93, .4) both;
  18. }
  19. .div-abox:hover { /* 鼠标悬浮时运动加速 */
  20. animation-duration: 0.5s;
  21. }
  22. @keyframes box-line-ani {
  23. 0% {
  24. background-color: white;
  25. width: 150px;
  26. }
  27. 40% { width: 250px; }
  28. 100% {
  29. background-color: #63a9e7;
  30. width: 400px;
  31. }
  32. }
  33. </style>

2.2、@keyframes关键帧

animation 属性定义动画各项运动参数,实际的动画执行的CSS属性通过@keyframes来定义,使用@keyframes建立两个或两个以上关键帧来实现动画帧的样式定义。

@keyframes animationname { keyframes-selector { css-styles; } }

  1. 定一个关键帧动画组,并命名:@keyframes animation-name {}
  2. 用百分比%来定动画帧:
    • 0% 表示开始第一帧样式,可以用别名from代替。
    • 100% 表示最后一帧样式,可以用别名to代替。
    • 中间可以加其他%* 关键帧。
  3. 每一帧里定义需要执行动画变换的CSS样式。
  1. @keyframes animation-name {
  2. 0% {
  3. background-color: white;
  4. width: 150px;
  5. }
  6. 40% { width: 250px; }
  7. 100% {
  8. background-color: #63a9e7;
  9. width: 400px;
  10. }
  11. }

2.3、animation-timing-function动画缓动曲线

animation-timing-function 用来定义动画执行过程的缓动速度,内置了几个常用的函数定义关键字,及两个关键函数。同transition 动画中的缓动速度属性 transition-timing-function 是一样的,同母异父的亲兄妹。

  • 三次贝塞尔曲线缓动函数cubic-bezier(x1, y1, x2, y2)(cubic /ˈkjuːbɪk/ 立方),参数其实是两个坐标点,可以通过在线贝塞尔可视化工具编辑和测试。用来实现动画过程中速度变化曲线的控制,以实现更自然的动画效果。内置的linearease等都是基于贝塞尔曲线函数的。
  • 步骤缓动函数steps(),把@keyframes定义的动画帧划分为多段执行,多用来实现图片的逐帧动画效果。
animation-timing-function 描述 示例/补充
cubic-bezier(x1, y1, x2, y2) 三次贝塞尔曲线函数,参数为两个坐标点,在线工具 cubic-bezier(x1, y1, x2, y2)
 linear 匀速,= cubic-bezier(0.0, 0.0, 1.0, 1.0) animation-timing-function: linear;
 ease 默认值:低速开始,中间加速,然后低速收尾 (ease /iːz/ 容易,减轻)
 ease-in 低速开始
 ease-out 低速结束
 ease-in-out 低速开始,低速结束
steps( n, <jumpterm>) 分阶段缓动函数,参数为步数和变化点。可实现时钟指针动画 animation-timing-function:steps(6);

2.4、动画事件

用于监听动画的开始、循环、结束的动画事件 AnimationEvent

事件 描述
animationstart 动画开始
animationend 动画完成
animationiteration 动画循环
  1. <script>
  2. const node = document.querySelector('.div-abox');
  3. node.addEventListener('animationend', (e) => {
  4. console.log(e.animationName, e.type, e.elapsedTime);
  5. //box-line-ani animationend 1
  6. })
  7. </script>

参考资料


️版权申明:版权所有@安木夕,本文内容仅供学习,欢迎指正、交流,转载请注明出处!原文编辑地址-语雀

CSS动画-transition/animation的更多相关文章

  1. CSS动画:animation、transition、transform、translate

    https://blog.csdn.net/px01ih8/article/details/80780470 一.区分容易混淆的几个属性和值 先区分一下css中的几个属性:animation(动画). ...

  2. css动画(transition/transform/animation)

    在开发中,一个好的用户操作界面,总会夹杂着一些动画.css用对少的代码,来给用户最佳的体验感,下面我总结了一些css动画属性的使用方法及用例代码供大家参考,在不对的地方,希望大佬直接拍砖评论. 1 t ...

  3. css3动画transition animation

    CSS动画简介  transition   animation transition过渡:css3通过transitions属性引入时间概念,通过开始.结束状态自动计算中间状态,实现状态改变的过渡效果 ...

  4. 前端深入之css篇丨2020年前,彻底掌握css动画【animation】

    写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...

  5. css动画——transition和animation

    http://www.ruanyifeng.com/blog/2014/02/css_transition_and_animation.html 第一部分:CSS Transition 在CSS 3引 ...

  6. css 动画 transition和animation

    本文参考:http://www.ruanyifeng.com/blog/2014/02/css_transition_and_animation.html 1. transition基本用法: < ...

  7. CSS Transform / Transition / Animation 属性的区别

    back21 Jun 2011 Category: tech Tags: css 最近想UI的动画转到css3能吃进3d加速的属性上面来以加强动画的连贯性.只是对于css几个新加的属性不太熟悉,常常容 ...

  8. css动画 transition

    比如输入框触交渐变 在原来的属性添加 : .form-control{-webkit-transition: all .3s; transition: all .3s;} .form-control: ...

  9. css 动画 transform transition animation

    1.transform  transform 是通过在浏览器里面让网页元素 移动 旋转 透明 模糊 等方法来实现改变其外观的技术 -webkit-transform : translate(3em,0 ...

随机推荐

  1. JSP中的EL 表达式

    JSP中的EL 表达式 什么是 EL 表达式,EL 表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达式的什么作用:EL 表达式主要是代替 jsp ...

  2. Qt QBarSeries简易柱状图教程

    博客园最强Qt QBarSeries简易柱状图教程 前情提要 每个人的绘图需求不同,此篇教程也是根据需求来改的.我的需求大概如下所示. 通过信号槽的方式接收signals来刷新柱状图,所以每次触发信号 ...

  3. Android配置OpenCV C++开发环境

    网上的OpenCV配置环境大部分都不能正常配置成功,不是编译时报找不到so,就是运行找不到so.本文是我试了不少坑才找到的配置方法.其原理是让AndroidStudio自己根据mk文件自动配置. 1. ...

  4. 如何在 C# 程序中注入恶意 DLL?

    一:背景 前段时间在训练营上课的时候就有朋友提到一个问题,为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现的? 其实简而言之就是线程的远程注入,这一篇就展开说一下. ...

  5. KingbaseES V8R3集群管理和维护案例之---failover切换wal日志变化分析

    ​ 案例说明: 本案例通过对KingbaseES V8R3集群failover切换过程进行观察,分析了主备库切换后wal日志的变化,对应用者了解KingbaseES V8R3(R6) failover ...

  6. Openstack neutron:目录

    为什么? 最近一直在学习SDN方面的知识,本着"最好的学习就是分享"的精神,记录下本系列的文章,尝试更好地去理解SDN这一正当红的技术. 如何? SDN领域现在已经充斥了大量的公司 ...

  7. day04-1群聊功能

    多用户即时通讯系统04 4.编码实现03 4.5功能实现-群聊功能实现 4.5.1思路分析 群聊的实现思路和私聊的实现非常类似. 不同的是:私聊时,服务端接收到消息后,只需要找出接收方的socket并 ...

  8. 第一章:模型层 - 10:不返回QuerySets的API

    以下的方法不会返回QuerySets,但是作用非常强大,尤其是粗体显示的方法,需要背下来. 方法名 解释 get() 获取单个对象 create() 创建对象,无需save() get_or_crea ...

  9. MES系统与ERP系统信息集成有哪些原则?

    首先,MES和ERP应该是两个独立的系统,简单的说,ERP与MES有点像公司总部与分厂的关系,ERP向MES发指令,MES向ERP做汇报,所以可以按照这个思维来考虑或类比来处理.从企业的管理来说,ER ...

  10. Linux+Wine玩GTA5指南

    如果你的系统没有Wine先装Wine和winetricks,Wine在各大发行版的源都能找到.记住32位和64位的Wine都要装 安装wget后,输入指令 sudo -s cd /opt mkdir ...