css3前端动画制作
CSS3 前端动画制作方法
CSS3 提供了多种方式实现动画效果,包括过渡(transition)、关键帧动画(keyframes)和变换(transform)。以下是具体实现方法:
过渡动画(Transition)
通过定义元素状态变化的过渡效果实现简单动画。常用属性包括 transition-property、transition-duration、transition-timing-function 和 transition-delay。
.box {
width: 100px;
height: 100px;
background: blue;
transition: width 2s ease-in-out;
}
.box:hover {
width: 200px;
}
关键帧动画(Keyframes)
通过 @keyframes 定义动画序列,结合 animation 属性控制播放方式。支持多阶段动画和复杂效果。
@keyframes slide {
0% { transform: translateX(0); }
50% { transform: translateX(100px); }
100% { transform: translateX(0); }
}
.element {
animation: slide 3s infinite;
}
变换动画(Transform)
使用 transform 实现旋转、缩放、移动等效果,常与过渡或关键帧配合使用。
.item {
transform: rotate(45deg) scale(1.2);
transition: transform 0.5s;
}
性能优化技巧
使用 will-change 属性提示浏览器哪些属性会变化,提升渲染性能。

.optimized {
will-change: transform, opacity;
}
优先使用 transform 和 opacity 属性制作动画,这两个属性不会触发重排(reflow),性能开销较小。
避免在动画中频繁修改 width、height、margin 等会触发重排的属性。使用 requestAnimationFrame 替代 setTimeout 实现 JavaScript 动画更流畅。
实际应用示例
悬停按钮效果

.button {
background: #3498db;
padding: 10px 20px;
color: white;
border-radius: 5px;
transition: all 0.3s;
}
.button:hover {
background: #2980b9;
transform: translateY(-3px);
box-shadow: 0 5px 10px rgba(0,0,0,0.2);
}
加载动画
@keyframes spin {
to { transform: rotate(360deg); }
}
.spinner {
width: 40px;
height: 40px;
border: 4px solid rgba(0,0,0,0.1);
border-radius: 50%;
border-top-color: #09f;
animation: spin 1s linear infinite;
}
注意事项
考虑动画的可用性,为偏好减少动画的用户添加 prefers-reduced-motion 媒体查询支持。
@media (prefers-reduced-motion: reduce) {
* {
animation: none !important;
transition: none !important;
}
}
测试不同浏览器的兼容性,必要时添加厂商前缀(如 -webkit-、-moz-)。使用工具如 Autoprefixer 自动处理前缀问题。




