HTML5 SVG



什么SVG?

  • SVG 支持可伸缩矢量图形
  • SVG 用于定义web图形
  • SVG 是W3C的推荐标准

HTML <svg> 元素

HTML <svg> 元素是一个SVG图形容器。

SVG 提供了几种方法,来绘制路径、框、圆、文本和图像。

浏览器支持

表中的数字指定第一个浏览器的版本,全面支持<svg>SVG元素。

元素
<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描述二维图形的语言.

Canvas 使用JavaScript在web页面上绘制二维图形.

SVG是基于XML的,这意味着每一个元素在SVG DOM里面是可用的。你可以将JavaScript事件处理程序附着到元素。

在SVG,每画形状记忆为对象。如果一个SVG的对象属性的改变,浏览器可以自动重新绘制形状

画布按像素渲染像素。在画布中,一旦图形被绘制,它被浏览器遗忘。如果它的位置应该改变,整个场景需要被重画,包括可能被任何图形包含的对象.


Canvas 和 SVG的比较

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

Canvas SVG
  • 分辨率的依赖性
  • 不支持事件处理程序
  • 文本渲染能力差
  • 你可以保存图像为JPG或者PNG。
  • 非常适合图形密集型游戏
  • 不依赖分辨率
  • 支持事件处理程序
  • 最适合大渲染区域的应用(谷歌地图)
  • 如果复杂的渲染速度慢(任何使用DOM会慢很多)
  • 不适合游戏应用