HTML5 SVG

SVG(Scalable Vector Graphics,可缩放矢量图形)用 XML 标签来描述图形,是 HTML5 时代在网页中绘制"放大也不糊"的图形的利器。图标、地图、流程图,都是它的用武之地。

什么是 SVG

SVG 图形由点、线、面等数学对象组成,与分辨率无关——无论放大多少倍都清晰锐利,这是它和位图(如 PNG、JPG)最本质的区别。SVG 既可以内嵌在 HTML 里直接用标签绘制,也能保存成独立的 .svg 文件。

基础图形元素

元素作用关键属性
rect矩形x、y、width、height、rx(圆角半径)
circlecx、cy、r
ellipse椭圆cx、cy、rx、ry
line直线x1、y1、x2、y2
polyline折线points(点序列)
polygon多边形points(点序列)
path任意路径d(路径数据)

公共属性:样式怎么设置

fill 设置填充色,stroke 设置描边色,stroke-width 设置线宽,此外还有 fill-opacity、stroke-dasharray 等高级属性:

<svg width="300" height="120">
  <rect x="10" y="10" width="120" height="60"
        fill="orange" stroke="red" stroke-width="3"/>
  <circle cx="230" cy="40" r="30" fill="#00FF00"/>
  <line x1="10" y1="100" x2="290" y2="100"
        stroke="blue" stroke-width="2"/>
</svg>

在浏览器中显示为:一个橙色矩形、一个绿色圆形和一条蓝色横线。

path:最强大的绘图指令

path 用 d 属性描述路径:M 移到某点、L 画直线、H/V 画水平/垂直线、C 画贝塞尔曲线、Z 闭合路径。例如用三条直线围成一个三角形:

<svg width="100" height="100">
  <path d="M50 10 L90 90 L10 90 Z"
        fill="yellow" stroke="black"/>
</svg>

在浏览器中显示为:一个黄底黑边的三角形。

SVG 与 Canvas 对比

对比项SVGCanvas
本质用标签描述矢量图形用脚本逐像素绘制
放大不失真位图会变模糊
事件每个图形可单独绑定事件要自己根据坐标判断
适用场景图标、地图、简单动画大量图形、游戏、逐帧动画

易错点

  • SVG 坐标原点在左上角、y 轴向下,和数学中的坐标系方向相反。
  • 属性写错不会报错,只是图形"不显示",先检查 fill 与 stroke 是否写全。
  • 内联 SVG 的显示尺寸由 width/height 或 CSS 决定,别忘了设置。
  • 极老的浏览器(IE8 及更早)不支持 SVG,需要兼容时可考虑降级方案。

小结:SVG 用 XML 标签画矢量图,放大不模糊、图形可交互,适合图标与图形类场景;与 Canvas 的分工可以概括为"矢量静态优先 SVG,密集动态用 Canvas"。

笔记加载中…