首页  >  问答  >  正文

如何在 CSS 中应用多重变换?

<p>使用CSS,如何应用多个<code>transform</code>?</p> <p>示例:下面仅应用平移,不应用旋转。</p> <pre class="brush:php;toolbar:false;">li:nth-child(2) { transform: rotate(15deg); transform: translate(-20px,0px); }</pre> <p><br /></p>
P粉066224086P粉066224086390 天前527

全部回复(3)我来回复

  • P粉081360775

    P粉0813607752023-09-01 12:18:08

    我添加这个答案不是因为它可能有帮助,而是因为它是真实的。

    除了使用现有答案解释如何通过链接进行多个翻译之外,您还可以 自己构建 4x4 矩阵

    我从我在谷歌搜索时发现的一些随机站点显示了旋转矩阵:

    绕 x 轴旋转:
    绕 y 轴旋转:
    绕 z 轴旋转:

    我找不到很好的翻译示例,所以假设我记得/理解正确,翻译:

    [1 0 0 0]
    [0 1 0 0]
    [0 0 1 0]
    [x y z 1]

    请参阅有关转换的维基百科文章以及Pragamatic CSS3 教程 很好地解释了这一点。我发现的另一个解释任意旋转矩阵的指南是 Egon Rath 关于矩阵的笔记

    当然,这些 4x4 矩阵之间可以进行矩阵乘法,因此要执行旋转和平移,您需要创建适当的旋转矩阵并将其乘以平移矩阵。

    这可以给你更多的自由来让它恰到好处,并且也使得任何人都几乎完全不可能理解它在做什么,包括五分钟内的你。

    但是,你知道,它确实有效。

    编辑:我刚刚意识到我错过了可能最重要和最实际的用途,即通过 JavaScript 逐步创建复杂的 3D 转换,这样事情会变得更有意义。

    回复
    0
  • P粉231112437

    P粉2311124372023-09-01 09:44:56

    你必须将它们放在一行上,如下所示:

    li:nth-child(2) {
        transform: rotate(15deg) translate(-20px,0px);
    }

    当您有多个转换指令时,仅应用最后一个。就像任何其他 CSS 规则一样。


    请记住,多个转换一行指令是从右向左应用

    这个:变换:scale(1,1.5)rotate(90deg);
    和:变换:旋转(90deg)缩放(1,1.5);

    不会产生相同的结果:

    .orderOne, .orderTwo {
      font-family: sans-serif;
      font-size: 22px;
      color: #000;
      display: inline-block;
    }
    
    .orderOne {
      transform: scale(1, 1.5) rotate(90deg);
    }
    
    .orderTwo {
      transform: rotate(90deg) scale(1, 1.5);
    }
    <div class="orderOne">
      A
    </div>
    
    <div class="orderTwo">
      A
    </div>

    回复
    0
  • 取消回复