【发布时间】:2019-11-05 05:22:56
【问题描述】:
在梳理了SVG specification 以及诸如this 和this 之类的指南之后,我仍然难以准确理解链式转换的工作原理。
精选相关引述
当您将 transform 属性应用于 SVG 元素时,该元素 获取当前正在使用的用户坐标系的“副本”。
还有:
当转换被链接时,需要注意的最重要的事情 就是这样,就像 HTML 元素转换一样,每个 变换应用于坐标系之后的坐标系 由前面的变换变换而成。
还有:
例如,如果您要对元素应用旋转, 然后是翻译,翻译根据 新的坐标系,而不是最初的非旋转坐标系。
还有:
转换的顺序很重要。该序列 转换函数在 transform 属性中指定 是它们应用于形状的顺序。
代码
第一个矩形的当前坐标系被缩放,然后旋转(注意顺序)。第二个矩形的当前坐标系旋转,然后缩放。
svg {
border: 1px solid green;
}
<svg xmlns="http://www.w3.org/2000/svg">
<style>
rect#s1 {
fill: red;
transform: scale(2, 1) rotate(10deg);
}
</style>
<rect id="s1" x="" y="" width="100" height="100" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg">
<style>
rect#s2 {
fill: blue;
transform: rotate(10deg) scale(2, 1);
}
</style>
<rect id="s2" x="" y="" width="100" height="100" />
</svg>
问题
我们知道,当我们链接变换时,会复制该元素使用的当前坐标系,然后按照指定的顺序应用变换。
当我们有一个已经缩放的用户坐标系,并且我们对其应用旋转时,矩形(如图所示)有效地倾斜(注意改变的角度)。如果我们以相反的方式进行这两个变换(旋转,然后缩放),则不会发生这种情况。
关于缩放的当前坐标系如何旋转的专家帮助,将不胜感激。我试图从技术(内部工作)角度理解为什么第一个矩形会发生倾斜。
谢谢。
【问题讨论】:
-
嗯,它和 CSS 元素一样,这可能对你有帮助:stackoverflow.com/questions/51077632/… .... 如果你能够做一些数学来计算最终的矩阵,你会明白但老实说它可能会变得非常棘手
-
旋转第一个矩形的当前坐标系,然后缩放(注意顺序)。 --> 不,坐标先缩放然后旋转,但是元素先旋转然后缩放
-
@temaniAfif 抱歉,这是一个错字。我现在正在修复它。
-
这只是仿射变换几何,它与 SVG 无关,除非您使用 SVG 来显示坐标变换。如果您沿角度的边缘进行各向异性拉伸,则角度似乎不会改变,如果不改变,它会改变。这里没有“转换顺序”问题。
-
我已经编辑了我的答案以插入更准确的细节和一些计算
标签: css svg css-transforms