使用CSS,如何应用多个转换?

示例:在以下示例中,仅应用平移,而不应用旋转。

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

当前回答

这是一个老问题,但最近发现与我非常相关。我发现“transform:metrix(..)”更方便使用。因此,对于所讨论的问题,下面的示例在x轴上应用约15度旋转和向右平移20px(为了方便)。

.matrix转换{变换原点:左上;变换:矩阵(0.965,0.258,-0.258,0.965,20,0);字体大小:30px;}.组合变换{变换原点:左上;变换:旋转(15度)平移X(20像素);字体大小:30px;}<div class=matrixTransform>A</div><div class=combindTransform>B</div>

根据我收集的数据,这个特定的变换使用初始的4个参数来表示变换,例如缩放、旋转。并且似乎是按行和列的顺序排列的。其余两个分别是x轴和y轴上的平移。我发现Wolfram Alpha备忘单(计算器)非常有用。

其他回答

你必须把它们放在一行,像这样:

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

当您有多个变换指令时,将只应用最后一个。这和其他CSS规则一样。


请记住,从右向左应用多个变换单行指令。

此:变换:缩放(1,1.5)旋转(90度);和:变换:旋转(90度)比例(1,1.5);

不会产生相同的结果:

.orderOne、.orderTwo{字体系列:无衬线;字体大小:22px;颜色:#000;显示:内联块;}.orderOne{变换:缩放(1,1.5)旋转(90度);}.orderTwo命令{变换:旋转(90度)比例(1,1.5);}<div class=“orderOne”>A.</div><div class=“orderTwo”>A.</div>

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

除了使用现有答案解释如何通过链接进行多个翻译之外,您还可以自己构建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转换,这样做会更有意义。

这是一个老问题,但最近发现与我非常相关。我发现“transform:metrix(..)”更方便使用。因此,对于所讨论的问题,下面的示例在x轴上应用约15度旋转和向右平移20px(为了方便)。

.matrix转换{变换原点:左上;变换:矩阵(0.965,0.258,-0.258,0.965,20,0);字体大小:30px;}.组合变换{变换原点:左上;变换:旋转(15度)平移X(20像素);字体大小:30px;}<div class=matrixTransform>A</div><div class=combindTransform>B</div>

根据我收集的数据,这个特定的变换使用初始的4个参数来表示变换,例如缩放、旋转。并且似乎是按行和列的顺序排列的。其余两个分别是x轴和y轴上的平移。我发现Wolfram Alpha备忘单(计算器)非常有用。

将来的某个时候,(现在可用,请参阅下面的更新)我们可以这样写:

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

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

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

.teaser{rotate:10deg;}
.important{scale:1.5 1.5;}

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

在本文中找到了有关当前浏览器的变通方法的信息,您可能希望查看这些信息。

更新:功能已在firefox72中

更新:现已推出chrome 104、edge 104、safari 14.1,请参见https://web.dev/css-individual-transform-properties/#:~:text=支持%20这些%20属性。-,浏览器%20支持,-%3A

可以像这样应用多个变换:

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