基本变换
示例
<svg width="30" height="10">
<g fill="red">
<rect x="0" y="0" width="10" height="10" />
<rect x="20" y="0" width="10" height="10" />
</g>
</svg>
所有以下转换都汇总在元素的 transform
属性中。转换可以通过将它们连接起来,用空格隔开来进行链式操作。
翻译
可能需要移动一个元素,即使你可以使用相应的属性对其进行定位。为此,translate()
转换已经准备就绪。
<svg width="40" height="50" style="background-color:#bff;">
<rect x="0" y="0" width="10" height="10" transform="translate(30,40)" />
</svg>
此示例将呈现一个矩形,将其从 (0,0) 翻译到点 (30,40)。
如果没有给出第二个值,则假定为 0。
旋转
旋转元素是一项非常常见的任务。为此,请使用 rotate()
转换
<svg width="31" height="31">
<rect x="12" y="-10" width="20" height="20" transform="rotate(45)" />
</svg>
此示例显示了一个旋转 45 度的正方形。rotate()
的值为度数。
多个变换
转换可以通过简单的空格分隔来进行连接。例如,translate()
和 rotate()
是常用的转换。
<svg width="40" height="50" style="background-color:#bff;">
<rect
x="0"
y="0"
width="10"
height="10"
transform="translate(30,40) rotate(45)" />
</svg>
此示例再次显示了上面显示的小正方形,这次它还旋转了 45 度。
倾斜
要从矩形中创建菱形,可以使用 skewX()
和 skewY()
转换。每个转换都接受一个角度,该角度决定元素将倾斜的程度。
缩放
scale()
改变元素的大小。它接受两个数字,第一个是 x 比例因子,第二个是 y 比例因子。这些因子作为转换后的尺寸与原始尺寸的比率来取。例如,0.5 收缩 50%。如果省略第二个数字,则假定它等于第一个。
使用 matrix()
进行复杂变换
所有上述转换都可以用 2x3 变换矩阵来表示。要组合多个转换,可以使用 matrix(a, b, c, d, e, f)
转换直接设置结果矩阵,该转换通过以下方式将坐标从以前的坐标系映射到新的坐标系
请参见 SVG 转换文档中的具体示例。有关此属性的详细信息,请参见 SVG 建议。
对坐标系的影响
使用转换时,你将在应用转换的元素内部建立一个新的坐标系。这意味着你为元素及其子元素指定的单位可能不遵循 1:1 像素映射,而是根据转换进行扭曲、倾斜、平移和缩放。
<svg width="100" height="100">
<g transform="scale(2)">
<rect width="50" height="50" />
</g>
</svg>
上面示例中生成的矩形将为 100x100px。当你依赖 userSpaceOnUse
等属性时,会产生更有趣的效果。
在 SVG 中嵌入 SVG
与 HTML 相比,SVG 允许你无缝地嵌入其他 svg
元素。这样你也可以通过利用内部 svg
元素的 viewBox
、width
和 height
来创建新的坐标系。
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100" height="100">
<svg width="100" height="100" viewBox="0 0 50 50">
<rect width="50" height="50" />
</svg>
</svg>
上面的示例基本上与上面的示例具有相同的效果,即矩形将是指定大小的两倍。