Pixiv - KiraraShss
776 字
4 分钟
关于解读transform的执行顺序
欢迎来到我的博客!
使用 Markdown 格式编写。
今天学到了什么
- 之前我就在一篇文章中写过关于transform如何变换的文章,但是最终也没能理解为什么,这次问出来了
- 之前不懂是因为,我一直拿从从右往左的顺序来对应元素自身坐标轴,一直用着错误的解读方式
transform不同的坐标轴对应着不同的解读顺序
- 从左往右--->自身坐标轴(飞行员视角)
- 从右往左--->全局固定坐标轴(上帝视角)
这是一个非常深刻的问题,也是 CSS Transform 最容易让人精神分裂的地方。
之所以我(以及绝大多数教程)习惯从左往右解释,是因为符合直觉和代码阅读顺序,但前提是必须切换到**“自身坐标系(飞行员视角)”**。
让我们彻底把这两个视角打通,你就明白为什么会有这种“矛盾”了。
1. 为什么习惯“从左往右”解释?(飞行员视角)
代码: transform: rotate(45deg) translateX(80px);
当我们写代码时,是从左往右写的。如果我们把自己想象成那个元素(飞行员),一切就很顺畅:
- 读到
rotate(45deg):- 动作:我原地向右转 45 度。
- 关键:我的正前方(我的 X 轴)也跟着转了。现在我的正前方指向右下方。
- 读到
translateX(80px):- 动作:我向我的正前方走 80px。
- 结果:我斜着走出去了。
优点:代码写什么,我就做什么,顺序一致,大脑不需要“倒带”。 缺点:必须时刻记住“坐标轴是歪的”。
2. 为什么数学上是“从右往左”?(上帝视角)
代码: transform: rotate(45deg) translateX(80px);
这是浏览器底层矩阵运算的逻辑,也是基于全局固定坐标轴的逻辑:
- 先算
translateX(80px)(最右边的):- 动作:在世界地图上,把点向右平移 80px。
- 状态:点在 (80, 0)。
- 再算
rotate(45deg)(左边的):- 动作:把这个点绕着原点 (0,0) 旋转 45 度。
- 结果:点被甩到了右下方。
优点:坐标轴永远横平竖直,适合数学计算。 缺点:必须倒着读代码,违反阅读习惯。
结论:殊途同归
你会发现,两种解释方式,最终物体到达的位置是一模一样的!
- 我之所以按“从左往右”解释:是因为在写 CSS 动画时,我们通常是构建一个动作序列(先转弯,再冲刺),这种“拟人化”的思维方式在编写复杂动画时更容易构思。
- 你指出的“从右往左”:是数学真理。当你发现动画效果和预期完全相反时(比如先平移再旋转导致位置不对),用这个视角去检查通常能发现问题。
一句话总结: 写代码、做设计时,用从左往右(自身视角,坐标轴跟着转)更顺手; 做数学题、Debug 时,用从右往左(全局视角,坐标轴不动)更严谨。
赞助支持
如果这篇文章对你有帮助,欢迎赞助支持!
最后更新于 2026-01-03,距今已过 1 天
部分内容可能已过时