视频加载失败

CSS3中的transform属性2D3D转换

2040 字
10 分钟
CSS3中的transform属性2D3D转换

前言#

CSS 的 Transform(转换) 用于改变元素的视觉位置、角度、大小和形状,而不改变元素原本在文档流中占据的空间。主要分为两类:

  • 2D 转换:在平面上移动、旋转、缩放、倾斜。
  • 3D 转换:在三维空间中移动、旋转、缩放,实现透视和立体效果。

旋转变形#

旋转变形用于让元素围绕某个中心点进行旋转。

基本语法:

transform: rotate(角度);
属性值说明
rotate(45deg)顺时针旋转 45°
rotate(-45deg)逆时针旋转 45°
rotate(90deg)顺时针旋转 90°
rotate(180deg)顺时针旋转 180°
rotate(360deg)顺时针旋转一圈

代码示例:

.box {
width: 100px;
height: 100px;
background-color: red;
transform: rotate(45deg);
}

设置旋转中心点#

默认情况下,元素围绕自身中心旋转。

可以使用 transform-origin 修改旋转中心。

.box {
transform-origin: center center; /* 默认中心 */
transform: rotate(45deg);
}

常见属性值:

属性值说明
center中心点,默认值
top left左上角
top right右上角
bottom left左下角
bottom right右下角
50% 50%中心点
0 0左上角

注意:transform-origin 不仅影响旋转,也会影响缩放、斜切等变形效果。

缩放变形#

缩放变形用于放大或缩小元素。

基本语法:

transform: scale(x, y);
  • x:水平方向的缩放倍数。
  • y:垂直方向的缩放倍数。
  • 只传一个参数时,两个方向采用相同的缩放倍数。
属性值说明
scale(1)原始大小
scale(1.5)放大至 1.5 倍
scale(0.5)缩小至 0.5 倍
scale(2, 1)宽度变为 2 倍,高度不变
scaleX(2)仅水平方向放大 2 倍
scaleY(0.5)仅垂直方向缩小一半
scale(-1, 1)水平镜像翻转

代码示例:

.box {
width: 100px;
height: 100px;
background-color: red;
transform: scale(1.5);
}

缩放与 width、height 的区别#

/* 修改元素布局尺寸 */
.box {
width: 200px;
height: 200px;
}
/* 仅改变视觉大小 */
.box {
width: 100px;
height: 100px;
transform: scale(2);
}

两种方法视觉上都可能得到 200px × 200px 的盒子,但它们有本质区别:

  • width、height:改变元素布局尺寸,可能影响其他元素的排列。
  • scale():不会改变元素原有的布局占位。

实际应用: 图片悬停放大、按钮交互、卡片放大动画等。

斜切变形#

斜切变形用于让元素沿水平或垂直方向发生倾斜。

基本语法:

transform: skew(x角度, y角度);
属性值说明
skew(20deg)水平方向斜切 20°
skew(20deg, 10deg)水平和垂直方向同时斜切
skewX(20deg)仅沿 X 轴方向斜切
skewY(20deg)仅沿 Y 轴方向斜切
skewX(-20deg)沿 X 轴反向斜切

代码示例:

.box {
width: 100px;
height: 100px;
background-color: red;
transform: skewX(20deg);
}

skewX 与 skewY 的区别#

  • skewX():改变元素不同高度处的水平偏移,使左右边倾斜。
  • skewY():改变元素不同水平位置处的垂直偏移,使上下边倾斜。

注意:skew() 是斜切,不是旋转。斜切通常会改变元素原有的角度和形状,而旋转会保持其形状不变。

实际应用: 倾斜按钮背景、装饰卡片、几何图形、特殊视觉效果等。

位移变形#

位移变形用于让元素沿 X 轴或 Y 轴移动。

基本语法:

transform: translate(x, y);
  • x:水平方向位移,正数向右,负数向左。
  • y:垂直方向位移,正数向下,负数向上。
属性值说明
translate(50px, 20px)向右 50px,向下 20px
translateX(100px)向右移动 100px
translateX(-100px)向左移动 100px
translateY(50px)向下移动 50px
translateY(-50px)向上移动 50px
translate(50%, 50%)向右、向下各移动自身对应尺寸的 50%

代码示例:

.box {
width: 100px;
height: 100px;
background-color: red;
transform: translate(50px, 20px);
}

1. translate 百分比的计算规则#

这一点非常重要。

.box {
width: 200px;
height: 100px;
transform: translate(50%, 50%);
}

结果:

  • 水平位移:200 × 50% = 100px。
  • 垂直位移:100 × 50% = 50px。

translate 的百分比通常是相对于元素自身的尺寸,而不是父元素。 这里讨论的是普通 HTML 元素默认的变形参考盒。

使用 translate 实现绝对定位居中#

.parent {
position: relative;
width: 500px;
height: 500px;
}
.child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

原理:

  1. top: 50%:让子元素的顶部移动到父元素高度的 50% 处。
  2. left: 50%:让子元素的左侧移动到父元素宽度的 50% 处。
  3. translate(-50%, -50%):再向左、向上移动子元素自身宽高的一半。

这样就实现了水平和垂直居中。

现代开发中,如果只是实现普通容器居中,通常使用 Flex 或 Grid 更简单。

3D旋转#

前面介绍的旋转、缩放、斜切和位移主要属于 2D 变形。3D 变形在原有 X、Y 轴的基础上引入 Z 轴(深度方向)。

rotateX:绕 X 轴旋转#

.box {
transform: rotateX(45deg);
}

元素围绕水平轴旋转,可以理解为上下翻转的效果。

rotateY:绕 Y 轴旋转#

.box {
transform: rotateY(45deg);
}

元素围绕垂直轴旋转,可以理解为左右翻转的效果。

rotateZ:绕 Z 轴旋转#

.box {
transform: rotateZ(45deg);
}

元素围绕垂直于屏幕的轴旋转。

在常见的平面元素上,rotateZ(45deg) 的视觉效果与 rotate(45deg) 相同。

rotate3d:自定义旋转轴#

transform: rotate3d(x, y, z, angle);

前三个参数指定旋转轴的方向,最后一个参数指定旋转角度。

/* 绕 X 轴 */
transform: rotate3d(1, 0, 0, 45deg);
/* 绕 Y 轴 */
transform: rotate3d(0, 1, 0, 45deg);
/* 绕 Z 轴 */
transform: rotate3d(0, 0, 1, 45deg);
/* 绕 X、Y 都有分量的斜轴 */
transform: rotate3d(1, 1, 0, 45deg);

perspective:设置透视距离#

单纯使用 3D 旋转,并不一定能看到明显的立体效果。

通常需要配合 perspective 实现透视。

代码示例:

<div class="scene">
<div class="box">3D BOX</div>
</div>
.scene {
perspective: 800px;
}
.box {
width: 200px;
height: 200px;
background-color: red;
transform: rotateY(45deg);
}

perspective 表示观察者与投影平面之间的距离:

  • perspective: 400px:透视效果较强。
  • perspective: 800px:透视效果相对柔和。
  • perspective: 1500px:透视效果较弱。

需要注意,示例使用的是父元素的 perspective 属性。如果改用 transform: perspective(800px) rotateY(45deg),透视函数和旋转函数都写在元素自身的 transform 中。

另外,制作嵌套 3D 场景时,还经常需要:

transform-style: preserve-3d;
backface-visibility: hidden;

分别用于保留子元素的 3D 空间关系、隐藏元素朝向背面的表面。

transform 组合使用#

前面五种变形并不是只能单独使用,还可以组合。

.box {
transform: translateX(100px) rotate(45deg) scale(1.5);
}

该代码组合了位移、旋转和缩放。

但是要注意:变形函数的顺序非常重要。

例如:

/* 位移距离不会被 scale 放大 */
transform: translateX(100px) scale(2);
/* 位移效果也会被 scale 放大 */
transform: scale(2) translateX(100px);

理解时,可以把变形函数视为从右向左依次作用于元素。调换函数的顺序,最终效果可能完全不同。

另外,同一规则中连续书写两个 transform 声明,不会自动合并:

.box {
transform: rotate(45deg);
transform: scale(1.5);
}

最终只会应用 scale(1.5),因为后面的声明覆盖了前面的声明。

总结:CSS3 变形属性速记#

类型函数主要用途
旋转rotate()2D 平面旋转
缩放scale()水平、垂直同时缩放
缩放scaleX()水平缩放
缩放scaleY()垂直缩放
斜切skew()水平、垂直斜切
斜切skewX()水平斜切
斜切skewY()垂直斜切
位移translate()水平、垂直位移
位移translateX()水平位移
位移translateY()垂直位移
3D 旋转rotateX()绕 X 轴旋转
3D 旋转rotateY()绕 Y 轴旋转
3D 旋转rotateZ()绕 Z 轴旋转
3D 旋转rotate3d()绕自定义 3D 轴旋转
辅助属性transform-origin设置变形中心点
辅助属性perspective设置透视距离
辅助属性transform-style控制子元素是否保留 3D 空间关系
辅助属性backface-visibility控制背面是否可见

实际开发中,最值得优先掌握的是 translate()、scale() 和 rotate()。 它们在按钮交互、图片展示、卡片动画、抽屉菜单等场景中很常见。

最后要区分两个概念:

  • transform:决定元素变成什么样。
  • transition:决定元素从原始状态变成目标状态时如何平滑过渡。

例如:

.box {
transition: transform 0.3s ease;
}
.box:hover {
transform: translateY(-10px) scale(1.05);
}

鼠标悬停时,盒子会在 0.3 秒内向上移动 10px,并放大到 1.05 倍。这就是现代网页中非常常见的卡片悬停交互效果。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

CSS3中的transform属性2D3D转换
https://f.youzi177.cn/posts/2026100901css3-zhong-de-transform-shu-xing-2d3d-zhuan-huan/
作者
小封鸭
发布于
2026-10-09
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
小封鸭
小楼一夜听春雨,深巷明朝卖杏花
公告
欢迎来到我的博客。这里主要记录前端全栈和日常内容
分类
标签
最新动态
站点统计
文章
60
分类
3
标签
12
总字数
107,734
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录