SVG的<path>中M、L、C、Q、A五类命令坐标逻辑各异:M/L定位起点与连线,C/Q依赖控制点映射,A的六参数仅最后xy为终点,大小写统一决定绝对或相对坐标系。

SVG 的 <path> 标签靠 d 属性里的命令序列绘图,M、L、C、Q、A 是最核心的五类命令,各自控制坐标的逻辑不同——不是简单“填数字就行”,而是取决于当前点、参考系和参数语义。理解它们的坐标机制,才能写出可维护、易调整的路径。
M 和 L:起点定位与线段连接的基础逻辑
M(Move To)不画线,只设置“当前点”;L(Line To)从当前点画直线到新位置。两者都依赖明确的起始状态:
- M 后必须跟一对坐标(x y),大写为绝对坐标,小写 m 表示相对于上一点的偏移
- L 后也是一对坐标,大写 L 是绝对终点,小写 l 是相对位移(如
l 20 -10表示右移 20、上移 10) - 连续多个 L 可省略字母,例如
M 10 10 L 30 10 L 30 40等价于M 10 10 L 30 10 30 40 - 若 path 以 L 开头(无 M 奠定起点),浏览器行为不可靠,通常忽略或报错
C 和 Q:曲线控制点与终点的坐标映射关系
C(三次贝塞尔)和 Q(二次贝塞尔)都靠控制点引导形状,但参数结构和坐标绑定方式不同:
- C 需要三组坐标:
C x1 y1 x2 y2 x y,其中 (x1,y1) 是起点控制点,(x2,y2) 是终点控制点,(x,y) 是曲线终点——所有坐标默认为绝对位置 - Q 只需两组:
Q x1 y1 x y,(x1,y1) 是唯一控制点,(x,y) 是终点;同样支持大小写区分绝对/相对 - S 和 T 是“平滑延续”命令:S 复用前一个 C/S 的终点控制点做镜像,T 复用前一个 Q/T 的控制点做对称推导,它们的坐标仍是相对于当前点的新终点
A:椭圆弧中六个参数的坐标作用分工
A 命令绘制椭圆弧,六个参数分工明确,只有最后两个(x y)是终点坐标,其余均不表示点位置:
- rx ry:椭圆横纵半轴长度,纯数值,无坐标系含义
- x-axis-rotation:椭圆长轴绕原点顺时针旋转角度(度),影响弧的方向感,但不改变坐标值
- large-arc-flag 与 sweep-flag:二进制开关,决定选大弧/小弧、顺时针/逆时针,影响路径走向而非坐标本身
- x y:唯一表示终点坐标的参数,遵循大小写规则(A 为绝对,a 为相对)
- 起点由前一命令结束位置自动确定,A 不接受起点参数
大小写与坐标系:统一影响所有命令的关键前提
所有路径命令都受大小写控制坐标类型,且全部基于 SVG 默认坐标系(原点左上,x 向右增,y 向下增):
- 大写字母(M、L、C、Q、A)→ 所有数值均为绝对坐标,以画布原点为基准
- 小写字母(m、l、c、q、a)→ 所有数值均为相对坐标,以“上一命令结束点”为基准原点
- H 和 V 是特例:H 只需 x 坐标(y 保持不变),V 只需 y 坐标(x 保持不变),大小写同样适用
- 数字支持小数、负数、科学计数法,空格或逗号均可分隔参数,但混用易引发解析歧义

















