CSS平面转换

目录

平面转换

一、关键属性总结

[二、2D 变换函数](#二、2D 变换函数)

[1. 平移(Translate)](#1. 平移(Translate))

[2. 旋转(Rotate)](#2. 旋转(Rotate))

[3. 缩放(Scale)](#3. 缩放(Scale))

[4. 倾斜(Skew)](#4. 倾斜(Skew))

三、变换原点(transform-origin)

四、组合变换

[1. 多函数组合](#1. 多函数组合)

[2. 顺序影响效果](#2. 顺序影响效果)

[3. 层叠上下文](#3. 层叠上下文)

五、实用场景与代码示例

[1. 悬停放大按钮](#1. 悬停放大按钮)

[2. 居中元素](#2. 居中元素)

[3. 旋转加载图标](#3. 旋转加载图标)

[4. 平行四边形导航](#4. 平行四边形导航)

示例1:

示例2:


transform 是 CSS 中用于对元素进行 2D 或 3D 变换 的属性,支持平移、旋转、缩放、倾斜等操作。它不改变页面布局流,仅影响元素的视觉呈现,常用于动画和交互效果。

平面转换

CSS 通过 transform 属性对元素进行 2D 空间变换,包括移动、旋转、缩放、倾斜等。


一、关键属性总结

| 转换类型 | 函数 | 核心作用 | 常用场景 |
| 平移 | translate() | 移动元素位置 | 微调布局、动画位移 |
| 旋转 | rotate() | 改变元素角度 | 图标旋转、卡片翻转 |
| 缩放 | scale() | 调整元素大小 | 悬停放大、焦点突出 |
| 倾斜 | skew() | 倾斜元素形状 | 斜切设计、动态变形 |

转换原点 transform-origin 定义变换基准点 绕特定点旋转、自定义缩放中心

二、2D 变换函数

1. 平移(Translate)

  1. 函数与语法
  • translate(x, y):沿 X 和 Y 轴移动。

  • translateX(x):仅水平移动。

  • translateY(y):仅垂直移动。

  1. 示例
css 复制代码
.box {
  transform: translate(50px, 20px); /* 向右 50px,向下 20px */
}
  • 应用场景:微调元素位置、实现悬停偏移效果。

2. 旋转(Rotate)

  1. 函数与语法
  • rotate(angle):顺时针旋转指定角度(负值逆时针)。
  1. 示例
css 复制代码
.box {
  transform: rotate(45deg); /* 旋转 45 度 */
}
  • 应用场景:图标旋转、卡片翻转动画。

3. 缩放(Scale)

  1. 函数与语法
  • scale(sx, sy) :水平缩放 sx 倍,垂直缩放 sy 倍(单参数时等比例)。

  • scaleX(sx):仅水平缩放。

  • scaleY(sy):仅垂直缩放。

  1. 示例
css 复制代码
.box {
  transform: scale(1.2); /* 放大到 1.2 倍 */
}
.box:hover {
  transform: scale(1.5); /* 悬停时放大 */
}
  • 应用场景:按钮悬停放大、图片缩放效果。

4. 倾斜(Skew)

  1. 函数与语法
  • skew(ax, ay) :水平倾斜 ax 度,垂直倾斜 ay 度。

  • skewX(ax):仅水平倾斜。

  • skewY(ay):仅垂直倾斜。

  1. 示例
css 复制代码
.box {
  transform: skew(15deg, 10deg); /* 水平倾斜 15°,垂直倾斜 10° */
}

应用场景:创建平行四边形、斜切文字效果。


三、变换原点(transform-origin

  1. 作用
  • 定义元素变换的 基准点 (默认 50% 50%,即中心)。
  1. 语法
  • 关键字:left topcenter bottom

  • 长度值:20px 30px

  • 百分比:100% 100%

示例

css 复制代码
.box {
  transform-origin: left top;  /* 以左上角为基准点旋转 */
  transform: rotate(45deg);
}

四、组合变换

1. 多函数组合

  • 多个变换函数用 空格分隔。
css 复制代码
.box {
  transform: translate(50px, 0) rotate(45deg);
}

2. 顺序影响效果

  • 若需平移后固定方向:先平移再旋转

  • 若需旋转后沿新方向移动:先旋转再平移

  • 示例对比

    css 复制代码
    /* 先平移后旋转 */
    .box1 { transform: translateX(100px) rotate(90deg); }
    
    /* 先旋转后平移 */
    .box2 { transform: rotate(90deg) translateX(100px); }
    • box1 向右移动 100px 后旋转。

    • box2 先旋转 90°,再沿新方向平移。

3. 层叠上下文

  • 影响transform 会创建新的层叠上下文,影响 z-index 的层级关系。

五、实用场景与代码示例

1. 悬停放大按钮

css 复制代码
.button {
  transition: transform 0.3s;
}
.button:hover {
  transform: scale(1.1);
}

2. 居中元素

css 复制代码
.center {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);  /* 精准居中 */
}

3. 旋转加载图标

css 复制代码
.loader {
  animation: spin 1s linear infinite;
}
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

4. 平行四边形导航

css 复制代码
.nav-item {
  transform: skewX(-20deg);
}
.nav-item p {
  transform: skewX(20deg); /* 反向倾斜文本保持水平 */
}

示例1:

css 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <link rel="stylesheet" href="./iconfont/iconfont.css">
    <style>

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .box {
            display: flex;

            margin: 100px auto;
            width: 1366px;
            height: 600px;

            background-image: url(./res/bg.jpg);
            overflow: hidden;
        }

        .left,
        .right {
            width: 50%;
            height: 600px;
            background-image: url(./res/fm.jpg);

            transition: all 1s;
        }

        .right {
            background-position: right 0;
        }

        .box:hover .left {
            transform: translate(-100%);
        }

        .box:hover .right {
            transform: translate(100%);
        }

    </style>
</head>
<body>
    
    <div class="box">
        <div class="left"></div>
        <div class="right"></div>
    </div>

</body>
</html>

示例2:

css 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <link rel="stylesheet" href="./iconfont/iconfont.css">
    <style>

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .box {
            margin: 100px auto;

            position: relative;
            width: 250px;
            height: 210px;
        }

        .box img {
            width: 250px;
            height: 210px;            
        }

        .pic::after {
            position: absolute;

            content: "";
            width: 58px;
            height: 58px;
            top: 50%;
            left: 50%;
            background-image: url(./res/play.png);

            transition: all .7s;  
            opacity: 0;          
            overflow: hidden;

            transform: translate(-50%,-50%) scale(4);

        }

        .pic:hover::after {
            transform: translate(-50%,-50%) scale(1);
            opacity: 1;  
        }

    </style>
</head>
<body>
    
    <div class="box">
        <div class="pic"><img src="./res/party.jpeg" alt=""></div>
    </div>

</body>
</html>
相关推荐
崔庆才丨静觅14 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606114 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了15 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅15 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅15 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅15 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment15 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅16 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊16 小时前
jwt介绍
前端
爱敲代码的小鱼16 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax