如何在CSS中应用多个转换?

Ben*_*Ben 547 css transform css3

使用CSS,我如何申请多个transform

示例:在下文中,仅应用平移,而不是旋转.

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

luk*_*kad 896

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

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

如果有多个转换指令,则只应用最后一个转换指令.它就像任何其他CSS属性一样.

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

这个:transform: scale(1,1.5) rotate(90deg);
和:transform: rotate(90deg) scale(1,1.5);

不会产生同样的结果:https://jsfiddle.net/852hzq9w/

  • 我尝试将它们分隔为","就像用多个阴影完成的那样,但这不起作用.谢谢. (53认同)
  • @ jave.web,您的意思是“从右到左”,对吗?对于`transform:scale(1,1.5)rotation(90deg);`,旋转将发生在scale之前。 (3认同)
  • 是否有可能在其他之前应用一种转换......就像旋转之前的倾斜。至于我,无论我做什么,元素都会先旋转然后倾斜,这会导致我不想要的东西。 (2认同)
  • 所以现在将它们分成多行 (2认同)
  • transform:translate(100px,100px)rotate(45deg)translate(100px,100px)rotate(45deg); equals transform:translate(200px,200px)rotate(90deg),最后一个将添加 (2认同)

Jef*_*eff 42

我添加这个答案不是因为它可能有用,而是因为它是真的.

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

我从google搜索时发现的一个随机网站抓取了下面的图像,显示了旋转矩阵:

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

我找不到一个好的翻译例子,所以假设我记得/理解它,翻译:

[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[x y z 1]
Run Code Online (Sandbox Code Playgroud)

请参阅Wikipedia关于转换的文章以及Pragamatic CSS3教程中的更多内容,该教程对此进行了相当好的解释.我发现的另一个解释任意旋转矩阵的指南是Egon Rath关于矩阵的注释

当然,矩阵乘法在这些4x4矩阵之间工作,因此要进行旋转然后进行平移,可以制作适当的旋转矩阵并将其乘以平移矩阵.

这可以让你更自由地做到恰到好处,并且也会让任何人完全无法理解它在做什么,包括你在五分钟内完成.

但是,你知道,它有效.

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

  • 这真的不适合这个话题 (5认同)
  • 不幸的是,mines.edu上的"随机网站"现在已成为一个死链接. (3认同)

ric*_*ord 23

您还可以使用额外的标记层应用多个转换,例如:

<h3 class="rotated-heading">
    <span class="scaled-up">Hey!</span>
</h3>
<style type="text/css">
.rotated-heading
{
    transform: rotate(10deg);
}

.scaled-up
{
    transform: scale(1.5);
}
</style>
Run Code Online (Sandbox Code Playgroud)

当使用Javascript使用变换动画元素时,这非常有用.


小智 21

您可以应用多个这样的转换:

li:nth-of-type(2){
    transform : translate(-20px, 0px) rotate(15deg);
}
Run Code Online (Sandbox Code Playgroud)


sch*_*max 6

未来的某个时候,我们可以这样写:

li:nth-child(2) {
    rotate: 15deg;
    translate:-20px 0px;        
}
Run Code Online (Sandbox Code Playgroud)

在元素上应用单个类时,这将变得特别有用:

<div class="teaser important"></div>

.teaser{rotate:10deg;}
.important{scale:1.5 1.5;}
Run Code Online (Sandbox Code Playgroud)

此语法在进行中的CSS Transforms Level 2 规范中定义,但除了 chrome canary 之外,找不到有关当前浏览器支持的任何信息。希望有一天我会回来更新浏览器支持;)

本文中找到了您可能想要查看有关当前浏览器的变通方法的信息。

更新:功能已登陆 Firefox 72