基本變換
示例
<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>
上面的示例基本上與上面的示例具有相同的效果,即矩形將是指定大小的兩倍。