SVG 以 XML 格式定义基于矢量的图形。
HTML <svg>
元素是 SVG 图形的容器。
SVG 有多种绘制路径、框、圆、文本和图形图像的方法。
表中的数字指定了第一个完全支持 <svg>
元素的浏览器版本。
Element | |||||
---|---|---|---|---|---|
<svg> | 4.0 | 9.0 | 3.0 | 3.2 | 10.1 |
<!DOCTYPE html> <html> <body> <svg width="100" height="100"> <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow"> </svg> </body> </html>
<svg width="400" height="100"> <rect width="400" height="100" style="fill:rgb(0,0,255); stroke-width:10; stroke:rgb(0,0,0)" /> </svg>
<svg width="400" height="180"> <rect x="50" y="20" rx="20" ry="20" width="150" height="150" style="fill:red;stroke:black;stroke-width:5;opacity:0.5" /> </svg>
<svg width="300" height="200"> <polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" /> </svg>
<svg height="130" width="500"> <defs> <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" /> <stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" /> </linearGradient> </defs> <ellipse cx="100" cy="70" rx="85" ry="55" fill="url(#grad1)" /> <text fill="#ffffff" font-size="45" font-family="Verdana" x="50" y="86">SVG</text> Sorry, your browser does not support inline SVG. </svg>
SVG 是一种用 XML 描述 2D 图形的语言。
Canvas 动态绘制 2D 图形(使用 JavaScript)。
SVG 是基于 XML 的,这意味着每个元素都可以在 SVG DOM 中使用。 您可以为元素附加 JavaScript 事件处理程序。
在 SVG 中,每个绘制的形状都被记忆为一个对象。 如果 SVG 对象的属性发生变化,浏览器可以自动重新渲染形状。
画布是逐像素渲染的。 在画布中,一旦图形被绘制出来,浏览器就会忘记它。 如果要更改其位置,则需要重新绘制整个场景,包括可能已被图形覆盖的任何对象。
The table below shows some important differences between Canvas and SVG:
Canvas | SVG |
---|---|
* 取决于分辨率 * 不支持事件处理程序 * 文本渲染能力差 * 您可以将生成的图像保存为 .png 或 .jpg * 非常适合图形密集型游戏 |
* 独立于分辨率 * 支持事件处理程序 * 最适合具有大渲染区域的应用程序(谷歌地图) * 如果复杂,渲染速度会很慢(任何使用 DOM 的东西都会很慢) * 不适合游戏应用 |