0

0

css动画如何实现元素平滑过渡_用@keyframes制作动画效果

P粉602998670

P粉602998670

发布时间:2026-03-03 14:35:03

|

494人浏览过

|

来源于php中文网

原创

直接改transform无动画效果是因为未触发动画机制:css动画需显式声明animation或transition,仅写transform不会自动过渡;@keyframes仅为定义蓝图,必须通过animation属性挂载且参数正确(如duration>0、fill-mode设forwards等);简单状态切换优先用transition,性能更好且支持反向;动画卡顿常因触发重排(如用left/top)、未启用硬件加速或混用布局属性所致。

css动画如何实现元素平滑过渡_用@keyframes制作动画效果

为什么直接改 transform 但没动画效果?

常见误区是以为只要写了 @keyframes 就自动动起来,其实关键在触发:CSS 动画不会监听属性变化,必须显式声明 animation 或靠 transition 响应状态变更。比如只写 transform: translateX(100px) 而没配 transition,浏览器就直接跳到目标位置。

若想“平滑过渡”,优先考虑 transition;若需多阶段、循环、精确时序控制,才用 @keyframes + animation

@keyframes 动画必须配合 animation 属性才生效

@keyframes 只是定义动作蓝图,不绑定到元素上等于没写。必须用 animation(或其子属性)挂载到目标选择器。

  • animation-name 必须与 @keyframes 后的名称完全一致(区分大小写)
  • animation-duration 必须大于 0s,否则视为无效动画
  • 默认 animation-fill-modenone,动画结束后元素会“弹回”初始样式;需要保持终点状态得加 forwards
  • 别漏写 animation-timing-function,否则默认是 ease(不是线性),可能和预期不符

示例:

立即学习前端免费学习笔记(深入)”;

Qwen
Qwen

阿里巴巴推出的一系列AI大语言模型和多模态模型

下载
@keyframes slideIn {
  from { transform: translateX(-20px); opacity: 0; }
  to { transform: translateX(0); opacity: 1; }
}
.box {
  animation: slideIn 0.3s ease-out forwards;
}

transition 实现更轻量的平滑过渡

如果只是响应 hover、class 切换、JS 修改样式等简单状态变化,transition@keyframes 更简洁、性能更好,且天然支持反向过渡。

  • 只对可动画的属性起作用,如 transformopacitycolorheightmargin 等会触发重排,慎用
  • 推荐始终用 transformopacity,它们走 GPU 合成层,不触发布局重算
  • 多个属性过渡要写全,或用 all(但注意副作用,比如意外过渡了不该动的属性)
  • 过渡时间建议设为 0.2–0.4s,太短不明显,太长拖沓

示例:

立即学习前端免费学习笔记(深入)”;

.btn {
  opacity: 0.7;
  transform: scale(1);
  transition: opacity 0.25s, transform 0.25s;
}
.btn:hover {
  opacity: 1;
  transform: scale(1.05);
}

动画卡顿或闪烁的几个隐蔽原因

即使代码看起来没问题,也可能因底层渲染机制导致掉帧或闪屏,尤其在移动端。

  • 用了 left/top 等定位属性做动画 → 强制重排,改用 transform: translate()
  • 动画元素没开启硬件加速 → 加 transform: translateZ(0)will-change: transform(仅必要时加,别滥用)
  • @keyframes 中混用了布局触发属性(如 width + transform)→ 浏览器无法优化,拆成独立动画层
  • 动画频率过高(如 animation-iteration-count: infinite 配超短 duration)→ 视觉干扰大,也增加 CPU/GPU 负担

真正难调的往往不是怎么写,而是怎么让动画既顺又省资源——多数时候,少写几行 @keyframes 比堆参数更有效。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

201

2023.11.20

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

432

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

600

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

747

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

24

2025.12.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

530

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

514

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

678

2023.08.03

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

0

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

CSS教程
CSS教程

共754课时 | 38.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号