网站

CSS 2D 转换

CSS 3D 转换

transform - CSS | MDN

引入

CSS 转换用于改变元素的显示位置、大小、角度和形状。

它常用于按钮悬停、卡片上浮、图标旋转、图片缩放等效果。

正文

定义

定义

transform 用于对元素进行位移、旋转、缩放、倾斜等变形操作,包括 2D 转换和 3D 转换。

transform 只改变元素的视觉效果,一般不会影响普通文档流中其他元素的位置。

语法

.box {
  transform: 转换函数(值);
}

例如:

.box {
  transform: translateX(20px);
}

表示让 .box 在视觉上向右移动 20px

2D 位移 translate()

translate() 用于移动元素。

.box {
  transform: translate(20px, 10px);
}

第一个值控制水平方向,第二个值控制垂直方向。

也可以单独写:

.box {
  transform: translateX(20px);
}
 
.item {
  transform: translateY(-10px);
}

translateY(-10px) 常用于卡片上浮效果。

2D 缩放 scale()

scale() 用于放大或缩小元素。

.box {
  transform: scale(1.2);
}

1 表示原始大小,大于 1 表示放大,小于 1 表示缩小。

.img:hover {
  transform: scale(1.05);
}

这个写法常用于图片悬停放大。

2D 旋转 rotate()

rotate() 用于旋转元素。

.icon {
  transform: rotate(45deg);
}

deg 表示角度,45deg 就是旋转 45 度。

2D 倾斜 skew()

skew() 用于让元素倾斜。

.box {
  transform: skew(10deg, 0);
}

倾斜效果不如位移、缩放、旋转常用,使用时要注意可读性。

多个转换一起写

多个转换可以写在同一个 transform 中。

.card:hover {
  transform: translateY(-4px) scale(1.02);
}

注意:如果分开写多个 transform,后面的会覆盖前面的。

.box {
  transform: translateX(20px);
  transform: scale(1.2);
}

上面最后只会保留 scale(1.2)

3D 转换

3D 转换用于在三维空间中改变元素。

常见函数:

函数作用
translateZ()沿 Z 轴移动
rotateX()沿 X 轴旋转
rotateY()沿 Y 轴旋转
rotateZ()沿 Z 轴旋转
.card {
  transform: rotateY(20deg);
}

3D 效果通常需要配合 perspective 才更明显。

.scene {
  perspective: 800px;
}
 
.card {
  transform: rotateY(25deg);
}

例子

卡片上浮

<div class="card">卡片内容</div>
.card {
  padding: 24px;
  border-radius: 12px;
  background-color: white;
  transition: transform 0.2s ease;
}
 
.card:hover {
  transform: translateY(-4px);
}

鼠标移上去时,卡片在视觉上向上移动。

图片悬停放大

<img class="photo" src="photo.jpg" alt="图片">
.photo {
  transition: transform 0.3s ease;
}
 
.photo:hover {
  transform: scale(1.05);
}

图片会在鼠标悬停时轻微放大。

特点

  • transform 用于控制元素变形
  • translate() 用于移动元素
  • scale() 用于缩放元素
  • rotate() 用于旋转元素
  • skew() 用于倾斜元素
  • 多个转换要写在同一个 transform
  • transform 常和 transition 搭配使用
  • 3D 转换通常需要配合 perspective

理解

transform 可以理解为只改变元素“看起来的位置和样子”。

它不像 margin 那样真正把周围元素推开,所以很适合做动画和交互效果。

常见页面里最常用的是 translate()scale()rotate(),先掌握这三个就够用很多场景。

引出

理解转换之后,可以继续学习 CSS 过渡CSS 动画,把静态变化变成更自然的动态效果。