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

news2024/11/13 13:03:10

前言

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

相比较于传统的脚本实现动画技术,使用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.coloradmin.cn/o/2150106.html

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

相关文章

Trainer API训练属于自己行业的本地大语言模型 医疗本地问答大模型示例

Trainer API 是 Hugging Face transformers 库中强大而灵活的工具&#xff0c;简化了深度学习模型的训练和评估过程。通过提供高层次的接口和多种功能&#xff0c;Trainer API 使研究人员和开发者能够更快地构建和优化自然语言处理模型 文章目录 前言一、Trainer API它能做什么…

Machine Learning Specialization 学习笔记(3)

文章目录 前言一、神经网络基本概念基本组成工作流程训练过程类型应用举例不同层次特征的学习 为什么从基础特征到复杂特征逐渐推进什么是感受野更简单的解释具体示例总结 二、TensorFlow实现简单神经网络安装及环境配置数据预处理标准化 Dense层Convolutional Layer训练DEBUG …

独立站技能树/工具箱1.0 总纲篇丨出海笔记

正所谓要把一件事做到90分很难&#xff0c;但做到60分基本上照着SOP做到位都没问题&#xff0c;如果我们能把每件事都做到60分&#xff0c;那绝对比至少60%的人都强&#xff0c;除非你的对手不讲武德——那就是他很可能看了我这篇文章&#xff0c;不但每方面都超过及格线&#…

MySQL高阶1853-转换日期格式

目录 题目 准备数据 分析数据 总结 题目 给定一个Days表&#xff0c;请你编写SQL查询语句&#xff0c;将Days表中的每一个日期转化为"day_name, month_name day, year"格式的字符串。 返回的结果表 不计顺序 。 准备数据 Create table If Not Exists Days (d…

Arthas 全攻略:让调试变得简单

文章目录 一、简介二、命令列表 一、简介 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff…

排序---冒泡排序、堆排序

一、冒泡排序 相邻两个位置交换&#xff0c;假设排升序&#xff0c;就不断把最大的往后拿&#xff0c;所以这段序列从后往前变得有序。 //flag为0&#xff0c;即这个数组已经是有序的了&#xff0c;节省循环次数 二、堆排序&#xff08;数组实现&#xff09; 具体原理介绍看这…

jetcache-阿里多级缓存框架神器一定要掌握

文章目录 1. 简介2. springboot集成jetcache2.1 引入依赖2.2 配置文件2.3 高级API模式&#xff1a;通过CacheManager使用缓存&#xff0c;2.7 版本才可使用2.4 &#xff08;推荐&#xff09;AOP模式&#xff1a;通过Cached,CacheUpdate,CacheInvalidate注解 1. 简介 JetCache是…

局部整体(六)利用python绘制树状图

局部整体&#xff08;六&#xff09;利用python绘制树状图 树状图&#xff08; Dendrogram&#xff09;简介 由一个根节点组成&#xff0c;根节点产生多个通过分支连接的子节点。常用于表示层次结构或显示聚类算法的结果。树状图既可以看明白数据的层次结构&#xff0c;也能明…

兴业小知识|法拍房你不知道的省钱小技巧~划走可就亏大了

如果说二手房市场是买卖双方之间的博弈&#xff0c;那法拍房市场则是纯买方的心理游戏。 在法拍房竞拍过程中&#xff0c;有人稳如泰山&#xff0c;有人坐立不安&#xff0c;每一次的出价都是对相互底线的一番试探。 有激进竞拍&#xff0c;拍出天价的&#xff0c;有一举夺魁…

2024.9.20营养小题【2】(动态分配二维数组)

这道题里边涉及到了动态分配二维数组的知识点&#xff0c;不刷这道题我也不知道这个知识点&#xff0c;算是一个比较进阶一点的知识点了。 参考&#xff1a;C语言程序设计_动态分配二维数组_哔哩哔哩_bilibili【C/C 数据结构 】二维数组结构解析 - 知乎 (zhihu.com)

网络爬虫Request静态页面数据获取

在现代 Web 开发中,HTTP 请求(Request)是与服务器进行通信的核心操作。无论是在前端还是后端开发中,数据的获取、传递以及处理都离不开请求的应用。特别是在静态页面的数据获取中,使用请求可以将页面变得更加动态和互动,从而大大提升用户体验,使得页面内容更加丰富和灵活…

电风扇制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

电风扇正悄然成为制造业数字化转型浪潮中的一颗璀璨新星。通过构建5G智能工厂物联数字孪生平台&#xff0c;电风扇制造业正以前所未有的速度和精度&#xff0c;推进着整个行业的智能化、网络化与个性化发展。5G技术的飞速发展&#xff0c;为制造业带来了前所未有的通信速度和低…

vue 入门一

参考&#xff1a;丁丁的哔哩哔哩 1.使用vue 1.1 使用CDN的方式使用Vue mount和<div id"counter">关联起来 1.2 vue中的createApp import { createApp } from "vue"; import App from "./App.vue"; createApp(App).mount("#app&qu…

【软件测试】如何设计测试用例? 设计测试用例常用的方法.

目录 一.什么是测试用例?二.总体设计测试用例的万能公式.2.1 功能性能界面兼容易用安全2.2 弱网测试2.3 安装卸载测试. 三. 常用设计具体测试用例的方法3.1 等价类3.2 边界值3.3 正交法3.3.1 正交表3.3.2 如何设计正交表,并根据正交表编写测试用例 3.4 判定表法3.4.1 根据判定…

红日药业携手实在智能,构建RPA数字员工平台满足业务一体化需求 | 实在RPA案例

近日&#xff0c;天津红日药业股份有限公司&#xff08;简称“红日药业”&#xff09;与实在智能达成合作&#xff0c;依托实在智能业内领先的AIRPA技术&#xff0c;红日药业着手构建企业数字员工平台&#xff0c;满足业务一体化需求&#xff0c;培育新质生产力&#xff0c;为企…

基于PHP的电脑线上销售系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的电脑线上销售系…

小程序服务零工市场

零工市场小程序有着信息发布、岗位匹配、线上接单、零工人员保障险参保、技能培训、费用结算、完工确认、服务评价、纠纷调解等功能&#xff0c;为求职者和雇主搭建一座高效、便捷、精准的对接桥梁。 用工单位通过小程序的“雇主找人”&#xff0c;发布招聘信息&#xff0c;找到…

react-native连接android原生模块

目录 搭建react-native项目 搭建node和jdk的环境 搭建Android的环境 创建React-native项目 运行react-native项目 下载夜神模拟器 使用adb连接夜神浏览器。 运行react-native项目 编写原生安卓的apk android studio中编写原生代码 在React-native编写代码。 搭建rea…

【干货分享】2024软件测试面试题汇总

前言 本篇分享的软件测试面试题内容主要包括&#xff1a;测试总体、需求分析、测试计划、测试策略、测试用例、缺陷报告、测试总结报告、白盒测试、单元测试、集成测试、系统测试、验收测试等等26个模块。 1. 什么是软件测试&#xff1f; 答&#xff1a;为了发现程序中的错误…

滚动条指定距离滚动

/*** scroller 滚动条元素* to 滚动到位置* duration 滚动时间*/ function scrollLeftTo (scroller, to, duration) {let rafIdlet count 0const from scroller.scrollLeftconst frames duration 0 ? 1 : Math.round((duration * 1000) / 16)function cancel () {cancelAn…