前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库CSS transform-origin 对 rotate scale 的影响
CSS动画与视觉

transform-origin 怎么影响旋转和缩放的效果?

transform-origin 决定变换围绕哪个点进行。默认是元素的正中心,改成左上角后,同样的 rotate(45deg) 就会绕左上角转,视觉效果完全不同。scale 也一样,原点在哪里,哪里就是缩放不动的「钉子」。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#动画与视觉#动画
先看核心答案读代码示例
理解线索

变换原点的三个维度

  1. rotate围绕原点旋转,原点在左上角就绕左上角转
  2. scale以原点为不动点缩放,原点偏了元素会「滑走」
  3. translate平移不受原点影响,因为它只做位移

transform-origin 对 translate 无效。平移只移动坐标系,不涉及旋转或缩放的参考点。

核心回答

先记住这个答案

transform-origin 设定的是旋转和缩放的参考点。默认值是 50% 50%,也就是元素的正中心。把它改成 0 0,rotate(45deg) 就不再绕中心转,而是绕左上角转,元素会甩到右下方去。scale(2) 也一样,中心缩放时元素向四周均匀扩大,改到左上角缩放时元素只会向右下方扩大。

  • transform-origin 默认在元素中心
  • rotate 围绕原点旋转,改原点等于改旋转轴
  • scale 以原点为不动点向外或向内缩放
  • 可以接受一到三个值,分别对应 X、Y、Z 轴

旋转时原点位置的区别

想象一张纸钉在桌上,钉子在哪里,纸就绕哪里转。transform-origin 就是那颗钉子。

中心旋转与左上角旋转CSS
/* 默认绕中心旋转 */
.card-center {
  transform: rotate(45deg);
  /* transform-origin 默认 50% 50%,不用写 */
}

/* 绕左上角旋转 */
.card-corner {
  transform-origin: 0 0;
  transform: rotate(45deg);
}

第一个元素原地转了 45 度,视觉上还在原来的位置附近。第二个元素的左上角不动,整个元素像门一样绕铰链甩出去。两段代码唯一的区别就是 transform-origin。 在做「点击展开菜单」的动画时,把原点设在菜单按钮的位置,菜单就会从按钮处旋转展开,比从中心冒出来自然得多。

缩放时原点的作用

缩放的原点就是那个「不动的点」。从中心缩放,元素四个边均匀扩大。从左上角缩放,左上角钉住不动,元素只向右下方扩大。

左上角缩放CSS
.thumb {
  transform-origin: top left; /* 等同于 0 0 */
  transition: transform 200ms ease;
}

.thumb:hover {
  transform: scale(1.5); /* 左上角不动,向右下放大 */
}

这在图片缩略图悬停放大时很常见。如果缩略图在网格左上角,原点设 top left 就不会超出容器左边和上边。如果缩略图在右下角,就该把原点设成 bottom right。

三个值分别对应什么

transform-origin 可以接受一到三个值。一个值设 X 轴,两个值设 X 和 Y,三个值多出 Z 轴(只在 3D 变换里有意义)。

X 和 Y 可以用关键字(left、center、right / top、center、bottom),也可以用长度或百分比。百分比相对于元素自身宽高,所以 50% 50% 就是中心。Z 轴只能用长度,比如 transform-origin: 50% 50% -100px 表示原点在元素中心偏后 100 像素。

需要注意的是,transform-origin 改的是坐标系的原点位置,并不会移动元素本身。元素的布局位置不会因为设了 transform-origin 而变化。

回答前,多想一步

容易答错的地方

以为 transform-origin 对 translate 也有效
translate 是纯位移操作,不涉及旋转中心或缩放中心。不管 transform-origin 设成什么,translateX(50px) 的效果都一样。只有 rotate、scale、skew 这些和参考点有关的函数才受影响。
把百分比当成相对于父元素
transform-origin: 100% 100% 是元素自身的右下角,不是父元素的右下角。这和 translate 百分比相对自身是同一个规则。
试着用自己的话回答

面试官还会怎么问?

做一个从按钮位置展开的下拉菜单,transform-origin 怎么设?

如果按钮在菜单的左上角,菜单的 transform-origin 设成 top left,然后用 scale(0) 到 scale(1) 做过渡。菜单就会从按钮位置「长出来」。如果按钮在右上角,就改成 top right。

transform-origin 和 transform 的顺序有关系吗?

transform-origin 是独立属性,不管写在 transform 前面还是后面都一样。但 transform 里面多个函数的顺序是有影响的,比如先 translate 再 rotate 和先 rotate 再 translate 的效果不同,因为每个函数都在前一个函数变换后的坐标系上操作。

3D 场景里 transform-origin 的 Z 值有什么用?

第三个值设定原点在 Z 轴上的偏移。比如做翻牌效果时,把 transform-origin 的 Z 值设成卡片厚度的一半,旋转时正反两面就能对齐。不过大多数 2D 场景只需要前两个值。

从一道题,走向一组知识

把知识连起来

动画与视觉

父元素设了 transform,子元素的 fixed 定位为什么失效了?

父元素设了 transform 会改变子元素 fixed 定位的包含块,属于 transform 的另一个副作用。

动画与视觉

preserve-3d 和 flat 对嵌套 3D 变换的效果有什么区别?

3D 变换里 transform-origin 还多出 Z 轴分量,和 preserve-3d 搭配时效果更明显。

参考资料

  • CSS:动画与视觉参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 旋转时原点位置的区别
  3. 缩放时原点的作用
  4. 三个值分别对应什么
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑