万字详解CSS动画核心——@keyframes,看完就会做动画!

article/2025/6/7 12:03:49

新手福利  --  还在为CSS动画发愁?一篇搞定@keyframes所有知识点!


一、什么是@keyframes?

简单说‌:@keyframes 是CSS3的 ‌动画关键帧规则‌,就像导演给动画片分镜头一样,你可以定义动画在不同时间点的样式变化。

举个栗子🌰‌:
想让一个方块从左到右移动,你需要告诉浏览器:

  • 开始时(0%)在左边
  • 结束时(100%)在右边

这就是@keyframes的核心作用!


二、最简语法结构(5秒上手)
@keyframes 动画名称 {0% { /* 初始状态样式 */ }50% { /* 中间状态样式 */ }100% { /* 结束状态样式 */ }
}

参数解释表‌:

组成部分说明必填
@keyframes声明动画的关键字
动画名称自定义的动画名字(如:move)
0% / from动画开始时的样式
100% / to动画结束时的样式
中间百分比(如50%)动画执行到一半时的样式


三、手把手创建第一个动画(代码+效果)

目标‌:让一个方块水平向右移动200px

HTML‌:

<div class="box"></div>

CSS‌:

.box {width: 50px;height: 50px;background: red;/* 应用动画:名称 时长 速度曲线 重复次数 */animation: move 2s ease infinite;
}/* 关键帧动画 */
@keyframes move {0% {transform: translateX(0);}100% {transform: translateX(200px);}
}

效果‌:红色方块会无限循环向右滑动 ➡️

transform知识点可看 CSS3 transform 属性详解


四、核心属性详解(附代码片段)
1. 动画时间轴控制

css

animation: 动画名称 | 时长 | 速度曲线 | 延迟 | 次数 | 方向;

常用属性表‌:

属性可选值默认值
animation-name自定义的动画名称none
animation-duration时长(如:2s / 500ms)0s
animation-timing-functionease / linear / ease-in-out等ease
animation-delay延迟开始时间(如:1s)0s
animation-iteration-count数字 / infinite1
animation-directionnormal / reverse / alternatenormal

示例‌:让方块先快后慢,延迟1秒执行,来回运动3次(在三中示例代码中改变即可看到效果)

animation: move 2s ease-in-out 1s 3 alternate;

五、进阶技巧(新手必看!)
1. 多状态动画(上面为单个示例代码,下面为完整代码)
@keyframes color-change {0% { background: red; }50% { background: yellow; transform: scale(1.2); }100% { background: green; }
}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.box {width: 50px;height: 50px;/* 应用动画:名称 时长 速度曲线 重复次数 */animation: move 2s ease infinite;}/* 关键帧动画 */@keyframes move {0% { background: red; }50% { background: yellow; transform: scale(1.2); }100% { background: green; }}</style>
</head>
<body><div class="box"></div>
</body>
</html>

效果:红 → 黄(放大) → 绿(可复制代码到VScode里观察,不便显示视频)

2. 组合动画
@keyframes combo {0% { transform: translateX(0) rotate(0); }50% { transform: translateX(200px) rotate(180deg); }100% { transform: translateX(0) rotate(360deg); }
}

效果:移动 + 旋转组合动画


六、常见问题解答(新手避坑指南)

 问题1‌:为什么我的动画不生效?
   检查步骤:

  1. 是否定义了@keyframes名称
  2. 元素是否应用了animation属性
  3. 是否存在拼写错误

问题2‌:如何让动画停留在最后一帧?
  设置:animation-fill-mode: forwards;

问题3‌:如何暂停动画?
  使用JavaScript控制:

element.style.animationPlayState = 'paused'; // 暂停
element.style.animationPlayState = 'running'; // 恢复

七、实战案例合集
案例1:呼吸灯效果
@keyframes breathing {0%, 100% { opacity: 0.5; transform: scale(1); }50% { opacity: 1; transform: scale(1.2); }
}
案例2:加载旋转图标
@keyframes spin {from { transform: rotate(0deg); }to { transform: rotate(360deg); }
}
.loader {animation: spin 1s linear infinite;
}
案例3:弹跳小球
@keyframes bounce {0%, 100% { transform: translateY(0); }50% { transform: translateY(-50px); }
}

八、浏览器兼容性处理

主流浏览器‌:Chrome/Firefox/Safari/Edge 等现代浏览器全支持
老旧浏览器‌:需要添加前缀(可使用PostCSS自动添加)

@-webkit-keyframes {} /* Chrome/Safari */
@-moz-keyframes {} /* Firefox */
@-o-keyframes {} /* Opera */

九、学习资源推荐
  • MDN官方文档:MDN @keyframes
  • CSS动画可视化工具:CSS Animations Generator
  • 动画曲线参考:Easing Functions Cheat Sheet

十、总结

掌握@keyframes只需三步:
1️⃣ 定义关键帧动画
2️⃣ 应用animation属性
3️⃣ 调试参数优化效果

动手实践才是王道!‌ 看完马上打开编辑器写个会动的方块试试吧!


感谢文章指导:@没事早点睡666


http://www.hkcw.cn/article/tVyBjkReqR.shtml

相关文章

【氮化镓】GaN HMETs器件物理失效分析进展

2021 年 5 月,南京大学的蔡晓龙等人在《Journal of Semiconductors》期刊发表了题为《Recent progress of physical failure analysis of GaN HEMTs》的文章,基于多种物理表征技术及大量研究成果,对 GaN HEMTs 的常见失效机制进行了系统分析。文中先介绍失效分析流程,包括使…

工业智能网关保障冷冻仓储设备无人值守安全运行

一、项目背景 冷链物流行业在近年来发展迅速&#xff0c;冷库作为其中的关键环节&#xff0c;其制冷设备的稳定运行至关重要。传统的冷库制冷设备监控方式存在诸多弊端&#xff0c;如需要人工现场巡检&#xff0c;不仅效率低下&#xff0c;且难以及时发现问题&#xff1b;数据…

电工基础【5】简单的电路设计接线实操

07 简单的电路设计 传送带控制示例图 传送带可以转的&#xff0c;电机带动它转。好&#xff0c;这红色的是停止按钮。绿色1启动按钮&#xff0c;这是自锁电路。 原本绿色1启动按钮(按下转、松开转) 客户想加个绿色2手动按钮(按下停、松开转)。 我们前面也学过那个点动了&#…

手机上网可以固定ip地址吗?详细解析

在移动互联网时代&#xff0c;手机已成为人们日常上网的主要设备之一。无论是工作、学习还是娱乐&#xff0c;稳定的网络连接都至关重要。许多用户对IP地址的概念有所了解&#xff0c;尤其是固定IP地址的需求。那么&#xff0c;手机上网能否固定IP地址&#xff1f;又该如何实现…

QGIS 矢量数据属性表中文乱码解决方案:4 步修复编码匹配问题

在QGIS中导入矢量数据后&#xff0c;属性表出现中文字符乱码&#xff0c;多由字符编码不匹配导致。以下是条理清晰的解决方案&#xff0c;可整理为博客内容&#xff1a; 目录 一、问题根源&#xff1a;编码不匹配二、解决方案&#xff1a;分场景修复编码1. 图层属性修改编码&am…

Qwen2.5-VL 视觉编码器的SwiGLU

Qwen2.5-VL 视觉编码器的SwiGLU flyfish 视觉编码器在多模态大模型中扮演着至关重要的角色。我们从头开始训练了一个原生动态分辨率的 ViT&#xff0c;包括 CLIP、视觉-语言模型对齐和端到端训练等阶段。为了解决多模态大模型在训练和测试阶段 ViT 负载不均衡的问题&#xff…

Unity UI 性能优化终极指南 — Image篇

&#x1f3af; Unity UI 性能优化终极指南 — Image篇 &#x1f9e9; Image 是什么&#xff1f; Image 是UGUI中最常用的基本绘制组件支持显示 Sprite&#xff0c;可以用于背景、按钮图标、装饰等是UI性能瓶颈的头号来源之一&#xff0c;直接影响Draw Call和Overdraw &#x1…

Baklib内容中台AI重构智能服务

AI驱动智能服务进化 在智能服务领域&#xff0c;Baklib内容中台通过自然语言处理技术与深度学习框架的深度融合&#xff0c;构建出具备意图理解能力的知识中枢。系统不仅能够快速解析用户输入的显性需求&#xff0c;更通过上下文关联分析算法识别会话场景中的隐性诉求&#xf…

论文分类打榜赛Baseline:ms-swift微调InternLM实践

本文来自社区投稿&#xff0c;作者尖米、张富才。 书生大模型实战营第5期已正式启动&#xff0c;本期实战营新增「论文分类打榜赛」&#xff0c;以帮助学员更好地掌握大模型技能。 本文将手把手带领大家如何用 ms-swiftt 微调 InternLM 模型&#xff0c;轻松上手论文自动分类…

v4l2常见操作-查看当前摄像头信息,帧率,控制参数,分辨率,支持格式,抓图实践等

一&#xff1a;查看当前有哪些摄像头 grep /sys/class/video4linux/video*/name 例如以下为USB插入式camera 二&#xff1a;查看当前摄像头支持的分辨率 v4l2-ctl -d /dev/video14 --get-fmt-video 例如以下摄像头支持的video捕获分辨率为3840*2160 三&#xff1a;查看当前…

MaxCompute开发UDF和UDTF案例

文章目录 一、Java开发UDF1、创建Maven项目2、创建UDF类3、打包上传资源4、创建函数MyUDF5、SQL验证 二、Java开发UDTF1、创建Maven项目2、创建UDTF类3、打包上传更新资源4、创建函数MyUDTF5、SQL验证 三、常见问题1、发布函数报错 一、Java开发UDF 1、创建Maven项目 创建Mav…

ROS2学习(17)------ROS 2 Gazebo 三维物理仿真平台简介及举例使用

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 ROS版本&#xff1a;2 ROS 2 Gazebo 三维物理仿真平台简介 Gazebo 是一个强大的三维机器人仿真环境&#xff0c;它能够模拟复杂的机器人系统和环境。结合 ROS 2&#xff0c;你可以使用 Gaze…

定时通知群内值班人功能

from app.external.zhiban import default_zhiban_api_client import requests import json from datetime import datetimedef send_daily_reminder():# app_map [# {"name": "平台-存储云平台服务号", "type": "app"},# {&…

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…

04 APP 自动化- Appium toast 元素定位列表滑动

文章目录 一、toast 元素的定位二、滑屏操作 一、toast 元素的定位 toast 元素就是简易的消息提示框&#xff0c;toast 显示窗口显示的时间有限&#xff0c;一般3秒左右 # -*- codingutf-8 -*- from time import sleep from appium import webdriver from appium.options.an…

C++ -- 继承

继承 1. 继承的概念及定义1.1 概念1.2 继承定义 1.2.1 格式1.2.2 继承基类成员访问方式的变化2. 基类和派生类对象赋值转换3. 继承中的作用域4. 派生类的默认成员函数5. 继承与友元6. 继承与静态成员7. 菱形继承7.1 单继承7.2 多继承7.3 菱形继承7.4 虚拟继承virtual 1. 继承的…

K8S上使用helm部署 Prometheus + Grafana

一、使用 Helm 安装 Prometheus 1. 配置源 地址&#xff1a;prometheus 27.19.0 prometheus/prometheus-community # 添加repo $ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts "prometheus-community" has been added…

湖北理元理律师事务所:系统性债务化解中的法律技术革新

一、打破债务困局的核心&#xff1a;精准责任切割 传统债务处理常陷入"全额偿还"或"逃废债"的二元对立。法律视角下的解决方案在于&#xff1a; 通过法定程序分离三类债务&#xff1a; 无效债务&#xff1a;年利率超LPR四倍部分&#xff08;《民法典》第…

Android Studio 向模拟器手机添加照片、视频、音乐

Android Studio 向模拟器手机添加照片、视频、音乐(其实都是一样的&#xff0c;只是添加到不同的文件夹&#xff09;&#xff0c;例如我们在很多程序中功能例如&#xff1a;选择头像&#xff0c;跳转到手机相册选择头像&#xff0c;此时相册为空&#xff0c;即模拟器没有图片资…

vscode使用“EIDE”和“Cortex-Debug”插件利用st-link插件实现程序烧写以及调试工作

第一步&#xff1a;安装vscode插件“EIDE”EIDE和“Cortex-Debug”。 第二步&#xff1a;配置EIDE 2.1安装“实用工具”&#xff1a; 2.2 EIDE插件配置&#xff1a;根据安装的keil C51 keil MDK IAR的相关路径设置 第三步&#xff1a;配置Cortex-Debug插件 点击settings.jso…