CSS3动画效果详解

CSS3动画

在CSS3中,animation属性用于实现元素的动画。

animation属性跟transition属性在功能实现上是非常相似的,都是通过改变元素的属性值来实现动画效果。但是,这两者实际上有着本质的区别

  • 对于transition属性来说,它只能将元素的某一个属性从一个属性值过渡到另一个属性值
  • 对于animation属性来说,它可以将元素的某一个属性从第1个属性值过渡到第2个属性值,然后还可以继续过渡到第3个属性值,以此类推。

从以上推断出:transition属性(即CSS3过渡)只能实现一次性的动画效果,而animation属性(即CSS3动画)可以实现连续性的动画效果

CSS3中的animation属性就是为了解决这些问题而提出的。animation属性可以通过控制关键帧来控制动画的每一步,从而实现更为复杂的动画效果。

使用animation属性实现CSS3动画需要两步

  • 定义动画:用@keyframes规则来定义动画的样式
  • 调用动画:用animation属性来调用@keyframes规则定义的动画

使用@keyframes规则创建动画

概念:在CSS3中,使用@keyframes规则来创建动画。创建动画是指从一个CSS样式到另一个CSS样式逐步变化而产生动画效果的过程。在创建动画中,可以多次更改CSS样式的设定。

一个动画由很多画面组成,每一个画面叫做一帧。其中,角色或者物体运动变化的关键动作所处的帧叫做关键帧。创建动画必须定义关键帧。

语法:

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

属性值说明

属性值说明
animation当前动画的名称,它将作为引用该动画时的唯一标识,因此不能为空
keyframes-selector关键帧选择器,指定当前关键帧在整个动画过程中的位置,其值可以是from和to,或者百分比。其中,from和0%效果相同(表示动画的开始),to和100%效果相同(表示动画的结束)
css-style定义执行到当前关键帧时对应的动画状态,由CSS样式属性进行定义,多个属性之间用分号(;)分隔,且属性不能为空。

实例:仅定义开头和结尾

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>@keyframes创建动画</title><style>*{padding:0;margin:0;}div{width:200px;height:150px;margin:20px auto;border-radius:20px;background-color:blueviolet;}/* 定义动画 */@keyframes colorChange{0%{background-color:blueviolet;}100%{background-color:greenyellow;}}/* 调用动画,这里可以先看后面 */div:hover{animation:colorChange 2s linear 0s 5 normal;}</style></head><body><div class="a"></div></body>
</html>

运行结果

请添加图片描述

实例:定义多个关键帧

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>@keyframes创建动画</title><style>*{padding:0;margin:0;}div{width:200px;height:150px;margin:20px auto;border-radius:50%;background-color:darkblue;cursor:pointer;}/* 定义动画 */@keyframes colorChange{0%{background-color:darkblue;}25%{background:radial-gradient(circle at top,orange 20%,yellow 40%);}50%{background:radial-gradient(circle at center,orange 20%,yellow 40%);}75%{background:radial-gradient(circle at bottom,orange 20%,yellow 40%);}100%{background-color:red;}}/* 调用动画 */div:hover{animation:colorChange 5s linear;}</style></head><body><div class="a"></div></body>
</html>

运行结果
请添加图片描述

@keyframes其中的百分比是“持续时间”。在实例:定义多个关键帧中,定义持续时间为5s,则0%指的是0s时,25%指的是1.25s,50%指的是2.5s,75%指的是3.75s,100%指的是5s.

使用animation属性调用动画

概念:CSS3中的animation属性用于调用由@keyframes规则创建的动画

animation属性是一个复合属性,主要包括6个子属性。

属性值说明
animation-name对于指定CSS属性进行进行操作
animation-duration动画的持续时间
animation-timing-function动画的速率变化方式
animation-delay动画的延迟时间
animation-iteration-count动画的播放次数
animation-direction动画的播放方向,正向还是反向

动画名称:animation-name

概念:animation-name属性用于定义要调用的由@keyframes规则创建的动画名称。调用多个动画名称要以逗号隔开。

语法:

anination-name:keyframename|none;

属性值

属性值说明
none默认值,表示不应用任何动画,该设置也可以用于取消动画
keyframename用于定义要调用的动画名称。多个动画名称以英文逗号隔开

animation-name调用的动画名需要和@keyframes规则定义的动画名完全一致(区分大小写),如果不一致将不会产生任何动画效果。

注意:在animation属性上指定多个以逗号分隔的值时,它们会将根据值的数量以不同的方式分配给animation-name属性指定的动画。

持续时间:animation-duration

概念:animation-duration属性用于定义完成一个动画周期所需要的时间。

语法:

animation-duration:time;

属性值

属性值说明
time它表示以秒(s)或毫秒(ms)为单位的时间。默认值为0,表示没有任何动画效果。当该参数的值为负数时,则被视为0。

动画方式:animation-timing-function

概念:animation-timing-function属性用来定义动画的速度曲线。“速度曲线”,指的是动画执行过程中的速度变化情况

语法:

animation-timing-function:linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier(n,n,n,n);

属性值

属性值说明速率
linear规定以相同速度开始至结束的过渡效果,即”匀速“在这里插入图片描述
ease默认值,规定慢速开始,变快之后慢速结束的过渡效果在这里插入图片描述
ease-in规定速度越来越快的过渡效果在这里插入图片描述
ease-out规定速度越来越慢的过渡效果在这里插入图片描述
ease-in-out规定以慢速开始和结束的过渡效果在这里插入图片描述
cubic-bezier(n.n,n,n)在cubic-bezier函数中自定义值,参数是0~1的数值

说明:animation-timing-function属性取值跟CSS3过渡的transition-timing-function是一样的

延迟时间:animation-delay

概念:animation-delay属性用来定义执行动画之前等待的时间,即指的是规定动画什么时候开始

语法:

animation-delay:time;

属性值

属性值说明
time它表示以秒(s)或毫秒(ms)为单位的时间。默认值为0,表示不延迟(不等待)

播放次数:animation-iteration-count

概念:animation-iteration-count属性用来定义动画的播放次数

语法:

animation-iteration-count:number|infinite;

属性值

属性值说明
number表示动画重复的次数。默认值为1,即指的是动画默认只播放1次。若属性值为一个整数,则规定动画播放次数。若属性值为一个非整数值,则表示播放动画循环的一部分。例如,0.5s将动画只播放一半。负值是无效的。
infinite表示动画无限次循环播放

说明:animation-iteration-count属性可以指定一个或多个以逗号分隔的值

播放方向:animation-direction

概念:animation-direction属性用来定义动画的播放方向

语法:

animation-direction:normal|alternate;

属性值

属性值说明
normal默认值,表示动画每次都顺向播放
reverse表示动画每次都反方向播放
alternate表示动画会在奇数次(1次,3次,5次等)顺向播放,但在偶数次(2次,4次,6次等)逆向播放。

实例:loading效果

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style type="text/css">*{padding:0;margin:0;}.contain{width:100px;margin:20px auto;position:relative;}.contain>i{position:absolute;top:0;width:5px;height:40px;background-color:blueviolet;border-radius:6px;}/*定义动画*/@keyframes loading{0%{transform:scaleY(1);}50%{transform:scaleY(0.5);}100%{transform:scaleY(1);}}/*第1个i元素*/.contain>i:nth-child(1){left: 0;animation-name:loading;animation-duration:1s;animation-timing-function:ease-in;animation-delay:0.1s;animation-iteration-count:infinite;}/*第2个i元素*/.contain>i:nth-child(2){left: 10px;animation-name:loading;animation-duration:1s;animation-timing-function:ease-in;animation-delay:0.3s;animation-iteration-count:infinite;}/*第3个i元素*/.contain>i:nth-child(3){left: 20px;animation-name:loading;animation-duration:1s;animation-timing-function:ease-in;animation-delay:0.6s;animation-iteration-count:infinite;}/*第4个i元素*/.contain>i:nth-child(4) {left: 30px;animation-name:loading;animation-duration:1s;animation-timing-function:ease-in;animation-delay:0.3s;animation-iteration-count:infinite;}</style>
</head>
<body><div class="contain"><i></i><i></i><i></i><i></i></div>
</body>
</html>

运行结果
请添加图片描述

播放状态:animation-play-state

概念:animation-play-state属性用来定义动画的播放状态

语法:

animation-play-state:running|paused;

属性值

属性值说明
running默认值,表示是动画正在播放中
paused表示动画已被暂停

animation属性

概念:animation属性是一个复合属性,可以将以上单项动画子属性在一行内进行复合设置。简写以上繁琐的属性。

语法:

animation:animation-name|animation-duration|animation-timing-function animation-delay|animation-iteration-count|animation-direction;

说明:定义animation属性时必须指定animation-name和animation-duration属性,否则没有动画,或者动画持续时间默认为0,不会播放动画,其余子属性可省略。

实例:loading效果

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style type="text/css">*{padding:0;margin:0;}.contain{width:100px;margin:20px auto;position:relative;}.contain>i{position:absolute;top:0;width:5px;height:40px;background-color:blueviolet;border-radius:6px;}/*定义动画*/@keyframes loading{0%{transform:scaleY(1);}50%{transform:scaleY(0.5);}100%{transform:scaleY(1);}}/*第1个i元素*/.contain>i:nth-child(1){left: 0;animation: loading 1s ease-in 0.1s infinite;}/*第2个i元素*/.contain>i:nth-child(2){left: 10px;animation: loading 1s ease-in 0.3s infinite;}/*第3个i元素*/.contain>i:nth-child(3){left: 20px;animation: loading 1s ease-in 0.6s infinite;}/*第4个i元素*/.contain>i:nth-child(4) {left: 30px;animation: loading 1s ease-in 0.3s infinite;}</style>
</head>
<body><div class="contain"><i></i><i></i><i></i><i></i></div>
</body>
</html>

运行结果

请添加图片描述

从效果上来看,这两者是等价的。相比较用animation属性的子属性,直接使用animation复合属性上更加简洁清楚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前缀数组-截断数组

3956. 截断数组 - AcWing题库 不愧为acwing的中等题&#xff0c;细节是真的多&#xff0c;又又又阴沟翻船了。 题目要我们分成三个数组&#xff0c;求解又集几种分法。普遍思路是首先求解数组总和&#xff0c;除以3求的平均值。 第一个注意点&#xff1a;如果数组给的数的数…

PADS 改变图纸和图页边界大小

PADS 改变图纸和图页边界大小 有时候画一画原理图发现画布不够用了&#xff0c;可改变图纸大小&#xff0c;对应的改变图页边界 若图页边界怎么选择都改变不了&#xff0c;可将途中图页边界删除&#xff0c;重新加载 选择对应的图页边距就好啦 分类: PADS

重学Java 4 进制转换和位运算

天赋不好好使用的话&#xff0c;可是会被收回的哦 ——24.1.13 一、进制转换 1.常用的进制 2.十进制和二进制之间的转换 1.十进制转二进制 辗转相除法——循环除以2&#xff0c;取余数&#xff0c;除到商为0为止&#xff0c;除完后&#xff0c;由下往上&#xff0c;得出换算后…

一文搞懂,Python网络爬虫

网络爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。从功能上来讲&#xff0c;爬虫一般分为数据采集&…

虚拟主机 如何上传大于100M的文件 php网站程序

问题 虚拟主机上传文件大小限制100m&#xff0c; 有时会遇到非常大的文件上传&#xff0c;上传过程中耗时非常久&#xff0c; 可能服务器的限制设置了上传文件尺寸&#xff0c;返回“413 request entity too large” 整体逻辑 前端&#xff1a;上传文件时&#xff0c;进行文…

P1079 [NOIP2012 提高组] Vigenère 密码

一起来交流编程吧【CSDN app】&#xff1a; http://qm.qq.com/cgi-bin/qm/qr?_wv1027&kx9pL9ccIHGKNLE0CWviAqQ_q6HzxomLW&authKeyVslKe623ptw8VRepda%2Bh0Ttr8Ruz8v%2FBW5HpVzyTWU7ECwpHIZpULMj6qIHYZBVb&noverify0&gro [NOIP2012 提高组] Vigenre 密码 题…

R语言【paleobioDB】——pbdb_collection():从PBDB获取单个采集号的基本信息

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新&#xff0c;该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后&#xff0c;执行本地安装。 Usage pbdb_collection (id, ...) Arguments 参数【…

C语言——内存函数【memcpy,memmove,memset,memcmp】

&#x1f4dd;前言&#xff1a; 在之前的文章C语言——字符函数和字符串函数&#xff08;一&#xff09;中我们学习过strcpy和strcat等用来实现字符串赋值和追加的函数&#xff0c;那么除了字符内容&#xff0c;其他的数据&#xff08;例如整型&#xff09;能否被复制或者移动呢…

【代码随想录】刷题笔记Day51

前言 周六刷题&#xff0c;闻所未闻吧兄弟&#xff0c;不用开组会简直太爽啦 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 子序列系列问题&#xff0c;用动态规划解决dp[i]含义 表示i之前包括i的以nums[i]结尾的最长递增子序列的长度递推公式 j从0到i-1各个…

揭示量化投资的神秘面纱:深入了解量化交易的核心原理!

随着科技的进步和大数据时代的到来&#xff0c;量化投资已成为金融市场的热门话题。但很多投资者对于量化投资的概念仍感神秘&#xff0c;不清楚其背后的原理和运作机制。本文将深入揭示量化投资的神秘面纱&#xff0c;帮助读者了解量化交易的核心原理。 量化投资的定义与起源 …

Docker 镜像

1、联合文件系统 UnionFS&#xff08;联合文件系统)&#xff1a;Union文件系统〈UnionFS)是一种分层、轻量级并且高性能的文件系统&#xff0c;它支持对文件系统的修改作为一次提交来一层层的叠加&#xff0c;同时可以将不同目录挂载到同一个虚拟文件系统下(unite several dir…

CCF认证+蓝桥杯习题训练

贪心 *上取整公式* *代码展示* #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 1e5 10;typedef long long LL;int v[N] , a[N];int main() {int n , d;cin >> n >> d;for(int i 1 ; i < n…

函数式编程 - 组合compose的使用方法

函数式编程中有一个比较重要的概念就是函数组合&#xff08;compose&#xff09;,组合多个函数&#xff0c;同时返回一个新的函数。调用时&#xff0c;组合函数按顺序从右向左执行。右边函数调用后&#xff0c;返回的结果&#xff0c;作为左边函数的参数传入&#xff0c;严格保…

Linux环境下使用flv.js + websokect播放RTSP视频流

本文适用于Linux系统部署Web项目&#xff0c;通过浏览器播放RTSP视频流 背景 ​ 在最近的项目中&#xff0c;涉及到海康威视接入的视频监控播放问题&#xff0c;海康这边可以获取到的视频流是rtsp格式&#xff0c;web端目前没有直接可以播放的组件&#xff0c;于是查阅众多博…

工业级安卓PDA超高频读写器手持掌上电脑,RFID电子标签读写器

掌上电脑&#xff0c;又称为PDA。工业级PDA的特点就是坚固&#xff0c;耐用&#xff0c;可以用在很多环境比较恶劣的地方。 随着技术的不断发展&#xff0c;加快了数字化发展趋势&#xff0c;RFID技术就是RFID射频识别及技术&#xff0c;作为一种新兴的非接触式的自动识别技术&…

python处理目录下文本文件去除空格和空行

一&#xff1a;实现思路&#xff1a; 要想实现去除某个目录下所有txt文件的空格&#xff0c;需要循环遍历一个目录下的所有文件&#xff0c; 获取文件的每行数据去除空格以后&#xff0c;重新保存数据到当前当前文件中。 处理空格,我们使用正则&#xff0c;这样可以去除字符串…

Java并查集设计以及路径压缩实现

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 并查集是一种树型的数据结构 &#xff0c;并查集可以高效地进行如下操作&#xff1a; 查询元素p和元素q是否属于同一组合并元素p和元素q所在的组 1、并查集的结构 并查集也是一种树型结构&#xff0c;但这棵树跟我们之…

C++面试八股--inline函数

1.inline 内联函数 1.1 特征 相当于把内联函数里面的内容写在调用内联函数处&#xff1b;相当于不用执行进入函数的步骤&#xff0c;直接执行函数体&#xff1b;相当于宏&#xff0c;却比宏多了类型检查&#xff0c;真正具有函数特性&#xff1b;编译器一般不内联包含循环、递归…

uniapp 如何使用echarts 以及解决tooltip自定义不生效问题

使用的是echarts-for-wx插件&#xff1b; 正常写法案例&#xff1a;给tooltip数值加个% <template><view><uni-ec-canvas class"uni-ec-canvas"id"uni-ec-canvas"ref"canvas"canvas-id"uni-ec-canvas":ec"ec&quo…

【数据库】sql优化有哪些?从query层面和数据库层面分析

目录 归纳sql本身的优化数据库层面的优化 归纳 这类型问题可以称为&#xff1a;Query Optimization&#xff0c;从清华AI4DB的paper list中&#xff0c;该类问题大致可以分为&#xff1a; Query RewriterCardinality EstimationCost EstimationPlan Optimization 从中文的角…