SVG的是唯一原生矢量平铺机制,必须置于中并用fill="url(#id)"引用;patternUnits="userSpaceOnUse"确保宽高为绝对像素值、缩放无损、行为可控,图块内坐标以(0,0)为原点,超出部分被裁剪。

SVG 的
必须放在 里,且带合法 ID
- 正确结构:
- 引用语法必须是:
fill="url(#dots)",不能是fill="#dots"或fill="dots" - ID 推荐只用小写字母、数字、下划线,例如
id="grid_2x2"
单位系统决定图案是否“听话”
默认 patternUnits="objectBoundingBox" 是最大陷阱:width/height 被解释为“被填充图形宽高的百分比”,图形一变,点距就乱。改成 patternUnits="userSpaceOnUse" 后,width/height 就是绝对像素值,行为稳定可预测。
- 设
width="12" height="12"→ 每个图块就是 12×12 像素,无论矩形是 100×100 还是 800×600,平铺节奏不变 - 此时
x和y也按像素解释,适合微调对齐边缘(如让第一个圆点紧贴左上角) - 不显式声明
patternUnits,不同浏览器旧版本可能表现不一致
图块内部坐标以 (0,0) 为原点
pattern 内所有子元素(
- 错误示例:
→ 圆心远在图块外,什么也不显示 - 正确做法:把图形居中放,比如
(对应 10×10 图块) - 可嵌套多个图形:一个
画横线 + 一个 画竖线 = 方格;两个错位 = 双层波点
用 patternTransform 做整体变换
patternTransform 作用于整个图块单元,不是单个图形。它在渲染前应用,不影响内部坐标逻辑,适合批量调整风格。
-
patternTransform="rotate(45)"→ 让斜线纹变成 45° -
patternTransform="scale(1.2)"→ 整体放大图块,点距变疏 -
patternTransform="translate(3,3)"→ 整体平移,常用于微调对齐 - 支持组合:
patternTransform="rotate(30) scale(0.8)"











