HTML5 SVG


什么是SVG?

  • SVG代表可缩放矢量图形(Scalable Vector Graphics)
  • SVG用于定义Web的图形
  • SVG是W3C的推荐

HTML <svg>元素

HTML <svg>元素是SVG图形的容器.

SVG有几种绘制路径,框,圆,文本和图形图像的方法.


浏览器支持

表中的数字指定了完全支持<svg>元素的第一个浏览器版本.

元素(Element)




<svg> 4.0 9.0 3.0 3.2 10.1

SVG 圆形

实例

<!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 矩形



实例

<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 圆角矩形

抱歉,您的浏览器不支持内联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 星形

抱歉,您的浏览器不支持内联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 Logo

SVG 抱歉,您的浏览器不支持内联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>
  抱歉,您的浏览器不支持内联SVG.
</svg>
运行 »

SVG和Canvas之间的差异

SVG 是一种使用 XML 描述 2D 图形的语言.

Canvas 通过 JavaScript 来绘制 2D 图形.

SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的.您可以为某个元素附加 JavaScript 事件处理.

在SVG中,每个绘制的形状都被记住为对象.如果更改了SVG对象的属性,则浏览器可以自动重新渲染形状.

Canvas 逐像素渲染.在Canvas 中,一旦绘制了图形,浏览器就会忘记它.如果应更改其位置,则需要重绘整个场景,包括可能已被图形覆盖的任何对象.


Canvas 与 SVG 的比较

下表显示了Canvas和SVG之间的一些重要差异:

Canvas SVG
  • 依赖分辨率
  • 弱的文本渲染能力
  • 能够以 .png 或 .jpg 格式保存结果图像
  • 最适合图像密集型的游戏,其中的许多对象会被频繁重绘
  • 不支持事件处理器
  • 不依赖分辨率
  • 最适合带有大型渲染区域的应用程序(比如谷歌地图)
  • 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
  • 不适合游戏应用
  • 支持事件处理器

SVG 教程

要了解有关SVG的更多信息,请阅读我们的 SVG教程