HTML5 SVG

SVG 代表可縮放向量圖形。

什麼是 SVG

可縮放向量圖形(SVG)是一種基於 XML 的影象格式,用於為 Web 定義基於二維向量的圖形。向量影象可以放大或縮小到任何程度而不會丟失影象質量。

SVG 影象及其行為在 XML 檔案中定義 - 這意味著可以使用任何文字編輯器建立和編輯 SVG 影象。與其他影象格式(如 JPEG,PNG,GIF 等)相比,使用 SVG 還有其他一些優點。

  • 可以搜尋、索引、編寫指令碼和壓縮 SVG 影象。
  • 可以使用 JavaScript 實時建立和修改 SVG 影象。
  • SVG 影象可以任何解析度高質量列印。
  • 可以使用內建動畫元素對 SVG 內容進行動畫處理。
  • SVG 影象可以包含指向其他文件的超連結

提示: 向量影象由一組由數學定義的固定形狀組成,而點陣圖或光柵影象由一組稱為畫素的固定點組成。

將 SVG 嵌入到 HTML 頁面中

你可以使用 HTML5 <svg> 元素將 SVG 圖形直接嵌入到文件中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTML5 SVG</title>
</head>
<body>
    <svg width="300" height="200">
        <text x="10" y="20" style="font-size:14px;">
            Your browser support SVG.
        </text>
        Sorry, your browser does not support SVG.
    </svg>
</body>
</html>

注意: 所有主要的現代 Web 瀏覽器(如 Firefox,Chrome,Safari,Opera 和 Internet Explorer 9+)都支援內聯 SVG 渲染。

使用 SVG 繪製路徑和形狀

以下部分將介紹如何使用 HTML5 <svg> 元素在網頁上繪製基本的基於向量的路徑和形狀。

劃線

Line 是你可以使用 SVG 繪製的最基本路徑。以下示例將向你展示如何使用 SVG 元素 <line> 建立直線 :

<svg width="300" height="200">
    <line x1="50" y1="50" x2="250" y2="150" style="stroke:red; stroke-width:3;" />
</svg>

<line> 元素的屬性 x1x2y1y2(x1,y1)(x2,y2) 畫一條線。

繪製一個矩形

你可以使用 SVG <rect> 元素建立簡單的矩形和方形。以下示例將向你展示如何使用 SVG 建立和設定矩形形狀:

<svg width="300" height="200">
    <rect x="50" y="50" width="200" height="100" style="fill:orange; stroke:black; stroke-width:3;" />
</svg>

<rect> 元素的屬性 xy 定義了矩形的左上角的座標。屬性 widthheight 指定形狀的寬度和高度。

畫一個圓圈

你可以使用 SVG <circle> 元素建立圓形。以下示例將向你展示如何使用 SVG 建立和設定圓形形狀:

<svg width="300" height="200">
    <circle cx="150" cy="100" r="70" style="fill:lime; stroke:black; stroke-width:3;" />
</svg>

<circle> 元素的屬性 cxcy 指定了圓的中心的座標,屬性 r 指定了圓的半徑。如果屬性 cxcy 被省略或沒有指定,則圓的中心被設定為 (0,0)

使用 SVG 繪製文字

你還可以使用 SVG 在網頁上繪製文字。SVG 中的文字呈現為圖形,因此你可以將所有圖形轉換應用於它,但它仍然像文字一樣 - 這意味著它可以被使用者選擇並複製為文字。

<svg width="300" height="200">
    <text x="20" y="30" style="fill:purple; font-size:22px;">
        Welcome to Our Website!
    </text>
    <text x="20" y="30" dx="0" dy="20" style="fill:navy; font-size:14px;">
        Here you will find lots of useful information.
    </text>
</svg>

<text> 元素的屬性 xy 定義了左上角的絕對位置,而屬性 dxdy 指定相對位置。

你還可以使用 <tspan> 元素重新格式化或重新定位 <text> 元素中包含的文字範圍。文字包含在單獨的 tspans 中,但在同一文字元素中可以一次選擇 - 當你單擊並拖動以選擇文字時。但是,無法同時選擇單獨文字元素中的文字。

<svg width="300" height="200">
    <text x="30" y="15" style="fill:purple; font-size:22px; transform:rotate(30deg);">
        <tspan style="fill:purple; font-size:22px;">
            Welcome to Our Website!
        </tspan>
        <tspan dx="-230" dy="20" style="fill:navy; font-size:14px;">
            Here you will find lots of useful information.
        </tspan>
    </text>
</svg>

SVG 和 Canvas 之間的差異

HTML5 引入了兩個圖形元素 Canvas 和 SVG,用於在 Web 上建立豐富的圖形,但它們有著根本不同。下表總結了這兩個元素之間的一些基本差異,這將有助於你瞭解如何有效和適當地使用 Canvas 和 SVG 元素。

SVG 畫布
基於向量(由形狀組成) 基於光柵(由畫素組成)
多個圖形元素,它們成為 DOM 的一部分 單個 HTML 元素類似於行為 <img>
通過指令碼和 CSS 修改 僅通過指令碼修改
使用較少數量的物件或較大的表面或兩者都能提供更好的效能 使用較小的表面或較大數量的物件或兩者都能提供更好的效能
更好的可擴充套件性 - 可以在任何解析度下以高質量列印 可擴充套件性差 - 不適合在更高解析度下列印