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教程)