CSS 与布局 / CSS 里的 Path:一条路径的四种用途 / 读懂 "M 10 10 L 90 90":path 微语言 待审核 1 / 7
path data · 微语言

读懂 "M 10 10 L 90 90":path 微语言

path 字符串是一支画笔的移动记录:每个字母是一条命令,后面跟它要的坐标。画笔永远记着「当前点」,每条命令从当前点出发、画完把当前点挪到终点。就这么一套只有 10 个动词的微语言,撑起了 SVG 的 <path d>、CSS 的 path(),也是理解 shape() 的基础。

1 · 逐条命令的执行

选个图形,点 ▶ 或直接点下方命令,看当前段加粗高亮、贝塞尔曲线拉出橙色控制点辅助线:

图 1-1 · 逐条命令走一遍路径。可单步执行或直接点某条命令,当前段加粗高亮,贝塞尔曲线另拉出控制点辅助线。

大写与小写分别是绝对与相对坐标。L 70 130 画到坐标 (70, 130),l 70 130 画到「当前点再往右 70、往下 130」。图 1-1 里「箭头(全小写)」那个图形整条都是相对命令,虚线框里的 token 即为小写。另有一条简写规则:一条命令后面跟了多组坐标时自动重复(M 后的多余坐标按 L 算),所以 M 0 0 10 10 20 5 展开后是三条命令。

2 · 10 个动词速查

图 2-1 · 路径数据的十个动词速查。

3 · 它在 CSS 里的写法

CSS 不能裸写 path 串,要包进 path() 函数——一个带引号的字符串,前面还能加可选的 fill-rule(在 clip-path 进阶 §1 细讲)。但它只对 clip-path 这类裁剪语境有效:实测 Chrome 151 上 offset-path: path(evenodd, "…") 不被接受,d 也不收这个参数(核对于 2026-08)。

图 3-1 · 路径串在 CSS 里的三种写法。CSS 不能裸写路径串,须包进 path()clip-path 一路还可在前面加 fill-rule,另两路不接受。

坐标没有单位,也不会缩放。path() 里的数字按 px 解释,参照盒子的左上角为原点——盒子变大,形状不会跟着变大。这是它最大的短板,解法见 shape()url(#clipPath) 两页。