跳到主要内容

标记与几何工程

把 SVG 当成 可序列化的 DOM 树 来建:命名空间、属性写入、几何测量、复用和嵌入。不要把 innerHTML 当场景图 API。

坐标系、CTM、绘制顺序见 01 文档模型。命中、相机、overlay 见 03 交互与命中

这一章覆盖什么

  • 在 HTML 文档里正确创建 SVG 节点
  • path 测长、规范化、基本形状何时换成 path
  • 渐变 / pattern / 滤镜的坐标系与光栅代价
  • clipPath、mask、marker 的职责边界
  • symbol / useforeignObject

文档清单

文档解决的问题
创建元素与命名空间SVG_NSinnerHTML vs createElementNSbaseVal
路径几何与测量dgetTotalLengthpathLengthgetBBox
形状文字与图像基本形状、text 不折行、image CORS、currentColor
渐变 Pattern 与滤镜objectBoundingBox 零尺寸、滤镜光栅化
clipPath-mask 与 marker硬裁 vs 软遮罩;marker 坐标系;clip 不是布尔运算
符号复用与 useshadow tree、外部 use 的 CORS;inline sprite
foreignObject 与 HTML 嵌入真 HTML / IME;Safari;尺寸必须显式

封装底线

  • 创建走 document.createElementNS("http://www.w3.org/2000/svg", name)。HTML 文档里 createElement("circle") 不是 SVG 元素。
  • 新代码用 href,不要写 xlink:href
  • 几何测量前把要测的形状规范化成 path,不要赌三引擎对 rectgetTotalLength 一致。
  • 复用默认 同文档 inline sprite,不要把外部 use 当生产默认。
  • vector-effect 生产只用 non-scaling-stroke

权威资料

核对日期:2026-08-26