它们如何协同工作:Transform、Translate、Rotate、Scale 和 Offset

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

Firefox 72 最早推出了“独立变换”。也就是说,无需像这样组合变换:

.el {
  transform: translate(10px, 10px) scale(0.95) rotate(10deg);
}

…我们可以这样做

.el {
  rotate: 10deg;
  scale: 0.95;
  translate: 10px 10px;
}

这非常有用,因为在更改单个变换时必须重复其他变换,否则将其删除,这既繁琐又容易出错。

但这里有一些细微差别需要了解,Dan Wilson 深入探讨了这一点

需要了解的小细节

  • 独立变换首先发生。transform 属性最后发生,并叠加在已完成的操作之上,这可能会令人困惑¹
  • 它们都共享相同的 transform-origin
  • offset-* 属性有效地移动/旋转元素。这些操作发生在独立变换之后以及 transform 之前
  1. Claus Colloseus 写信来修复这篇文章中的一些问题,并阐明这有多么令人困惑。例如,rotate: 45deg; transform: rotate(-45deg); 将不会有任何效果,因为两者都会应用并有效地相互抵消。那么,translate: 50px 0; rotate: 45deg; transform: translate(-50px, 0) rotate(-45deg); 也应该全部抵消吗?不,由于顺序的原因,最终结果类似于 translate(14.6447px, -35.3553px)