CSS3 动画基础与技巧

CSS3动画允许你创建平滑、高性能的动画效果,无需JavaScript。主要通过@keyframes和animation属性实现。以下是详细指南:

1. 基础动画语法

css 复制代码
/* 定义关键帧动画 */
@keyframes example {
  0%   { background: red; }
  50%  { background: yellow; }
  100% { background: green; }
}

/* 应用动画 */
.element {
  animation: example 3s ease-in-out infinite;
}

2. 关键属性

属性 描述 示例值
animation-name 动画名称 example
animation-duration 动画时长 2s / 400ms
animation-timing-function 速度曲线 ease, linear, cubic-bezier(0.1, 0.7, 1.0, 0.1)
animation-delay 开始延迟 1s
animation-iteration-count 重复次数 3, infinite
animation-direction 播放方向 normal, reverse, alternate
animation-fill-mode 结束状态保留 forwards, backwards

3. 常用动画示例

淡入淡出

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

移动元素

css 复制代码
@keyframes move {
  0%   { transform: translateX(0); }
  100% { transform: translateX(200px); }
}

旋转

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

缩放效果

css 复制代码
@keyframes pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.2); }
  100% { transform: scale(1); }
}

4. 复合动画(多个动画同时运行)

css 复制代码
.element {
  animation: 
    pulse 1.5s infinite,
    move 3s alternate;
}

5. 进阶技巧

使用steps()实现逐帧动画

css 复制代码
@keyframes typing {
  from { width: 0 }
  to { width: 100% }
}

.text {
  animation: typing 4s steps(40) infinite;
}

暂停/播放动画

css 复制代码
.element {
  animation-play-state: paused; /* 通过JS控制 */
}

.element:hover {
  animation-play-state: running;
}

6. 性能优化

  • 优先使用 transform 和 opacity(不会触发重排)
  • 避免动画阻塞主线程:使用 will-change: transform;
  • 硬件加速:对移动元素添加 transform: translateZ(0);

7. 浏览器兼容前缀

css 复制代码
@-webkit-keyframes example { ... }
.element {
  -webkit-animation: example 2s;
          animation: example 2s;
}

完整示例:弹跳球效果

html 复制代码
<div class="ball"></div>

<style>
.ball {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  background: linear-gradient(red, orange);
  animation: bounce 1s cubic-bezier(0.5, 0.05, 0.5, 1) infinite alternate;
}

@keyframes bounce {
  0%   { transform: translateY(0); }
  100% { transform: translateY(-100px); }
}
</style>
相关推荐
千百元7 分钟前
jenkins打包问题jar问题
前端
喝拿铁写前端9 分钟前
前端批量校验还能这么写?函数式校验器组合太香了!
前端·javascript·架构
巴巴_羊13 分钟前
6-16阿里前端面试记录
前端·面试·职场和发展
我是若尘15 分钟前
前端遇到接口批量异常导致 Toast 弹窗轰炸该如何处理?
前端
可耳(keer)38 分钟前
MIT线性代数第二讲笔记
笔记·线性代数
该用户已不存在38 分钟前
8个Docker的最佳替代方案,重塑你的开发工作流
前端·后端·docker
然我40 分钟前
面试官最爱的 “考试思维”:用闭包秒杀递归难题 🚀
前端·javascript·面试
明月与玄武1 小时前
HTML知识全解析:从入门到精通的前端指南(上)
前端·html
teeeeeeemo1 小时前
CSS place-items: center; 详解与用法
前端·css·笔记
未来之窗软件服务1 小时前
html读取身份证【成都鱼住未来身份证】:CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构
前端·html·身份证读取