CSS 的关键帧和动画是如何工作

如果要给元素添加动画,你需要了解 animation 属性以及 @keyframes 规则。 animation 属性控制动画的外观,@keyframes 规则控制动画中各阶段的变化。 总共有 8 个 animation 属性。

  1. animation-name
    用来设置动画的名称,也就是我们稍后要在 @keyframes 里用到的名称。

  2. animation-duration
    设置动画所花费的时间。

@keyframes 可以通过设置特定时间点的行为来创建动画。 为此,我们只需要给持续时间内的特定帧(从 0% 到 100%)加上 CSS 规则。 如果用一部电影来做类比,那么 CSS 里面的 0% 关键帧就像是电影里面的开场镜头;100% 关键帧就像是电影里的片尾,就是那个之后会出现演职人员列表的片尾。 在动画设定的时间内,CSS 会根据关键帧的规则来给元素添加动画效果。 100% 位置的 CSS 属性就是元素最后的样子,相当于电影里的演职员表或者鸣谢镜头。 然后CSS 应用魔法来在给定的时间内转换元素以使其脱离场景。 下面举例说明 @keyframes 和动画属性的用法:

#anim {animation-name: colorful;animation-duration: 3s;
}@keyframes colorful {0% {background-color: blue;}100% {background-color: yellow;}
}

id 为 anim 的元素,我们在代码中将它的 animation-name 设置为 colorful,同时设置 animation-duration 为 3 秒。 然后我们把 @keyframes 规则添加到名为 colorful 的动画属性上。 在动画开始时(0%)的背景颜色为蓝色,在动画结束时(100%)的背景颜色为黄色。 注意我们不只可以设置开始和结束,而是从 0% 到 100% 间的任意位置都可以设置。

  1. @keyframes 规则的用法。
    还有一个常用的动画属性是 animation-iteration-count,这个属性允许你控制动画循环的次数。 下面是一个例子:
animation-iteration-count: 3;

在这里动画会在运行 3 次后停止,如果想让动画一直运行,可以把值设置成 infinite。

<style>#ball {width: 100px;height: 100px;margin: 50px auto;position: relative;border-radius: 50%;background: linear-gradient(35deg,#ccffff,#ffcccc);animation-name: bounce;animation-duration: 1s;animation-iteration-count: infinite;}@keyframes bounce{0% {top: 0px;}50% {top: 249px;width: 130px;height: 70px;}100% {top: 0px;}}
</style>
<div id="ball"></div>

注释:把 animation-iteration-count 属性改成 infinite,使右边的球一直跳跃。
同样的,我们可以利用无限动画计数制作心跳:
心跳动画的每一秒包含两个部分。 heart 元素(包括 :before 和 :after)使用 transform 属性改变其大小,背景 div 使用 background 属性改变其颜色。

<style>.back {position: fixed;padding: 0;margin: 0;top: 0;left: 0;width: 100%;height: 100%;background: white;animation-name: backdiv;animation-duration: 1s; animation-iteration-count:infinite;}.heart {position: absolute;margin: auto;top: 0;right: 0;bottom: 0;left: 0;background-color: pink;height: 50px;width: 50px;transform: rotate(-45deg);animation-name: beat;animation-duration: 1s; animation-iteration-count:infinite;}.heart:after {background-color: pink;content: "";border-radius: 50%;position: absolute;width: 50px;height: 50px;top: 0px;left: 25px;}.heart:before {background-color: pink;content: "";border-radius: 50%;position: absolute;width: 50px;height: 50px;top: -25px;left: 0px;}@keyframes backdiv {50% {background: #ffe6f2;}}@keyframes beat {0% {transform: scale(1) rotate(-45deg);}50% {transform: scale(0.6) rotate(-45deg);}}</style>
<div class="back"></div>
<div class="heart"></div>

注释:给 back class 和 the heart class 添加 animation-iteration-count 属性,将属性值设置为 infinite,使心保持跳动。 heart:before 和 heart:after 所选择的元素则不需要添加动画属性。

CSS 的关键帧和动画相关推荐

  1. 如何使用CSS创建巧妙的动画提示框

    原文:https://webdesign.tutsplus.co... 原作:Jase Smith 翻译:Stypstive 当你的用户需要漂亮的图标给出额外的文字信息时,亦或是当他们在点击了按钮之后 ...

  2. CSS 实现加载动画之一-菊花旋转

    CSS 实现加载动画之一-菊花旋转 原文:CSS 实现加载动画之一-菊花旋转 最近打算整理几个动画样式,最常见的就是我们用到的加载动画.加载动画的效果处理的好,会给页面带来画龙点睛的作用,而使用户愿意 ...

  3. css ltimg gt只适应,css3动画,CSS3实战小技巧--使用CSS变量实现波浪动画

    css3动画,CSS3实用技巧--利用CSS变量实现波浪动画.今日头条新闻(www.leadip.com)为您带来相关内容的详细介绍. CSS3实用技巧--用CSS变量实现波浪动画 2017年3月,微 ...

  4. css光盘转动,CSS 实现加载动画之五-光盘旋转

    CSS 实现加载动画之五-光盘旋转 今天做的这个动画叫光盘旋转,名字自己取的.动画的效果估计很多人都很熟悉,就是微信朋友圈里的加载动画.做过前面几个动画,发现其实都一个原理,就是如何将动画的元素如何分 ...

  5. 深挖基于 CSS 的变换与动画技术

    深挖基于 CSS 的变换与动画技术 李俊才 的 CSDN 博客 邮箱 :291148484@163.com CSDN 主页:https://blog.csdn.net/qq_28550263?spm= ...

  6. 如何使用 CSS 为 SVG 制作动画:示例教程

    8 分钟阅读 编者注:本文最后更新于 2022 年 7 月 12 日,以包含更多示例. Web 动画是一种乐趣,它通过提供视觉反馈.引导用户完成任务以及使网站整体变得活跃来改善用户体验.有几种方法可以 ...

  7. css3 太极动画,纯css实现太极阴阳鱼动画

    原标题:纯css实现太极阴阳鱼动画 今天看到一个有意思的效果,闲来无事做一个: 把2d静态的太极图改成了3d,阴极和阳极分到了两个平面里实现旋转效果,这个好实现,重点是实现它的透明效果,平面太极图显示 ...

  8. CSS进阶-盒子与动画

    CSS进阶-盒子与动画 文章目录 CSS进阶-盒子与动画 前言 Chapter04 CSS3动画 1. Animation动画 1.1 关键帧 1.2 定义关键帧 1.2.1 定义示例 1.2.2 效 ...

  9. CSS和HTML帧动画

     1.定义关键帧 @keyframes 动画名称(英文) {             0% {                 /* 动画的开始 */             } 25% {     ...

  10. CSS学习--DIY Loading动画

    首先要知道什么是CSS3动画?然后才能做出自己想要的动画效果.下面会通过3个简单的Loading动画效果来对CSS3 animation动画做一个简单介绍,希望对你有用. 动画是使元素从一种样式逐渐变 ...

最新文章

  1. [原]为虚拟机添加新的磁盘分区
  2. [新功能]团队Blog群发邮件
  3. 科大讯飞陶晓东:人工智能时代的医学影像 | CCF-GAIR 2017
  4. CentOS下安装JDK的三种方法
  5. 走进数据中心,揭秘你所不知道的能耗节省大法
  6. node汉字拼音转换需要用到pinyin包,使用pinyin中的分词时报错提示需要安装nodejieba依赖...
  7. idea解决maven全局配置
  8. Java Windows注销用户,中止Windows从Java注销
  9. java数组 —(7)
  10. 路由交换技术——IS-IS
  11. JSON与JAVA的数据转换
  12. 2019最新好听DJ舞曲精选(51-70)【WAV/百度】
  13. ZYNQ 系统的IEEE1588 实现方法
  14. VUE-地区选择器(V-Distpicker)
  15. 安装Ubuntu的几十次坑的经验
  16. 安卓的SoundPool(音效池)播放声音(及具体参数解析)
  17. 百度离线地图开发,node实现地图瓦片下载
  18. 【转】HTML5斯诺克桌球俱乐部【译】
  19. git将分支合并到主分支
  20. python扇贝每日一句api_扇贝-每日一句

热门文章

  1. MaxCompute基本概念和数据类型
  2. mac去除视频水印用什么软件?
  3. 12V转3.3V稳压芯片
  4. 生物信息学入门之基本概念之蛋白质同源检测和折叠识别
  5. 2022-2028中国金属制品市场现状研究分析与发展前景预测报告
  6. 一台计算机连接两个投影,一台电脑两个投影仪要如何连接
  7. 电音制作收割者宿主软件-Cockos REAPER v6.15 x86 x64 WiN
  8. 到底哪一首才是唐诗第一?
  9. 广东省计算机一级技巧,广东省计算机一级
  10. 如何去优化一个网站做到更好