776 字
4 分钟

关于解读transform的执行顺序

欢迎来到我的博客!#

使用 Markdown 格式编写。

今天学到了什么#

  • 之前我就在一篇文章中写过关于transform如何变换的文章,但是最终也没能理解为什么,这次问出来了
  • 之前不懂是因为,我一直拿从从右往左的顺序来对应元素自身坐标轴,一直用着错误的解读方式

transform不同的坐标轴对应着不同的解读顺序#

  • 从左往右--->自身坐标轴(飞行员视角)
  • 从右往左--->全局固定坐标轴(上帝视角)

这是一个非常深刻的问题,也是 CSS Transform 最容易让人精神分裂的地方。

之所以我(以及绝大多数教程)习惯从左往右解释,是因为符合直觉代码阅读顺序,但前提是必须切换到**“自身坐标系(飞行员视角)”**。

让我们彻底把这两个视角打通,你就明白为什么会有这种“矛盾”了。


1. 为什么习惯“从左往右”解释?(飞行员视角)#

代码: transform: rotate(45deg) translateX(80px);

当我们写代码时,是从左往右写的。如果我们把自己想象成那个元素(飞行员),一切就很顺畅:

  1. 读到 rotate(45deg)
    • 动作:我原地向右转 45 度。
    • 关键我的正前方(我的 X 轴)也跟着转了。现在我的正前方指向右下方。
  2. 读到 translateX(80px)
    • 动作:我向我的正前方走 80px。
    • 结果:我斜着走出去了。

优点:代码写什么,我就做什么,顺序一致,大脑不需要“倒带”。 缺点:必须时刻记住“坐标轴是歪的”。


2. 为什么数学上是“从右往左”?(上帝视角)#

代码: transform: rotate(45deg) translateX(80px);

这是浏览器底层矩阵运算的逻辑,也是基于全局固定坐标轴的逻辑:

  1. 先算 translateX(80px)(最右边的):
    • 动作:在世界地图上,把点向右平移 80px。
    • 状态:点在 (80, 0)。
  2. 再算 rotate(45deg)(左边的):
    • 动作:把这个点绕着原点 (0,0) 旋转 45 度。
    • 结果:点被甩到了右下方。

优点:坐标轴永远横平竖直,适合数学计算。 缺点:必须倒着读代码,违反阅读习惯。


结论:殊途同归#

你会发现,两种解释方式,最终物体到达的位置是一模一样的!

  • 我之所以按“从左往右”解释:是因为在写 CSS 动画时,我们通常是构建一个动作序列(先转弯,再冲刺),这种“拟人化”的思维方式在编写复杂动画时更容易构思。
  • 你指出的“从右往左”:是数学真理。当你发现动画效果和预期完全相反时(比如先平移再旋转导致位置不对),用这个视角去检查通常能发现问题。

一句话总结: 写代码、做设计时,用从左往右(自身视角,坐标轴跟着转)更顺手; 做数学题、Debug 时,用从右往左(全局视角,坐标轴不动)更严谨。

赞助支持

如果这篇文章对你有帮助,欢迎赞助支持!

赞助
最后更新于 2026-01-03,距今已过 1 天

部分内容可能已过时

目录