CSS 动画与变换属性详解

CSS 动画与变换属性详解

1. transform(变换)

1.1 基本概念

transform 属性允许您对元素进行 2D 或 3D 变换,包括旋转、缩放、移动(平移)和倾斜等操作。该属性不会改变文档布局,只影响元素的视觉呈现。

1.2 常用变换函数

函数 语法 描述 示例
平移 translateX(x), translateY(y), translate(x,y) 在水平和/或垂直方向移动元素 transform: translate(50px, 20px);
旋转 rotate(angle) 围绕元素中心旋转指定角度 transform: rotate(45deg);
缩放 scaleX(sx), scaleY(sy), scale(sx[, sy]) 在X和/或Y轴方向缩放元素 transform: scale(1.5);
倾斜 skewX(angle), skewY(angle), skew(ax[, ay]) 使元素沿X和/或Y轴倾斜指定角度 transform: skew(10deg, 5deg);
矩阵 matrix(a,b,c,d,e,f) 使用6值矩阵应用复杂2D变换 transform: matrix(1,0,0,1,50,50);
3D变换 translate3d(), rotate3d(), scale3d() 在3D空间中进行变换 transform: translate3d(10px, 20px, 30px);

1.3 transform-origin 属性

transform-origin 属性用于设置变换的基点(原点),默认值为元素的中心点 。

取值:

  • 关键字left, right, top, bottom, center
  • 长度值:像素、em等具体单位
  • 百分比:相对于元素尺寸的百分比

示例:

css 复制代码
.element {
transform-origin: left top; /* 以左上角为变换原点 */
transform: rotate(45deg);
}

2. @keyframes(关键帧)

2.1 基本概念

@keyframes 规则用于创建动画序列,通过定义动画过程中特定时间点的样式状态(关键帧)来控制动画的中间步骤。

2.2 语法格式

css 复制代码
@keyframes 动画名称 {
0% { /* 起始状态样式 */ }
50% { /* 中间状态样式 */ }
100% { /* 结束状态样式 */ }
}

2.3 关键帧选择器

选择器 等效值 描述
from 0% 动画开始状态
to 100% 动画结束状态
25%, 50%, 75% - 动画过程中的特定时间点

示例:

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

3. animation(动画)

3.1 基本概念

animation 属性是一个简写属性,用于将动画效果应用于元素。它包含了多个子属性的功能。

3.2 子属性详解

属性 描述 可选值 默认值
animation-name 指定要应用的@keyframes动画名称 自定义标识符或none none
animation-duration 动画完成一个周期所需时间 时间值(s或ms) 0s
animation-timing-function 动画的速度曲线 ease, linear, ease-in, ease-out, ease-in-out, cubic-bezier() ease
animation-delay 动画开始前的延迟时间 时间值(s或ms) 0s
animation-iteration-count 动画播放次数 数字或infinite 1
animation-direction 动画播放方向 normal, reverse, alternate, alternate-reverse normal
animation-fill-mode 动画外部的样式应用方式 none, forwards, backwards, both none
animation-play-state 动画播放状态 running, paused running

3.3 animation 简写语法

css 复制代码
animation: name duration timing-function delay iteration-count direction fill-mode play-state;

示例:

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

4. 综合应用示例

4.1 基本动画效果

css 复制代码
.box {
width: 100px;
height: 100px;
background: blue;
animation: bounce 2s ease-in-out infinite;
}
@keyframes bounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-30px);
}
}

4.2 复杂变换动画

css 复制代码
.card {
transform-origin: center;
animation: card-animation 3s cubic-bezier(0.25, 0.46, 0.45, 0.94) alternate;
}
@keyframes card-animation {
0% {
transform: perspective(500px) rotateY(0deg) scale(0.8);
opacity: 0;
}
50% {
transform: perspective(500px) rotateY(180deg) scale(1.1);
opacity: 1;
}
100% {
transform: perspective(500px) rotateY(360deg) scale(1);
opacity: 1;
}
}

5. 浏览器兼容性提示

虽然现代浏览器对CSS动画和变换的支持良好,但在某些旧版本浏览器中可能需要添加供应商前缀:

css 复制代码
.element {
-webkit-transform: rotate(45deg); /* Chrome, Safari */
-moz-transform: rotate(45deg); /* Firefox */
-ms-transform: rotate(45deg); /* IE 9 */
-o-transform: rotate(45deg); /* Opera */
transform: rotate(45deg);
}
@-webkit-keyframes example { /* Webkit前缀 */
from { opacity: 0; }
to { opacity: 1; }
}

以上表格和示例涵盖了CSS变换和动画的核心概念,可作为日常开发的快速参考。

相关推荐
刘发财5 小时前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
牛奶8 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶8 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
Kagol10 小时前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
GIS之路11 小时前
ArcGIS Pro 中的 notebook 初识
前端
JavaGuide12 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
ssshooter12 小时前
看完就懂 useSyncExternalStore
前端·javascript·react.js
格砸13 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
Live0000013 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉13 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化