CSS学习笔记(二):CSS动画核心属性全解析

CSS动画属性分类

CSS动画属性分为两大核心模块:过渡(Transition)关键帧动画(Animation),辅以变形(Transform)和基础样式控制。


过渡(Transition)属性

transition-property

指定应用过渡效果的CSS属性名称,如widthopacity。可用all表示所有属性。

transition-duration

定义过渡持续时间,单位秒(s)或毫秒(ms),例如0.5s

transition-timing-function

控制动画速度曲线,常用值:

  • ease(默认,先快后慢)
  • linear(匀速)
  • ease-in(加速)
  • ease-out(减速)
  • cubic-bezier(n,n,n,n)(自定义贝塞尔曲线)

transition-delay

设置动画延迟开始时间,如1s表示1秒后触发。

简写语法

css 复制代码
.element {
  transition: property duration timing-function delay;
}
/* 示例 */
.box {
  transition: width 0.3s ease-in-out 0.1s;
}
 

关键帧定义:@keyframes

通过 @keyframes 定义动画序列,指定从开始(from0%)到结束(to100%)的样式变化。

css 复制代码
@keyframes slide-in {
  from { transform: translateX(-100%); }
  to { transform: translateX(0); }
}

动画属性列表

1. animation-name

指定使用的 @keyframes 名称。

css 复制代码
.element { animation-name: slide-in; }
2. animation-duration

设置动画完成一个周期的时间(单位:sms)。

css 复制代码
.element { animation-duration: 2s; }
3. animation-timing-function

控制动画速度曲线,常见值:

  • ease(默认,慢快慢)
  • linear(匀速)
  • cubic-bezier(n,n,n,n)(自定义贝塞尔曲线)
css 复制代码
.element { animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1); }
4. animation-delay

定义动画开始前的延迟时间。

css 复制代码
.element { animation-delay: 1s; }
5. animation-iteration-count

设置动画重复次数:

  • number(如 3
  • infinite(无限循环)
css 复制代码
.element { animation-iteration-count: infinite; }
6. animation-direction

控制动画播放方向:

  • normal(默认,正向播放)
  • reverse(反向播放)
  • alternate(正反交替)
css 复制代码
.element { animation-direction: alternate; }
7. animation-fill-mode

定义动画结束后元素的样式状态:

  • none(恢复初始状态)
  • forwards(保留最后一帧样式)
  • backwards(应用第一帧样式)
css 复制代码
.element { animation-fill-mode: forwards; }
8. animation-play-state

控制动画暂停/播放:

  • running(默认,播放中)
  • paused(暂停)
css 复制代码
.element { animation-play-state: paused; }

简写属性:animation

将上述属性合并为一行,顺序为:
name | duration | timing-function | delay | iteration-count | direction | fill-mode | play-state

css 复制代码
.element {
  animation: slide-in 2s ease-in-out 1s infinite alternate forwards;
}

变形(Transform)属性

位移

  • translateX(50px):水平移动
  • translateY(20%):垂直移动
  • translate(x, y):二维位移

旋转

  • rotate(45deg):顺时针旋转45度
  • rotateX(180deg):绕X轴3D旋转

缩放

  • scale(1.2):等比放大
  • scaleX(0.5):水平缩小

倾斜

  • skewX(30deg):水平倾斜变形

组合变换

css 复制代码
.element {
  transform: translate(10px, 20px) rotate(10deg) scale(0.9);
}
 

其他辅助属性

will-change

提示浏览器哪些属性即将变化以优化性能:

css 复制代码
.element {
  will-change: transform, opacity;
}
 

perspective

设置3D变换的视距,影响深度效果:

css 复制代码
.container {
  perspective: 1000px;
}
 

应用场景及代码示例

场景1:悬停按钮效果

鼠标悬停时按钮放大并改变颜色:

css 复制代码
.button {
  transition: transform 0.3s, background-color 0.3s;
}
.button:hover {
  transform: scale(1.1);
  background-color: #ff5722;
}

场景2:无限旋转加载动画

使用@keyframes实现旋转:

css 复制代码
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
.spinner {
  animation: spin 2s linear infinite;
}

场景3:页面元素淡入

元素进入视口时触发淡入效果:

css 复制代码
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.fade-in {
  animation: fadeIn 1s ease-in forwards;
}

优化建议

  • 硬件加速 :使用transformopacity属性触发GPU加速,减少卡顿。
  • 减少重绘 :避免动画过程中修改widthheightmargin等触发布局变化的属性。
  • 限制并发动画 :过多同时运行的动画可能导致性能问题,可通过animation-delay错开时机。
  • 使用will-change :提示浏览器元素即将变化,例如will-change: transform

注意事项

  • 兼容性 :部分旧浏览器需前缀(如-webkit-),可通过工具自动添加。
  • 动画时长:避免过长(超过1秒)导致用户等待,或过短(低于100ms)难以感知。
  • 禁用场景 :为尊重用户偏好,使用@media (prefers-reduced-motion: reduce)关闭动画。
  • 回流与重绘 :频繁触发回流的动画(如修改left)性能较差,优先使用transform

总结

CSS动画适用于轻量级交互效果,如过渡、加载指示和微交互,能显著提升用户体验。通过合理使用关键帧和性能优化技巧,可平衡效果与性能。复杂动画仍需结合JavaScript(如GSAP),但CSS动画在简单场景中仍是高效选择。

相关推荐
小九今天不码代码3 小时前
深入理解 CSS 表格布局:table-layout 的秘密与实战详解(附费用报销单案例)
css·前端开发·表格布局·web设计·table-layout·页面优化·样式布局
想要AC的sjh3 小时前
华为Java专业级科目一通过心得
java·开发语言·华为
颜酱3 小时前
了解 pnpm 的优势,然后将已有项目的 yarn 换成 pnpm
前端·javascript·前端工程化
浮灯Foden3 小时前
算法-每日一题(DAY18)多数元素
开发语言·数据结构·c++·算法·leetcode·面试
海在掘金611273 小时前
从"鬼知道这对象有啥"到"一目了然" - TS接口的实战魔力
前端
spionbo3 小时前
Vue 模拟键盘组件封装方法与使用技巧详解
前端
泉城老铁3 小时前
springboot 对接发送钉钉消息,消息内容带图片
前端·spring boot·后端
顾青4 小时前
微信小程序 VisionKit 实战(二):静态图片人脸检测与人像区域提取
前端·微信小程序
MediaTea4 小时前
Python 第三方库:Word Cloud(词云图生成)
开发语言·python