神奇的css动画:animation、transform、transition

前言

动画包括两个部分:描述动画的样式和用于指定动画开始、结束以及中间点样式的关键帧。

相比较于传统的脚本实现动画技术,使用css动画三个主要优点:

1.能够非常容易创建简单动画,甚至不需要了解JavaScript就能创建动画

2.动画运行效果良好,甚至在低性能的系统上,渲染引擎会使用跳帧或者其他技术以保证动画尽可能的流畅。而是用Javascipt实现的动画通常表现不佳(除非经过很好的设计)

3.让浏览器控制动画序列,允许浏览器优化性能和效果,如降低隐藏选项卡的动画更新频率。

简单来说,看下面的例子:

div{width: 100px;height: 100px;background-color: red;animation: change 3s;
}@keyframes change{0%{transform: translateX(0);}100%{transform: translateX(200px);}
}

1. animation: change 3s 部分是动画的第一部分,用于描述动画的各个规则

2.@keyframes change{}部分就是动画的第二部分,用于指定动画开始、结束以及中间点样式的关键帧

animation语法

创建动画序列,需要使用animation属性或其子属性,该属性允许配置动画时间时长以及其他动画细节,但该属性不能配置动画的实际表现,动画实际表现是由@keyframes规则实现。

 animation的子属性如下:

  • animation-name:指定有@keyframes描述的关键帧名称
  • animation-duration:设置动画的一个周期的时长
  • animation-delay:设置延时,即从元素加载完成之后到动画序列开始执行的这段时间
  • animation-direction:设置动画在每次运行完成时反向运行还是重新回到开始位置重复运行
  • animation-iteration-count:设置动画重复次数,可以指定infinite无线次重复动画
  • animation-timing-function:设置动画速度,即通过建立加速度曲线,设置动画在关键帧之间是如何变化。
  • animation-fill-mode:指定动画执行前后如何为目标元素应用样式
  • @keyframes规则,一个动画想运行,@keyframes是必不可少的,@keyframes设置动画关键帧

        由于动画的时间是通过css样式定义的,关键帧使用<percentage>来指定动画发生的时间点。0%表示动画第一时刻,100%表示动画的最终时刻。因为这两个时间十分重要,所以还有特殊的别名:from和to。这两个都是可选的,若from/0%或to/100%未指定,则浏览器使用计算值开始或结束动画。

        需要注意,对于一个动画,需要了解那些是必须项和非必须项:

  • 必须项:animation-nameanimation-duration 和 @keyframes规则
  • 非必须项:animation-delayanimation-directionanimation-iteration-countanimation-play-stateanimation-timing-functionanimation-fill-mode。当然不是说它们不重要,只是不设置时,它们都有默认值。

如下定义:

p {animation-duration: 3s;animation-name: slidein;
}@keyframes slidein {from {margin-left: 100%;width: 300%;}to {margin-left: 0%;width: 100%;}
}

animation-duration 属性指定 <p> 上的动画从开始到结束耗费 3 秒,@keyframes 指定使用名字为“slidein”的关键帧。

关键帧是用 @keyframes 定义的。该例中,我们只使用了两个关键帧。第一个出现在 0%(此例中使用了别名 from)处,此处元素的左边距为 100%(即位于容器的右边界),宽为 300%(即容器宽度的 3 倍),使得在动画的第一帧中标题位于浏览器窗口右边界之外。

第二帧出现在 100%(此例中使用了别名 to)。元素的左边距设为 0%,宽设为 100%,使得动画结束时元素与窗口左边界对齐。

animation-name / animation-duration

通过animation-name,绑定到选择器的 keyframe 名称,简单来说就是名字,css引擎会找到对应的@keyframes规则,其命名规范是和css规则一样的。

而animation-duration是设置动画一个周期的时长,单位秒或毫秒,例:3s、3000ms。

如下示例中,设置动画整体持续3s。

animation-delay

animation-delay,它可以设置动画延时,即从元素加载完成之后到动画序列开始执行的这段时间。

示例:

  <div class="div1"></div><div class="div2"></div>
div {width: 100px;height: 100px;background: pink;margin: 20px 0;animation-name: move;animation-duration: 2s;
}
.div2{animation-delay: 1s;
}
@keyframes move {0% {transform: translateX(0);}100% {transform: translateX(200px);}
}

关于animation 属性,也可以简写为animation :move 2s 1s,第一个时间值表示持续时间,第二个时间表示演示时间。

animation-timing-function

规定动画的速度曲线,默认ease

  • linear:从头到尾的速度相同
  • ease(默认):以低速开始,然后加快,在结束之前变慢
  • ease-in:动画以低速开始
  • ease-out:动画以低速开始
  • ease-in-out:动画以低速开始和结束
  • cubic-bezier(n,n,n,n):动画以低速开始和结束白塞尔曲线

示例:

  <div class="item"></div><div class="item"></div><div class="item"></div><div class="item"></div><div class="item"></div><div class="item"></div>
.item{width: 50px;height: 50px;border-radius: 50%;background: pink;margin: 20px;
}
.item:nth-child(1){background: red;animation: sprite 3s linear infinite;
}
.item:nth-child(2){background: green;animation: sprite 3s ease infinite;
}
.item:nth-child(3){background: blue;animation: sprite 3s ease-in infinite;
}
.item:nth-child(4){background: rgb(15, 15, 4);animation: sprite 3s ease-out infinite;
}.item:nth-child(5){background: purple;animation: sprite 3s ease-in-out infinite;
}
.item:nth-child(6){background: purple;animation: sprite 3s cubic-bezier(0.25, 0.4, 0.4, 1) infinite;
}@keyframes sprite {0% { transform: translateY(0);}100% { transform: translateY(200px);}
} 

 animation-iteration-count

定动画播放次数,默认1;n(次数),infinite(无限)。

animation-iteration-count: n | infinite; 

animation-direction

规定是否应该轮流反向播放动画;normal(正常播放),alternate(交替播放),reverse(倒序播放),alternate-reverse(反向交替播放)。

animation-direction: normal | alternate | reverse | alternate-reverse; 

animation-play-state

规定动画正在运行还是暂停,paused(动画已暂停),running(动画正在播放)。

animation-play-state: paused | running; 

transform

transform允许你选装、缩放、倾斜或平移指定元素。旋转分为2D旋转和3D旋转,正数为顺时针旋转,负数为逆时针旋转,单位:deg

rotate-旋转

transform-origin

旋转元素一般配合着transform-origin属性,transform-origin是用来设置旋转点的。

默认值是center center即中心点

transfrom-origin:0px 0px; 

2D旋转

transform: rotate(45deg); // 顺时针旋转45度 

示例:

div{width: 100px;height: 100px;background-color: rgb(64, 136, 44);animation: change 1s linear infinite;
}
@keyframes change{0%{transform: rotate(0deg);}100%{transform: rotate(360deg);}
}

3D旋转

 

transform: rotate3d(x,y,z,angle); 

x:是一个0到1之间的数值,主要用来描述元素围绕X轴旋转的矢量值。
y:是一个0到1之间的数值,主要用来描述元素围绕Y轴旋转的矢量值。
z:是一个0到1之间的数值,主要用来描述元素围绕Z轴旋转的矢量值。
angle:一个角度值,指定在3D空间旋转角度。

scale - 缩放

transfrom:scale(x,y); 

x:表示水平方向缩放的倍数。
y:表示垂直方向缩放的倍数,y为可选参数,不设置则表示x,y同时缩放相同倍数。

示例:

 div{width: 100px;height: 100px;background-color: rgb(64, 136, 44);animation: change 1s linear infinite;
}
@keyframes change{0%{transform: scale(0.5);}100%{transform: scale(1);}
}

 skew-扭曲

transform: skew(x,y); 

x:x轴(水平方向)倾斜
y:y轴(水平方向)倾斜

 translate - 移动

transition

        transition css属性是 transition-property、transition-duration、transition-timing-function 和 transition-delay 的一个简写属性。过度可以为一个元素不同状态之前切换的时候定义不同的过渡效果。像是 :hover,:active 或者通过 JavaScript 实现的状态变化。也是css过度目前比较常用的

  • transition-property:过度属性,默认值:all
  • transition-duration:过度持续时间,默认值:0s
  • transition-timing-function:过度函数,默认值ease
  • transition-delay:过度延迟时间,默认值0s

示例:

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

进制转换,原码,反码,补码,二进制位运算及应用

进制转换 2B&#xff08;0--1)&#xff0c;8O(0--7)&#xff0c;10D&#xff0c;16H&#xff08;0——9,A——F&#xff09; 8位二进制数&#xff0c;左边高位&#xff0c;右边低位 2&#xff0c;8&#xff0c;16 -> 10进制整数&#xff0c;小数 整数&#xff1a;从后往…

iftop流量监控工具

一、iftop简介 iftop可以用来监控网卡的实时流量&#xff08;可以指定网段&#xff09;、反向解析IP、显示端口信息等&#xff0c;详细的将会在后面的使用参数中说明。 二、安装iftop 1、编译安装 如果采用编译安装可以到iftop官网下载最新的源码包。 1.1 CentOS上安装所需…

有没有自带财务管理功能的海外仓系统?

在全球化的商业环境中&#xff0c;海外仓作为连接国际市场的物流枢纽&#xff0c;其重要性日益凸显。然而&#xff0c;随着业务范围的扩展和费用类型的多样化&#xff0c;海外仓在财务管理上面临着诸多挑战。传统的手工计费和对账方式不仅耗时费力&#xff0c;而且容易出错&…

记录一次fs配置导致串线的问题

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 fs在实际的使用过程中也会经常碰到莫名其妙的问题&#xff0c;大部分都是配置问题。 环境 CentOS 7.9 freeswitch 1.10.7 docker 26.1.1 问题描述 组网方案如下。其中的fs-reg是注册服务器&#xff0c;fs1和fs2是…

栈的各种接口的实现(C)

栈的概念 栈&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。压栈&#xff1a;…

join 命令:合并文件

一、命令简介 ​join​ 命令用于合并两个文件&#xff0c;基于一个共同的键&#xff08;key&#xff09;字段&#xff0c;将一个文件中的行与另一个文件中的行合并在一起。 这个键字段在两个文件中必须是相同的&#xff0c;这样 join 才能正确地将行匹配在一起。 ‍ 二、命…

linux系统维护:给linux的根目录分配更多的额外的磁盘空间,实现系统磁盘容量的平滑升级

目录 一、背景说明 二、概念介绍 1、物理卷&#xff08;Physical Volume, PV&#xff09; 2、卷组&#xff08;Volume Group, VG&#xff09; 3、逻辑卷&#xff08;Logical Volume, LV&#xff09;&#xff1a; 三、操作过程 1、vmware中新增磁盘 2、查看磁盘信息 3、格式化…

进阶版水仙花数水是指一个n位数,各个位数字的n次方之和等于该数字本身

两种方法&#xff1a; 第一种&#xff0c;是输入一个数值&#xff0c;判断是否为水仙花数 //打印水仙花数 //水仙花数是指一个n位数&#xff0c;各个位数字的n次方之和等于该数字本身 //如&#xff1a;1531^35^33^3 // //分析&#xff1a; //153/1015 //15/101 //1/100 #incl…

✨机器学习笔记(五)—— 神经网络,前向传播,TensorFlow

Course2-Week1: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Advanced%20Learning%20Algorithms/week1机器学习笔记&#xff08;五&#xff09; 1️⃣神经网络&#xff08;Neural Network&#xff09;2️⃣前向传播&#xff08;Forward propaga…

【C++】list容器的基本使用

一、list是什么 list的底层结构是带头双向循环链表。 相较于 vector 的连续线性空间&#xff0c;list 就显得复杂很多&#xff0c;它是由一个个结点构成&#xff0c;每个结点申请的空间并不是连续的&#xff0c;它的好处是每次插入或删除一个数据&#xff0c;就配置或释放一个…

MATLAB绘图基础8:双变量图形绘制

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 8.双变量图形绘制 8.1 散点图 散点图用于显示两个变量间的关系&#xff0c;每个数据点在图上表示为一个点&#xff0c;一个变量在 X {\rm X} X轴&#xff0c;一个变量在 Y {\rm Y} Y轴&#…

ACE搭建地图,助力企业新媒体矩阵优化升级

在数字化浪潮中&#xff0c;为了创造多元化的用户互动和销售机会&#xff0c;众多企业踊跃投入到线上平台&#xff0c;积极构建新媒体矩阵。 然而这条道路并非是坦途。很多对矩阵不了解或是认识不足的企业&#xff0c;想要搭建好矩阵还需要面临众多难题。 对新手来说&#xff0…

Qt 多线程TCP客户端使用QTimer进行重连服务器———附带详细代码和讲解

文章目录 0 背景1 原理1.1 QThread的线程归属1.2 Qtimer使用1.3 TCP客户端使用 2 问题解决2.1 解决思路2.2 解决方法 3 完整的代码示例3.1 tcp_client类3.2 主界面类 附录参考 0 背景 在子线程中&#xff0c;使用Qtimer来进行定时重连TCP服务器&#xff0c;总是会出现跨线程创…

如何通过思维链提升LLM推理能力?

思维链推理(Chain-of-Thought Reasoning)&#xff0c;因其彻底改变了模型处理复杂问题的解决方式&#xff0c;目前已成为人工智能领域最炙手可热的重大进展之一。 通过模拟推理过程&#xff0c;CoT训练大语言模型将复杂的问题拆解&#xff0c;并提供更清晰、更具逻辑的响应(re…

需求4:新加字段(进阶版)

关于加一个字段这种&#xff0c;我前几篇文章已经写过了。这篇文章的这个需求&#xff0c;也是写关于加字段的&#xff0c;只不过与前两篇文章不一样的是&#xff0c;这篇文章的这个需求讲的比较隐晦&#xff0c;需求没有直接跟你说要你加一个字段&#xff0c;要你自己想一下才…

(undone) 学习语音学中关于 i-vector 和 x-vector

来源&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber8461375 (这是一篇跟 X-vector 有关的论文) 这里有更适合初学者的两个资料: 1.https://www.youtube.com/watch?vR3rzN6JYm38 &#xff08;MIT教授的youtube视频&#xff09; 2.https://people.c…

【微信支付-服务商】SpringBoot集成微信服务商支付(多子商户集成)

SpringBoot集成微信服务商支付&#xff08;多子商户集成&#xff09; 前言一、前置工作1、获取商户平台的xxx核心参数2、关联对应的小程序&#xff08;appid&#xff09; 二、SpringBoot集成微信小程序1、引入pom依赖2、yml配置3、java代码文件3.1、Properties 配置类3.2 Confi…

基于JAVA+SpringBoot+Vue的学生干部管理系统

基于JAVASpringBootVue的学生干部管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈…

windows打开可选功能窗口的方式(呜呜设置里面找不到可选功能只能这样找了)

打开方式 winR打开运行窗口&#xff0c;输入fodhelper&#xff0c;按下回车键 即可快速打开可选功能窗口

ChemChat——大语言模型与化学的未来,以及整合外部工具和聊天机器人的潜力

概述 论文地址&#xff1a;https://arxiv.org/abs/2309.16235 虽然近年来技术创新和变革日新月异&#xff0c;从根本上改变了我们对生物化学过程的认识&#xff0c;但化学领域仍花费大量时间和金钱–"10 年 "和 “3000 亿”–将新产品推向市场。这是由于实验室实验的…