css变换语法介绍及案例展示

CSS 变换介绍

一、基础变换函数 - 2D

transform 是用于对元素进行 2D/3D 变换的核心属性,支持平移、旋转、缩放、倾斜等效果,且不破坏原有文档流布局。

1. 变换函数概览

变换类型 函数语法 核心描述 应用场景
平移 translateX(x)translateY(y)translate(x, y) 沿 X/Y 轴移动元素,参数可为像素或百分比(百分比相对于元素自身尺寸) 微调元素位置、悬停偏移效果
旋转 rotate(angle) 以元素中心为基点顺时针旋转,需加单位 deg(负值为逆时针) 图标旋转、卡片翻转
缩放 scaleX(sx)scaleY(sy)scale(sx, sy) X/Y 轴按比例缩放,单参数时等比例缩放(>1 放大,<1 缩小,支持百分比) 悬停放大、焦点突出
倾斜 skewX(angle)skewY(angle)skew(x-angle, y-angle) 沿 X/Y 轴扭曲元素形状,参数为倾斜角度(支持负值) 斜切导航栏、动态图表

2. 平移变换(Translate)

语法:
css 复制代码
transform: translateX(10px);      /* 沿 X 轴平移 10px */
transform: translateY(20%);       /* 沿 Y 轴平移自身高度的 20% */
transform: translate(10px, 20px); /* 沿 X 轴平移 10px,沿 Y 轴平移 20px */
使用场景:
  • 微调元素位置,不影响其他元素布局
  • 实现悬停时的偏移效果
  • 配合过渡动画实现平滑移动
css 复制代码
/* 悬停时向右上方移动 */
.box:hover {
  transform: translate(5px, -5px);
}

3. 旋转变换(Rotate)

语法:
css 复制代码
transform: rotate(45deg);   /* 顺时针旋转 45 度 */
transform: rotate(-30deg);  /* 逆时针旋转 30 度 */
使用场景:
  • 图标旋转效果
  • 卡片翻转效果
  • 加载动画中的旋转效果
css 复制代码
/* 悬停时旋转 180 度 */
.icon:hover {
  transform: rotate(180deg);
  transition: transform 0.3s ease;
}

4. 缩放变换(Scale)

语法:
css 复制代码
transform: scaleX(1.2);     /* X 轴放大 1.2 倍 */
transform: scaleY(0.8);     /* Y 轴缩小到 0.8 倍 */
transform: scale(1.5);      /* 等比例放大 1.5 倍 */
transform: scale(1.2, 0.9); /* X 轴放大 1.2 倍,Y 轴缩小到 0.9 倍 */
使用场景:
  • 悬停时放大效果
  • 焦点突出显示
  • 图片预览放大
css 复制代码
/* 悬停时放大效果 */
.card:hover {
  transform: scale(1.05);
  transition: transform 0.3s ease;
}

5. 倾斜变换(Skew)

语法:
css 复制代码
transform: skewX(10deg);        /* 沿 X 轴倾斜 10 度 */
transform: skewY(5deg);         /* 沿 Y 轴倾斜 5 度 */
transform: skew(10deg, 5deg);   /* 沿 X 轴倾斜 10 度,沿 Y 轴倾斜 5 度 */
使用场景:
  • 斜切导航栏设计
  • 动态图表效果
  • 特殊形状设计
css 复制代码
/* 斜切效果 */
.skewed-box {
  transform: skewX(-10deg);
}

6. 复合写法

可以将多个变换函数组合使用,按顺序依次执行。

css 复制代码
/* 先平移,再旋转,最后缩放 */
transform: translate(10px, 20px) rotate(45deg) scale(1.5);

/* 先缩放,再旋转 */
transform: scale(1.2) rotate(180deg);
css 复制代码
/* 综合示例:悬停时向右上方移动并放大旋转 */
.box:hover {
  transform: translate(10px, -10px) rotate(5deg) scale(1.1);
  transition: transform 0.3s ease;
}

二、3D 变换

1. 透视(Perspective)

透视用于创建 3D 效果,决定了观察者与元素之间的距离。透视值越小,透视效果越强。

语法:
css 复制代码
/* 应用于父容器 */
.parent {
  perspective: 1000px;  /* 透视距离为 1000px */
}
使用场景:
  • 创建 3D 旋转效果
  • 实现立体卡片翻转
  • 3D 导航菜单
css 复制代码
/* 3D 容器 */
.scene {
  perspective: 600px;
}

.card {
  width: 200px;
  height: 300px;
  transform-style: preserve-3d;  /* 保持 3D 空间 */
}

2. 3D 旋转

3D 旋转可以绕 X、Y、Z 轴进行旋转。

语法:
css 复制代码
transform: rotateX(45deg);  /* 绕 X 轴旋转 45 度 */
transform: rotateY(45deg);  /* 绕 Y 轴旋转 45 度 */
transform: rotateZ(45deg);  /* 绕 Z 轴旋转 45 度 */
使用场景:
  • 3D 卡片翻转效果
  • 3D 旋转展示
  • 立体图标效果
css 复制代码
/* 3D 卡片翻转 */
.card {
  transform: rotateY(180deg);
}

3. 3D 平移

3D 平移可以沿 X、Y、Z 轴进行移动。

语法:
css 复制代码
transform: translateX(50px);  /* 沿 X 轴平移 */
transform: translateY(50px);  /* 沿 Y 轴平移 */
transform: translateZ(50px);  /* 沿 Z 轴平移(需要透视效果) */
transform: translate3d(50px, 50px, 50px);  /* 3D 平移 */
使用场景:
  • 3D 空间中的位置调整
  • 配合透视创建深度感
  • 3D 动画效果
css 复制代码
/* 3D 空间中的立方体 */
.cube-face {
  transform: translateZ(100px);
}

4. transform-style

transform-style 属性用于指定子元素是否保持 3D 变换。

css 复制代码
.parent {
  transform-style: preserve-3d;  /* 子元素保持 3D 空间 */
  transform-style: flat;         /* 子元素扁平化(默认) */
}

5. backface-visibility

backface-visibility 属性用于控制元素背面是否可见。

css 复制代码
.card {
  backface-visibility: hidden;  /* 背面不可见 */
  backface-visibility: visible; /* 背面可见(默认) */
}

三、案例展示

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .big {
      position: relative;
      perspective: 1000px;
      transform-style: preserve-3d;
      perspective: 1000px;
      width: 200px;
      height: 400px;
    }

    .front {
      position: absolute;
      text-align: center;
      line-height: 400px;
      width: 200px;
      height: 400px;
      background-color: aqua;
      z-index: 1;
      color: aliceblue;
      transform-style: preserve-3d;
      backface-visibility: hidden;
      transition: all .6s;
    }

    h3 {
      transform: translateZ(50px);
      font-size: 20px;
      color: brown;
    }

    .back {
      position: absolute;
      color: aliceblue;
      text-align: center;
      line-height: 400px;
      width: 200px;
      height: 400px;
      background-color: bisque;
      transform-style: preserve-3d;
      transform: rotateY(180deg);
      transition: all .6s;
      backface-visibility: hidden;
    }

    .big:hover .front {
      transform: rotateY(-180deg);
    }

    .big:hover .back {
      transform: rotateY(0deg);
    }
  </style>
</head>

<body>
  <div class="big">
    <div class="front">
      <h3>前面</h3>
    </div>
    <div class="back">
      <h3>背面</h3>
    </div>
  </div>
</body>

</html>


相关推荐
卸任23 分钟前
Vibe coding工具使用心得
前端·ai编程
brien91 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance1 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M1 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写2 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李2 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易2 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马2 小时前
前沿视界
前端
kyriewen2 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易2 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员