讲师中心 微信公众号
AI工具推荐 视频效率加速

CSS 变换效果详解 变换属性在 CSS 中如何使用

千杰酱_4459

千杰酱_4459

发布时间:2025-07-14 10:04:02

|

689人浏览过

|

来源于php中文网

原创

css transform属性通过位移、旋转和缩放等函数实现元素的视觉变换。1. 位移使用translate()函数,如translatex()、translatey()或translate3d(),可沿x、y、z轴移动元素;2. 旋转使用rotate()函数,如rotatex()、rotatey()或rotate3d(),可绕指定轴旋转元素;3. 缩放使用scale()函数,如scalex()、scaley()或scale3d(),可改变元素尺寸。这些变换不会影响文档流布局,并可通过transform-origin调整变换基点。结合transition可实现平滑过渡效果,结合animation则能创建复杂关键帧动画,从而提升交互体验。此外,perspective和transform-style: preserve-3d用于构建真实的3d场景。

CSS 变换效果详解 变换属性在 CSS 中如何使用

CSS中的transform属性是前端开发里一个非常强大的工具,它允许我们对HTML元素进行二维或三维的位移、旋转、缩放和倾斜操作,而不会影响到文档流中的其他元素布局。简单来说,它能让你的元素在视觉上动起来、变大变小、甚至翻转,就像给它施加了魔法一样,却又保持了其在页面上的“原位”,这对于创建动态、交互性强的用户界面至关重要。

CSS 变换效果详解 变换属性在 CSS 中如何使用

解决方案

要使用CSS的transform属性,你只需要在CSS规则中为目标元素添加transform属性,并为其赋值一个或多个变换函数。这些函数包括:

  • 位移 (Translate): translate(x, y) 或 translateX(x)、translateY(y)、translateZ(z)、translate3d(x, y, z)。 它将元素从其原始位置移动到新的位置。x和y可以是像素、百分比或其他长度单位。百分比是相对于元素自身的宽度或高度。
    .box {
        transform: translate(50px, 100px); /* 向右移动50px,向下移动100px */
    }
  • 旋转 (Rotate): rotate(angle) 或 rotateX(angle)、rotateY(angle)、rotateZ(angle)、rotate3d(x, y, z, angle)。 它使元素绕着其中心点(默认)旋转。angle通常以deg(度)为单位,也可以是rad(弧度)或turn(圈)。
    .box {
        transform: rotate(45deg); /* 顺时针旋转45度 */
    }
  • 缩放 (Scale): scale(sx, sy) 或 scaleX(sx)、scaleY(sy)、scaleZ(sz)、scale3d(sx, sy, sz)。 它改变元素的尺寸。sx和sy是缩放因子,1表示原始尺寸,2表示放大一倍,0.5表示缩小一半。如果只提供一个值,则X和Y轴同时缩放。
    .box {
        transform: scale(1.2); /* 放大1.2倍 */
    }
  • 倾斜 (Skew): skew(angleX, angleY) 或 skewX(angleX)、skewY(angleY)。 它使元素沿X轴或Y轴倾斜。angleX和angleY以deg为单位。
    .box {
        transform: skewY(10deg); /* 沿Y轴倾斜10度 */
    }
  • 矩阵 (Matrix): matrix() 和 matrix3d()。 这些是更底层的变换,允许你通过一个2x3或4x4的变换矩阵来定义所有二维或三维变换。虽然功能强大,但通常不如直接使用上述函数直观。

可以同时应用多个变换函数,它们会按照书写的顺序依次执行。

立即学习“前端免费学习笔记(深入)”;

CSS 变换效果详解 变换属性在 CSS 中如何使用
.box {
    transform: translateX(20px) rotate(30deg) scale(1.1); /* 先平移,再旋转,最后缩放 */
}

此外,transform-origin属性可以改变变换的基点(默认是元素的中心)。比如,transform-origin: top left;会让所有变换都以元素的左上角为中心进行。

CSS transform 属性如何实现元素的位移、旋转和缩放?

transform属性在实现元素的位移、旋转和缩放方面,提供了一种与传统布局属性(如position: absolute配合top/left)截然不同的机制。我个人觉得,理解它的核心在于,transform操作的是元素的“视觉呈现”,而不是其在文档流中的实际位置或占据的空间。这就像你把一张照片放在桌子上,然后把它推远一点(translate),或者把它转个方向(rotate),再或者把它放大打印出来(scale),但照片在桌子上的那块“物理空间”并没有改变。

CSS 变换效果详解 变换属性在 CSS 中如何使用

位移 (Translate):translate()系列函数是实现元素位移的利器。它们将元素在X、Y、Z轴上移动指定的距离。

.move-right {
    transform: translateX(100px); /* 只在X轴上向右移动100像素 */
}

.move-down-left {
    transform: translate(-50%, 50px); /* 向左移动自身宽度的一半,向下移动50像素 */
}

使用translate进行位移,相较于改变left、top等属性,通常能获得更好的性能,因为它不触发布局(layout)或绘制(paint)操作,而是直接在合成(compositing)阶段进行,这对于动画尤其重要。我刚开始接触时,总觉得position加left/top更直观,但一旦开始做复杂的动画,transform的性能优势就显现出来了。

旋转 (Rotate):rotate()函数让元素绕着一个点旋转。默认情况下,这个点是元素的中心。

.spin-me {
    transform: rotate(90deg); /* 顺时针旋转90度 */
}

.spin-from-corner {
    transform-origin: 0 0; /* 将旋转中心设为左上角 */
    transform: rotate(45deg);
}

rotateX(), rotateY(), rotateZ()则分别对应绕X、Y、Z轴的三维旋转,这为创建更复杂的视觉效果提供了可能。

缩放 (Scale):scale()函数用于改变元素的大小。

.grow-on-hover:hover {
    transform: scale(1.1); /* 鼠标悬停时放大10% */
}

.shrink-x {
    transform: scaleX(0.8); /* X轴缩小到80% */
}

scale的优点在于,它同样不会改变元素的实际尺寸,因此不会影响到周围元素的布局,这在做一些“放大镜”效果或者交互反馈时非常有用。

总的来说,transform属性提供了一种高效且灵活的方式来操纵元素的视觉表现,而无需触及其在文档流中的物理位置,这使得它成为现代网页动画和交互设计的基石。

page-agent 浏览器控制(CDP)
page-agent 浏览器控制(CDP)

使用 page-agent CLI(CDP)控制浏览器;CLI只能通过 GitHub Release 的 .tgz 安装,npm 官方包暂未发布。

下载

探索 CSS 3D 变换:perspective 和 transform-style 的作用

当谈到CSS 3D变换时,perspective和transform-style是两个至关重要的属性,它们共同构建了一个三维的舞台,让元素能够真正地在空间中“飞舞”。我记得刚接触3D变换时,最困惑的就是为什么我的元素明明设置了rotateX或rotateY,却看起来还是平的,直到我理解了perspective。

perspective (透视):perspective属性定义了观察者与Z=0平面之间的距离,它创建了一种透视效果,使得距离观察者越远的元素看起来越小,反之越大。这个属性通常不是设置在要变换的元素上,而是设置在其父元素上。

<div class="scene">
    <div class="cube"></div>
</div>
.scene {
    perspective: 800px; /* 定义一个800像素的透视深度 */
    width: 200px;
    height: 200px;
    border: 1px solid #ccc;
}

.cube {
    width: 100px;
    height: 100px;
    background-color: lightblue;
    transform: rotateY(45deg); /* 绕Y轴旋转 */
    /* 此时,如果没有父元素的perspective,旋转效果不明显 */
}

如果没有perspective,或者其值太小,3D变换效果会非常扁平,甚至看不出来。值越大,透视效果越弱(物体看起来更远),值越小,透视效果越强(物体看起来更近,变形更明显)。这就像你用相机拍照时,镜头的焦距一样。

transform-style: preserve-3d (保留3D):transform-style属性决定了子元素是否保留其3D位置。当一个父元素内部有多个子元素,并且这些子元素都需要在三维空间中进行变换时,父元素就需要设置transform-style: preserve-3d;。

.parent-container {
    perspective: 1000px;
    transform-style: preserve-3d; /* 关键:让子元素在3D空间中保持各自的3D位置 */
}

.child-element-1 {
    transform: rotateY(30deg) translateZ(100px);
}

.child-element-2 {
    transform: rotateY(-30deg) translateZ(100px);
}

如果没有preserve-3d,子元素在进行3D变换时,它们的平面会被“展平”到父元素的2D平面上,导致它们之间无法形成真正的3D关系,例如一个立方体的各个面就无法正确地组合在一起。我当初在尝试构建一个CSS立方体时,就是因为忘记给容器设置preserve-3d,导致各个面无论怎么旋转都像纸片一样,无法形成一个整体。

简而言之,perspective为3D场景提供了深度和视觉畸变,而transform-style: preserve-3d则确保了父容器内的子元素能够在真正的三维空间中定位和变换,它们是实现复杂3D效果的基石。

CSS transform 与 transition、animation 结合使用技巧

transform属性本身只是定义了元素的一种状态,要让这种状态变化变得平滑、有动感,就需要结合transition(过渡)或animation(动画)属性。这三者的结合,是实现丰富交互和视觉效果的黄金搭档。

与 transition 结合:transition允许你在CSS属性值改变时,定义一个平滑的过渡效果。当transform属性的值从一个状态变为另一个状态时,transition就能让这个变化过程变得流畅。

.button {
    background-color: #007bff;
    color: white;
    padding: 10px 20px;
    border-radius: 5px;
    transition: transform 0.3s ease-out; /* 定义transform属性在0.3秒内平滑过渡 */
}

.button:hover {
    transform: scale(1.05) translateY(-5px); /* 鼠标悬停时,放大并向上移动 */
}

这种组合非常适合创建用户交互反馈,比如按钮的悬停效果、图片放大效果等。我经常用它来做一些微小的、但能显著提升用户体验的动效。重要的是,transition的性能通常很好,因为它是由浏览器优化的。

与 animation 结合:animation则提供了更强大的关键帧动画控制能力。你可以定义一系列的动画步骤(关键帧),让元素在这些步骤之间进行复杂的transform变化。

@keyframes pulse {
    0% {
        transform: scale(1);
    }
    50% {
        transform: scale(1.1);
    }
    100% {
        transform: scale(1);
    }
}

.heart-icon {
    width: 50px;
    height: 50px;
    background-color: red; /* 假设这是一个心形图标 */
    animation: pulse 1.5s infinite ease-in-out; /* 引用定义的动画,持续1.5秒,无限循环,缓入缓出 */
}

animation适用于循环播放的背景动效、加载指示器、复杂的多步骤演示等。它可以让元素在没有用户交互的情况下自主地动起来。

一些使用技巧和注意事项:

  • 性能优化: transform是少数几个可以被GPU加速的CSS属性之一。在动画中优先使用transform而非left/top/width/height等属性,可以获得更流畅的动画效果。有时,为了进一步提示浏览器,可以添加will-change: transform;,但要谨慎使用,因为它可能消耗更多资源。
  • 变换顺序: 记住,transform函数是按照书写顺序执行的。transform: translateX(100px) rotate(45deg); 和 transform: rotate(45deg) translateX(100px); 的最终效果是不同的。前者是先移动再旋转,后者是先旋转再移动,这在处理复杂动画时需要特别注意。
  • 累积变换: 如果你希望在每次触发时都基于上一次的状态进行变换(例如,每次点击都旋转45度),那CSS本身直接实现起来会有点麻烦,通常需要JavaScript来动态计算和更新transform值。
  • 浏览器兼容性: 尽管现代浏览器对transform的支持已经非常好,但在一些老旧浏览器中可能需要添加前缀(如-webkit-transform),不过现在这已经越来越少见了。

掌握transform与transition/animation的结合使用,能让你的网页元素从静态的图片和文字,变得生动有趣,极大地提升用户体验。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

352

2023.11.23

css3transition
css3transition

css3transition属性用于指定如何从一个CSS样式过渡到另一个CSS样式,本专题为大家提供transition相关的文章、相关下载和相关课程,大家可以免费体验。

1970

2023.06.27

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

18173

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

433

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

328

2025.12.30

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

323

2026.03.06

宝塔面板Nginx性能优化与高并发配置实践
宝塔面板Nginx性能优化与高并发配置实践

本专题围绕宝塔环境下的 Nginx 优化展开,深入讲解缓存策略、连接数调优、Gzip 压缩、静态资源加速及反向代理配置。帮助用户提升网站访问速度与并发处理能力。

916

2026.03.25

宝塔面板数据库管理与MySQL性能优化实践
宝塔面板数据库管理与MySQL性能优化实践

本专题围绕宝塔面板中的数据库管理功能展开,系统讲解 MySQL 安装配置、数据库创建与权限管理、慢查询分析及性能优化方法。内容涵盖索引优化、连接数调优、缓存机制配置以及数据库备份策略。通过实操讲解,帮助开发者提升数据库运行效率与稳定性。

245

2026.04.07

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

100

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 6.1万人学习

CSS教程
CSS教程

共754课时 | 98.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn