CSS @keyframes 动画:颜色变化、背景旋转与放大缩小

在CSS中,@keyframes 是一个强大的工具,它允许我们创建复杂的动画效果。今天,我们将一起探索如何使用 @keyframes 来实现颜色变化、背景旋转以及放大缩小的动画效果。

动画会在 2 秒内循环播放,并在不同的时间点改变盒子的背景颜色和变换(旋转和缩放)。

  • 在 0% 的时间点,盒子的背景颜色是绿色(#4CAF50),没有进行旋转和缩放。
  • 在 25% 的时间点,盒子的背景颜色变为红色(#F44336),同时旋转了 90 度并放大了 10%。
  • 在 50% 的时间点,盒子的背景颜色变为绿色(#0F9D58),旋转了 180 度并回到了初始大小。
  • 在 75% 的时间点,盒子的背景颜色变为蓝色(#00BCD4),旋转了 270 度并再次放大了 10%。
  • 在 100% 的时间点(也就是动画结束时),盒子的背景颜色回到了初始的绿色(#4CAF50),旋转了 360 度(即回到初始位置)并回到了初始大小。

 

一、HTML 结构

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>使用 @keyframes 创建动画</title>  
<style>  /* CSS 样式和关键帧定义将放在这里 */  
</style>  
</head>  
<body>  <div class="animated-box"></div>  </body>  
</html>

二、CSS 样式与 @keyframes 动画

<style>  .animated-box {  width: 100px;  height: 100px;  background-color: #4CAF50;  border-radius: 50%; /* 圆形盒子 */  margin: 50px auto; /* 居中显示 */  animation: colorRotateScale 2s infinite linear; /* 应用动画 */  }  /* 定义关键帧动画 */  @keyframes colorRotateScale {  0% {  background-color: #4CAF50; /* 初始颜色 */  transform: rotate(0deg) scale(1); /* 初始旋转角度和大小 */  }  25% {  background-color: #F44336; /* 颜色变化 */  transform: rotate(90deg) scale(1.1); /* 旋转90度并放大 */  }  50% {  background-color: #0F9D58; /* 颜色变化 */  transform: rotate(180deg) scale(1); /* 旋转180度并回到初始大小 */  }  75% {  background-color: #00BCD4; /* 颜色变化 */  transform: rotate(270deg) scale(1.1); /* 旋转270度并放大 */  }  100% {  background-color: #4CAF50; /* 回到初始颜色 */  transform: rotate(360deg) scale(1); /* 旋转360度并回到初始大小 */  }  }  
</style>

在这个CSS样式中,我们定义了一个名为 colorRotateScale 的 @keyframes 动画。这个动画会在 2 秒内完成一个循环,并且会无限次地重复(infinite)。我们使用 linear 动画缓动函数,确保动画在整个周期内的速度是均匀的。

动画的效果包括:

  • 颜色变化:从绿色(#4CAF50)到红色(#F44336),再到绿色(#0F9D58),最后到蓝色(#00BCD4),并最终回到绿色(#4CAF50)。
  • 背景旋转:从 0 度开始,每过 25% 的时间,就旋转 90 度,直到完成 360 度的旋转。
  • 放大缩小:在动画过程中,盒子会在旋转 90 度和 270 度时稍微放大(1.1 倍),而在其他时间点则保持原始大小。

完整例程

<!DOCTYPE html>  
<html lang="en">  
<head>  
<meta charset="UTF-8">  
<meta name="viewport" content="width=device-width, initial-scale=1.0">  
<title>Keyframe Animation Example</title>  
<style>  .animated-box {  width: 100px;  height: 100px;  background-color: #4CAF50;  border-radius: 50%; /* 圆形盒子 */  margin: 50px auto; /* 居中显示 */  animation: colorRotateScale 2s infinite; /* 应用动画 */  }  /* 定义关键帧动画 */  @keyframes colorRotateScale {  0% {  background-color: #4CAF50; /* 初始颜色 */  transform: rotate(0deg) scale(1); /* 初始旋转角度和大小 */  }  25% {  background-color: #F44336; /* 颜色变化 */  transform: rotate(90deg) scale(1.1); /* 旋转90度并放大 */  }  50% {  background-color: #0F9D58; /* 颜色变化 */  transform: rotate(180deg) scale(1); /* 旋转180度并回到初始大小 */  }  75% {  background-color: #00BCD4; /* 颜色变化 */  transform: rotate(270deg) scale(1.1); /* 旋转270度并放大 */  }  100% {  background-color: #4CAF50; /* 回到初始颜色 */  transform: rotate(360deg) scale(1); /* 旋转360度并回到初始大小 */  }  }  
</style> 
</head>  
<body>  <div class="animated-box"></div>  </body>  
</html>

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

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

相关文章

Grafana 添加一台管理服务器

1、修改prometheus.yml 添加新服务器信息 2、重启pro 3、导入node文件 4、启动node 5、检验数据

微信小程序个人中心、我的界面(示例四)

微信小程序个人中心、我的界面&#xff0c;九宫格简单布局&#xff08;示例四&#xff09; 微信小程序个人中心、我的界面&#xff0c;超简洁的九宫格界面布局&#xff0c;代码粘贴即用。更多微信小程序界面示例&#xff0c;请进入我的主页哦&#xff01; 1、js代码 Page({…

FlaUI

FlaUI是一个基于微软UIAutomation技术&#xff08;简称UIA&#xff09;的.NET库&#xff0c;它主要用于对Windows应用程序&#xff08;如Win32、WinForms、WPF、Store Apps等&#xff09;进行自动化UI测试。FlaUI的前身是TestStack.White&#xff0c;由Roemer开发&#xff0c;旨…

2024年十款开源测试开发工具推荐(自动化、性能、混沌测试、造数据、流量复制)

今天为大家奉献一篇测试开发工具集锦干货。在本篇文章中&#xff0c;将给大家推荐10款日常工作中经常用到的测试开发工具神器&#xff0c;涵盖了自动化测试、性能压测、流量复制、混沌测试、造数据等。 1、AutoMeter-API 自动化测试平台 AutoMeter 是一款针对分布式服务&…

IOT-9608I-L 的GPIO应用

目录 概述 1 GPIO接口介绍 2 板卡上操作IO 2.1 查看IO驱动 2.2 使用ECHO操作IO 2.2.1 端口选择 2.2.2 查看IO 2.2.3 echo操作IO 3 C语言实现一个操作IO的案例 3.1 功能介绍 3.2 代码实现 3.3 详细代码 4 测试 测试视频地址&#xff1a; IOT-9608I-L的一个简单测试&a…

基于昇腾AI | 英码科技EA500I使用AscendCL实现垃圾分类和视频物体分类应用

现如今&#xff0c;人工智能迅猛发展&#xff0c;AI赋能产业发展的速度正在加快&#xff0c;“AI”的需求蜂拥而来&#xff0c;但AI应用快速落地的过程中仍存在很大的挑战&#xff1a;向下需要适配的硬件&#xff0c;向上需要完善的技术支持&#xff0c;两者缺一不可。 基于此&…

Leetcode——面试题02.04.分割链表

面试题 02.04. 分割链表 - 力扣&#xff08;LeetCode&#xff09; 对于该链表OJ&#xff0c;我们两种大的方向&#xff1a; 1.在原链表上修改&#xff1b;2.创建新链表&#xff0c;遍历原链表。 在原链上进行修改&#xff1a;如果该节点的val小于x则继续往后走&#xff0c;如…

低成本微调长文本LLM

低成本微调长文本LLM 最近有一个需求微调长文本的大模型LLM。通常情况下&#xff0c;数据长度扩大后&#xff0c;需要的显存更大。在有限的设备资源上微调长文本的LLM显得很重要了。中文Llama2-7b支持的最大长度为4k&#xff0c;Qwen1.5-7b支持的最大长度为32k&#xff0c;Qwe…

代码随想录算法训练营DAY44|C++动态规划Part6|完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ

文章目录 完全背包理论基础完全背包问题的定义与01背包的核心区别为什么完全背包的循环顺序可以互换&#xff1f;CPP代码 518.零钱兑换II思路CPP代码 377. 组合总和 Ⅳ思路CPP代码扩展题 完全背包理论基础 卡码网第52题 文章链接&#xff1a;完全背包理论基础 视频链接&#xf…

Flutter笔记:Widgets Easier组件库(2)阴影盒子

Flutter笔记 Widgets Easier组件库&#xff08;2&#xff09;&#xff1a;阴影盒子 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…

SpringBoot之自定义注解参数校验

SpringBoot之自定义注解参数校验 为什么要自定义注解 我这里先引入一个例子&#xff0c;就比如我现在要写文章&#xff0c;文章也许写完正要发布&#xff0c;也可以是还没写完正要存草稿&#xff0c;前端往后端发送数据&#xff0c;如果前端的state不是草稿或者已发布状态&…

vue3、element-plus递归实现动态菜单

vue3、element-plus递归实现动态菜单 使用场景&#xff1a;动态菜单为什么使用递归递归在动态菜单中的实现 使用场景&#xff1a;动态菜单 动态菜单是指菜单项的数量和层次结构可能是动态的&#xff0c;通常来自后端或用户输入。这些菜单的特征包括&#xff1a; 多层嵌套&…