1. 程式人生 > >HTML5 內聯 SVG

HTML5 內聯 SVG

什麼是SVG?

  • SVG 指可伸縮向量圖形 (Scalable Vector Graphics)
  • SVG 用於定義用於網路的基於向量的圖形
  • SVG 使用 XML 格式定義圖形
  • SVG 影象在放大或改變尺寸的情況下其圖形質量不會有損失
  • SVG 是全球資訊網聯盟的標準

SVG 的歷史和優勢

在 2003 年一月,SVG 1.1 被確立為 W3C 標準。

參與定義 SVG 的組織有:太陽微系統、Adobe、蘋果公司、IBM 以及柯達。

與其他影象格式相比,使用 SVG 的優勢在於:

  • SVG 可被非常多的工具讀取和修改(比如記事本)
  • SVG 與 JPEG 和 GIF 影象比起來,尺寸更小,且可壓縮性更強。
  • SVG 是可伸縮的
  • SVG 影象可在任何的解析度下被高質量地列印
  • SVG 可在影象質量不下降的情況下被放大
  • SVG 影象中的文字是可選的,同時也是可搜尋的(很適合製作地圖)
  • SVG 可以與 Java 技術一起執行
  • SVG 是開放的標準
  • SVG 檔案是純粹的 XML

SVG 的主要競爭者是 Flash。

與 Flash 相比,SVG 最大的優勢是與其他標準(比如 XSL 和 DOM)相相容。而 Flash 則是未開源的私有技術。

瀏覽器支援

Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支援內聯 SVG。

把 SVG 直接嵌入 HTML 頁面

使用 <embed> 標籤

<embed> 標籤被所有主流的瀏覽器支援,並允許使用指令碼。

註釋:當在 HTML 頁面中嵌入 SVG 時使用 <embed> 標籤是 Adobe SVG Viewer 推薦的方法!然而,如果需要建立合法的 XHTML,就不能使用 <embed>。任何 HTML 規範中都沒有 <embed> 標籤。

<embed src="rect.svg" width="300" height="100" 
type="image/svg+xml"
pluginspage
="http://www.adobe.com/svg/viewer/install/" />

註釋:pluginspage 屬性指向下載外掛的 URL。

使用 <object> 標籤

<object> 標籤是 HTML 4 的標準標籤,被所有較新的瀏覽器支援。它的缺點是不允許使用指令碼。

註釋:假如您安裝了最新版本的 Adobe SVG Viewer,那麼當使用 <object> 標籤時 SVG 檔案無法工作(至少不能在 IE 中工作)!

<object data="rect.svg" width="300" height="100" 
type="image/svg+xml"
codebase="http://www.adobe.com/svg/viewer/install/" />

註釋:codebase 屬性指向下載外掛的 URL。

使用 <iframe> 標籤

<iframe> 標籤可工作在大部分的瀏覽器中。

<iframe src="rect.svg" width="300" height="100">
</iframe>

在 HTML5 中,您能夠將 SVG 元素直接嵌入 HTML 頁面中:

<!DOCTYPE html>
<html>
<body>

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="190">
  <polygon points="100,10 40,180 190,60 10,60 160,180"
  style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />
</svg>

</body>
</html>

SVG 有一些預定義的形狀元素,可被開發者使用和操作。

SVG 形狀

SVG 有一些預定義的形狀元素,可被開發者使用和操作:

  • 矩形 <rect>
  • 圓形 <circle>
  • 橢圓 <ellipse>
  • 線 <line>
  • 折線 <polyline>
  • 多邊形 <polygon>
  • 路徑 <path>

<rect> 標籤

<rect> 標籤可用來建立矩形,以及矩形的變種。

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<rect width="300" height="100"
style="fill:rgb(0,0,255);stroke-width:1;
stroke:rgb(0,0,0)"/>

</svg>

程式碼解釋:

  • rect 元素的 width 和 height 屬性可定義矩形的高度和寬度
  • style 屬性用來定義 CSS 屬性
  • CSS 的 fill 屬性定義矩形的填充顏色(rgb 值、顏色名或者十六進位制值)
  • CSS 的 stroke-width 屬性定義矩形邊框的寬度
  • CSS 的 stroke 屬性定義矩形邊框的顏色

<circle> 標籤

<circle> 標籤可用來建立一個圓。

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red"/>

</svg>

程式碼解釋:

cx 和 cy 屬性定義圓點的 x 和 y 座標。如果省略 cx 和 cy,圓的中心會被設定為 (0, 0)

r 屬性定義圓的半徑。

<ellipse> 標籤

<ellipse> 標籤可用來建立橢圓。橢圓與圓很相似。不同之處在於橢圓有不同的 x 和 y 半徑,而圓的 x 和 y 半徑是相同的。

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<ellipse cx="300" cy="150" rx="200" ry="80"
style="fill:rgb(200,100,50);
stroke:rgb(0,0,100);stroke-width:2"/>

</svg>

程式碼解釋:

  • cx 屬性定義圓點的 x 座標
  • cy 屬性定義圓點的 y 座標
  • rx 屬性定義水平半徑
  • ry 屬性定義垂直半徑

<line> 標籤

<line> 標籤用來建立線條。

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<line x1="0" y1="0" x2="300" y2="300"
style="stroke:rgb(99,99,99);stroke-width:2"/>

</svg>

程式碼解釋:

  • x1 屬性在 x 軸定義線條的開始
  • y1 屬性在 y 軸定義線條的開始
  • x2 屬性在 x 軸定義線條的結束
  • y2 屬性在 y 軸定義線條的結束

<polygon> 標籤

<polygon> 標籤用來建立含有不少於三個邊的圖形。

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<polygon points="220,100 300,210 170,250"
style="fill:#cccccc;
stroke:#000000;stroke-width:1"/>

</svg>

程式碼解釋:

points 屬性定義多邊形每個角的 x 和 y 座標

<polyline> 標籤

<polyline> 標籤用來建立僅包含直線的形狀。

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<polyline points="0,0 0,20 20,20 20,40 40,40 40,60"
style="fill:white;stroke:red;stroke-width:2"/>

</svg>

<path> 標籤

<path> 標籤用來定義路徑。

下面的命令可用於路徑資料:

  • M = moveto
  • L = lineto
  • H = horizontal lineto
  • V = vertical lineto
  • C = curveto
  • S = smooth curveto
  • Q = quadratic Belzier curve
  • T = smooth quadratic Belzier curveto
  • A = elliptical Arc
  • Z = closepath

註釋:以上所有命令均允許小寫字母。大寫表示絕對定位,小寫表示相對定位。

<svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<path d="M250 150 L150 350 L350 350 Z" />

</svg>

上面的例子定義了一條路徑,它開始於位置 250 150,到達位置 150 350,然後從那裡開始到 350 350,最後在 250 150 關閉路徑。

(學習更全面的SVG,可往w3school_SVG教程