当前位置: 首页 > news >正文

CSS动画实现

一、CSS 动画类型

1. Transition 过渡动画

  • 作用:实现属性值的平滑过渡(常用于 hover 效果)。
  • 核心属性
    • transition-property:指定参与动画的属性(如 width, background-color)。
    • transition-duration:动画持续时间(单位:s/ms)。
    • transition-timing-function:动画速度曲线(如 linear, ease-in-out)。
    • transition-delay:动画延迟时间。
    • 简写transition: [属性] [持续时间] [速度函数] [延迟时间]

示例

.box {width: 100px;transition: width 0.5s ease-in-out 0.2s;
}.box:hover {width: 200px;
}

2. Animation 关键帧动画

  • 作用:通过定义关键帧(@keyframes)实现复杂动画。
  • 核心属性
    • animation-name:绑定的关键帧名称。
    • animation-duration:动画总时长(单位:s/ms)。
    • animation-timing-function:速度曲线。
    • animation-delay:延迟时间。
    • animation-iteration-count:播放次数(infinite 表示无限循环)。
    • animation-direction:播放方向(如 alternate 反向循环)。
    • animation-fill-mode:动画前后状态(如 forwards 保留结束状态)。
    • 简写animation: [名称] [持续时间] [速度函数] [延迟] [次数] [方向] [填充模式]

示例

@keyframes slide {0% { transform: translateX(0); }100% { transform: translateX(100px); }
}.box {animation: slide 2s ease-in 1s infinite alternate;
}

二、动画速度函数(Timing Function)

常见类型及效果

函数名效果描述示例代码
linear匀速(从开始到结束速度不变)transition-timing-function: linear;
ease默认值,先慢后快再慢(类似抛物线)transition-timing-function: ease;
ease-in慢速开始,逐渐加速transition-timing-function: ease-in;
ease-out慢速结束,逐渐减速transition-timing-function: ease-out;
ease-in-out开始和结束都慢速,中间加速transition-timing-function: ease-in-out;
cubic-bezier(x1,y1,x2,y2)自定义贝塞尔曲线(通过在线工具生成)transition-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);

示例:自定义贝塞尔曲线

/* 使用在线工具(如 https://cubic-bezier.com/)生成曲线参数 */
.btn {transition: transform 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
}

三、动画相关单位详解

1. 时间单位

单位说明动画场景示例
s秒(1s = 1000ms)transition: 0.5s
ms毫秒animation-delay: 200ms

示例

/* 持续时间为 2.5 秒 */
animation-duration: 2.5s;/* 延迟 300 毫秒后开始 */
animation-delay: 300ms;

2. 长度单位

单位说明动画场景示例
px像素(绝对单位)transform: translateX(100px)
em相对字体大小font-size: 1.2em 的过渡
rem相对根元素字体大小响应式布局中的平滑缩放
%百分比(相对父元素或视口)宽度从 50%100% 的过渡
vw/vh视口宽度/高度的百分比全屏动画效果
ch字符宽度(基于当前字体)文本动画的动态调整

示例

/* 宽度从 50% 到 100% 的过渡 */
.box {width: 50%;transition: width 0.5s ease;
}.box:hover {width: 100%;
}

3. 角度单位

单位说明动画场景示例
deg度数(如 360degrotate(45deg)
rad弧度(如 π rad复杂旋转动画
turn圈数(如 0.5turn360° 旋转的简洁写法

示例

/* 旋转 45 度 */
@keyframes spin {0% { transform: rotate(0deg); }100% { transform: rotate(360deg); }
}

四、动画性能优化技巧

  1. 使用硬件加速

    • 添加 transformopacity 属性,触发 GPU 渲染。
    • 示例:will-change: transform;
  2. 避免过度绘制

    • 减少同时动画的元素数量,优先优化关键路径。
  3. 选择合适的属性

    • 避免直接动画化 widthheight(触发重排),优先使用 transformopacity

五、动画控制属性详解

属性说明示例
animation-play-state暂停/恢复动画(paused / running.box:hover { animation-play-state: paused; }
animation-fill-mode控制动画前后状态forwards(保留结束状态)

示例

/* 动画结束后保留最终状态 */
.box {animation: slide 2s ease-in 1s infinite alternate;animation-fill-mode: forwards;
}

六、混合动画(Transition + Animation)

  • Transition:适合简单交互(如按钮 hover)。
  • Animation:适合复杂序列(如加载图标、路径动画)。

示例

/* Transition 实现按钮悬停效果 */
.button {background-color: #ccc;transition: background-color 0.3s ease;
}.button:hover {background-color: #333;
}/* Animation 实现无限旋转的加载动画 */
.spinner {animation: spin 1s linear infinite;
}@keyframes spin {0% { transform: rotate(0deg); }100% { transform: rotate(360deg); }
}

七、兼容性处理

  • 使用 -webkit- 前缀(如 -webkit-animation)确保兼容性,但现代浏览器已广泛支持标准属性。

八、调试工具

  • Chrome DevTools:动画面板可实时查看关键帧和时间线。
  • Firefox 动画调试器:分析动画性能与关键帧。

九、单位与属性的关联

单位类型常见属性示例
时间单位 (s/ms)transition-duration, animation-duration, animation-delaytransition: 0.5s
长度单位 (px/%/rem)transform, width, heighttransform: translateX(50px)
角度单位 (deg/rad)rotate, skewrotate(45deg)

十、总结

  • 推荐实践:优先使用 transformopacity 实现高性能动画。
  • 性能优化:避免直接动画化 widthheight,减少重排。
  • 复杂动画:使用 @keyframes 定义关键帧,结合 animation 属性控制行为。
http://www.xdnf.cn/news/518005.html

相关文章:

  • React方向:react脚手架的使用
  • 【快速解决】彻底卸载VMWare
  • 2025.5.17总结
  • 时间服务器深度解析与实战指南:从原理到企业级部署
  • GO学习指南
  • INA226 高侧/低侧测量、双向电流/功率监视器,具有I2C兼容接口
  • 处理金融数据,特别是股票指数数据,以计算和分析RSRS(相对强度指数)
  • NE555双音门铃实验
  • 电子电路:阻抗是什么,容抗又是什么?
  • Python打卡 DAY 29
  • Baklib赋能企业知识资产AI化升级
  • Python 中二维列表(list)(嵌套列表)详解
  • 3Dmax中用RayFire实现破碎动画效果
  • Python黑魔法与底层原理揭秘:突破语言边界的深度探索
  • TensorRT
  • 提取YOLO检测框-以车牌识别为例
  • 远程文件传输解决方案:用群晖NAS Cloud Sync实现跨地区传输与多人同时传输时的优化
  • 什么是 Boosting
  • BOM知识点
  • 加密芯片法(一)ATSHA204A 特性理解
  • 使用Redission来实现布隆过滤器
  • 【八股战神篇】MySQL高频面试题
  • FreeTex v0.3.0:支持静默运行/软件体积压缩
  • LLM笔记(八)Transformer学习
  • 2025年- H29-Lc137- 19.删除链表的倒数第N个节点(快慢指针)---java版
  • WebSocket解决方案的一些细节阐述
  • 国内人工智能行业研究报告 目录
  • 三相逆变器下垂均流控制策略simulink仿真
  • 通过觅思文档项目实现Obsidian文章浏览器在线访问
  • 基于OpenCV的实时文档扫描与矫正技术