暗黑模式
变换(transform)
前端教程SVG
SVG 的许多元素都支持 transform
属性,用于坐标偏移(translate)、旋转(rotate)、缩放(scale)、倾斜(skew)等。
缩放(scale)
基本语法:
html
<svg>
<xxx transform="scale(sx,sy)" />
</svg>
1
2
3
2
3
sx
:X轴缩放比例sy
:Y轴缩放比例- 如果
sx=sy
,可以简写为scale(s)
scale 示例-1(uniform scale):
scale(4)
scale(3)
scale(2)
:分别把心形放大了4 倍、3 倍、2 倍(宽和高都一样)- 由于是以左上角坐标
(0,0)
作为变换原点的,所以红、黄、蓝心形的中心没有对齐
scale 示例-2(中心对齐):
svg.viewBox="-40 -40 80 80"
:把用户坐标往左上角偏移了 40 个单位,因此用户坐标原点处于视口的中心了- 此例中的
<path>
的坐标都减去了 10 个单位,以便让心形居中
scale 示例-3(不同比例):
scale(4,3)
scale(3,2)
scale(2,1)
:宽高缩放比例不一样,所以看起来被压扁了
scale 示例-4(翻转):
scale(4,-3)
scale(3,-2)
scale(2,-1)
:负数的比例会在缩放的同时翻转图形
偏移(translate)
基本语法:
html
<svg>
<xxx transform="translate(tx,ty)" />
</svg>
1
2
3
2
3
- tx:X轴的偏移量
- ty:Y轴的偏移量,可选,如果忽略,则默认为 0
translate 示例:
- 右边蓝色框中,使用
translate(10, 10)
translate(20, 20)
将黄色、红色心形对齐了。
旋转(rotate)
基本语法:
html
<svg>
<xxx transform="rotate(angle[,cx,cy])" />
</svg>
1
2
3
2
3
angle
:旋转角度cx, cy
:旋转原点,可选,默认为用户坐标原点 (0,0)
rotate 示例:
- 黄心
transform="rotate(90, 10, 20)"
:以 (10, 20) 作为旋转原点,顺时针旋转了90°; - 红心
transform="rotate(180, 10, 20)"
:以 (10, 20) 作为旋转原点,顺时针旋转了180°; - 绿心
transform="rotate(270, 10, 20)"
:以 (10, 20) 作为旋转原点,顺时针旋转了270°。
倾斜(skewX, skewY)
基本语法:
html
<svg>
<xxx transform="skewX(angle)" />
<xxx transform="skewY(angle)" />
<xxx transform="skewX(angle) skewY(angle)" />
</svg>
1
2
3
4
5
2
3
4
5
skewX(angle)
:沿着X轴倾斜 angle 角度skewX(angle)
:沿着Y轴倾斜 angle 角度
示例:
矩阵(matrix)
transform
坐标变换的本质是使用矩阵 matrix,上面的 scale
translate
rotate
skew
最终都会合并为一个矩阵,然后应用到图形上面。因此,我们也可以直接使用矩阵来变换图形:
基本语法:
html
<svg>
<xxx transform="matrix(a,b,c,d,e,f)" />
</svg>
1
2
3
2
3
a,b,c,d,e,f
:构成如下的矩阵((x,y)
为原始坐标,(x',y')
是经过矩阵变换后的坐标):
小结
本节我们学会使用 transform
进行某个图形的坐标变换,下节我们开始学习如何复用 SVG 代码。