CSS变换

CSS变换允许你对元素进行旋转、缩放、平移、倾斜等操作,从而创建出各种视觉效果。变换不会影响文档流,只会改变元素的视觉呈现。

变换基础

变换通过transform属性实现,它可以接受一个或多个变换函数作为值。

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

变换函数

平移 (translate)

将元素从其当前位置移动到指定的位置。

css
/* 水平平移 */
.element {
  transform: translateX(50px);
}

/* 垂直平移 */
.element {
  transform: translateY(50px);
}

/* 水平和垂直平移 */
.element {
  transform: translate(50px, 100px);
}

/* 使用百分比(相对于元素自身尺寸) */
.element {
  transform: translate(50%, 25%);
}

旋转 (rotate)

围绕指定的原点旋转元素。

css
/* 顺时针旋转45度 */
.element {
  transform: rotate(45deg);
}

/* 逆时针旋转45度 */
.element {
  transform: rotate(-45deg);
}

/* 使用弧度 */
.element {
  transform: rotate(1rad);
}

缩放 (scale)

放大或缩小元素。

css
/* 水平和垂直同时缩放 */
.element {
  transform: scale(1.5); /* 放大1.5倍 */
}

/* 仅水平缩放 */
.element {
  transform: scaleX(2); /* 水平放大2倍 */
}

/* 仅垂直缩放 */
.element {
  transform: scaleY(0.5); /* 垂直缩小到原来的0.5倍 */
}

/* 分别指定水平和垂直缩放比例 */
.element {
  transform: scale(2, 0.5);
}

倾斜 (skew)

使元素沿X轴和/或Y轴倾斜。

css
/* 沿X轴倾斜30度 */
.element {
  transform: skewX(30deg);
}

/* 沿Y轴倾斜20度 */
.element {
  transform: skewY(20deg);
}

/* 沿X轴和Y轴同时倾斜 */
.element {
  transform: skew(30deg, 20deg);
}

矩阵变换 (matrix)

使用矩阵函数进行更复杂的变换。

css
.element {
  transform: matrix(a, b, c, d, e, f);
}

矩阵变换允许你同时应用平移、旋转、缩放和倾斜等效果。

3D变换

CSS也支持3D变换,允许你在3D空间中操作元素。

3D旋转

css
/* 绕X轴旋转 */
.element {
  transform: rotateX(45deg);
}

/* 绕Y轴旋转 */
.element {
  transform: rotateY(45deg);
}

/* 绕Z轴旋转(与2D旋转相同) */
.element {
  transform: rotateZ(45deg);
}

/* 绕任意轴旋转 */
.element {
  transform: rotate3d(x, y, z, angle);
}

3D平移

css
/* 沿Z轴平移 */
.element {
  transform: translateZ(50px);
}

/* 3D平移 */
.element {
  transform: translate3d(50px, 100px, 50px);
}

3D缩放

css
/* 3D缩放 */
.element {
  transform: scale3d(1, 1.5, 2);
}

透视 (perspective)

为3D变换创建透视效果,模拟人眼观察物体的方式。

css
.parent {
  perspective: 1000px;
}

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

transform-style

指定元素的子元素是否应使用3D变换。

css
.parent {
  transform-style: preserve-3d;
}

变换原点

使用transform-origin属性可以改变变换的原点。

css
/* 默认原点:center center */
.element {
  transform-origin: center center;
}

/* 左上角原点 */
.element {
  transform-origin: top left;
}

/* 自定义原点(百分比) */
.element {
  transform-origin: 25% 75%;
}

/* 自定义原点(像素) */
.element {
  transform-origin: 50px 100px;
}

变换示例

3D卡片翻转效果

css
.card-container {
  perspective: 1000px;
}

.card {
  width: 200px;
  height: 300px;
  position: relative;
  transform-style: preserve-3d;
  transition: transform 0.6s;
}

.card:hover {
  transform: rotateY(180deg);
}

.card-front, .card-back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
}

.card-back {
  transform: rotateY(180deg);
}

悬浮效果

css
.button {
  padding: 10px 20px;
  background-color: blue;
  color: white;
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.button:hover {
  transform: translateY(-5px);
  box-shadow: 0 5px 15px rgba(0,0,0,0.3);
}

浏览器兼容性

CSS变换在现代浏览器中有很好的支持,但需要考虑旧版本浏览器的兼容性:

  • Chrome 4+ (带-webkit-前缀)
  • Firefox 3.5+ (带-moz-前缀)
  • Safari 3.1+ (带-webkit-前缀)
  • IE 10+
  • Edge 12+

对于旧版本浏览器的支持,可以添加浏览器前缀:

css
.element {
  transform: rotate(45deg);
  -webkit-transform: rotate(45deg); /* Safari和Chrome */
  -moz-transform: rotate(45deg); /* Firefox */
  -o-transform: rotate(45deg); /* Opera */
}