HTML5內聯SVG

HTML5內嵌SVG

什麼是SVG?

SVG 指可伸縮向量圖形(Scalable Vector Graphics)

SVG 用於定義用於網路的基於向量的圖形

SVG 使用XML格式定義圖形

SVG 影像在放大或改變尺寸的情況下其圖形品質不會有損失

SVG 是萬維網聯盟的標準

#借助SVG,我們可以實現很多同Canvas API類型的繪製操作,但在Canvas元素上繪製文字的時候,字元會以像素的方式固定到上面。文字成為了圖像的一部分,除非重新繪製Canvas繪製區域,否則無法改變文字內容。正因為如此,Canvas上面的文字無法被搜尋引擎獲取,而SVG上的文字卻是可搜尋的。例如,Google會對Web上的SVG內容中的文字進行索引。

SVG優勢

與其他影像格式相比(例如JPEG 和GIF),使用SVG 的優勢在於:

SVG 圖像可透過文字編輯器來建立和修改

SVG 圖像可被搜尋、索引、腳本化或壓縮

SVG 是可伸縮的

SVG 圖像可在任何的解析度下被高品質地列印

SVG 可在影像品質不下降的情況下放大

在頁面中加入SVG

 內嵌方式:像HTML中的其它元素一樣使用,在此基礎上可以編寫HTML,JavaScript和SVG的互動應用。

<body>
    <svg width="200" height="200">
    </svg>
</body>

外聯方式:透過<img>元素,在HTML導入外部SVG文件,缺點是無法編寫與SVG元素進行交互的腳本。

   <img src="example.svg" />

簡單的形狀

SVG包含了基本的形狀元素,如長方形、圓形和橢圓。形狀元素的尺寸和位置被定義成了屬性。矩形的屬性有width和height。圓形有一個表示半徑的r屬性。它們都應用CSS語法表示距離,因此單位包括了px 、point 、em等。

矩形:x="50" y="20"表示矩形的起點為(50,20)

<body>
    <svg width="200" height="200">
        <rect x="50" y="20" width="100" height="80" stroke="red" fill="#ccc"></rect>
    </svg>
</body>

SVG繪製開關物件是按物件文件中出現的順序進行的。如果我們在畫完矩形之後再畫圓,那麼圓形就會顯示在矩形之上。

增加一個圓形:

<body>    
<svg width="200" height="200">        
<rect x="50" y="20" width="100" height="80" stroke="red" fill="#ccc">
</rect>        
<circle cx="120" cy="80" r="40" stroke="#00f" fill="none" stroke-width="8"></circle> 
</svg>
</body>

變換SVG元素

#

SVG中可以將多個元素結合起來,使它們形成一個群組,變成一個整體。

<g>元素代表“群組”,可以用來結合多個相關的元素。組內成員可以由透過ID來引用。有些外,群組也可以作為一個整體進行變換。如果你為群組添加了變換屬性,那麼群組中所有內容都會進行變換。變換屬性包含了旋轉、變形、縮放和斜切。

 <svg width="200" height="200">
        <g transform="translate(60,0) rotate(30) scale(0.75)" id="ShapeGroup">
            <rect x="50" y="20" width="100" height="80" stroke="red" fill="#ccc"></rect>
            <circle cx="120" cy="80" r="40" stroke="#00f" fill="none" stroke-width="8"></circle>
         </g>
    </svg>

 重複使用內容

SVG中的<defs>元素用於定義留待將來使用的內容。可以用<use>元素將<defs>定義的內容連結到需要展示的地方。借助這兩個元素,你可以多次重複使用相同內容,消除冗餘。

<svg width="200" height="200">
        <defs>
            <g  id="ShapeGroup">
                <rect x="50" y="20" width="100" height="80" stroke="red" fill="#ccc"></rect>
                <circle cx="120" cy="80" r="40" stroke="#00f" fill="none" stroke-width="8"></circle>
            </g>
        </defs>
        <use xlink:href="#ShapeGroup" transform="translate(60,0)  scale(0.4)"></use>
        <use xlink:href="#ShapeGroup" transform="translate(120,80)  scale(0.75)"></use>
        <use xlink:href="#ShapeGroup" transform="translate(20,60)  scale(0.25)"></use>
    </svg>

圖案與漸層

<svg>
<defs>
            <pattern id="GravelPattern" patternContentUnits="userSpaceOnUse"
                x="0" y="0" width="100" height="67" viewBox="0 0 100 67">
                <image x="0" y="0" width="100" height="67" xlink:href="gravel.jpg" />
            </pattern>
            <%--渐变--%>
            <linearGradient id="RedBlackGradient">
                <stop offset="0%" stop-color="#000"></stop>
                <stop offset="100%" stop-color="#f00"></stop>
            </linearGradient>
        </defs>
      <rect x="0" y="20" width="100" height="80" stroke="red"
           fill="url(#RedBlackGradient)" />
        <circle cx="120" cy="80" r="40" stroke="#00f"
            stroke-width="8" fill="url(#GravelPattern)" />
    </svg>

路徑

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

<path> 標籤

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

下面的指令可用來路徑資料:

M = moveto

L = lineto

H = horizo​​ntal lineto

#V = vertical lineto

C = curveto

S = smooth curveto

Q = quadratic Belzier curve

#T = smooth quadratic Belzier curveto

T = smooth quadratic Belzier curveto

#T = smooth quadratic Belzier curveto

#T A = elliptical Arc

Z = closepath

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

SVG不公包含簡單的形狀,也包含自由形態的路徑。 path元素有一個d屬性,代表路徑資料。在d的值中,M代表移至(Move to),L代表劃線至(Line to),Q代表二次曲線,Z代表閉合路徑。

 <svg width="200" height="200">
        <path d="M25,50 L10,80 L20,80 L5,110,L15,110,L20,80 Z"  />
    </svg>
文字

SVG中文字有點類型於CSS中對於樣式的定義

<svg width="200" height="200">
        <text x="10" y="80" font-family="Droid Sans" stroke="#00f" fill="#00f"
            font-size="40px" font-weight="bold">Hello SVG</text>
    </svg>

SVG 與Canvas兩者間的區別

SVG 是一種使用XML 來描述2D 圖形的語言。

Canvas 透過 JavaScript 來繪製 2D 圖形。


SVG 是基於 XML,這表示 SVG DOM 中的每個元素都是可用的。您可以為某個元素附加 JavaScript 事件處理器。

###在 SVG 中,每個被繪製的圖形被視為物件。如果 SVG 物件的屬性發生變化,那麼瀏覽器能夠自動重現圖形。 ######Canvas 是逐像素進行渲染的。在 canvas 中,一旦圖形被繪製完成,它就不會繼續得到瀏覽器的注意。如果其位置發生變化,那麼整個場景也需要重新繪製,包括任何或許已被圖形覆蓋的物件。 ############
繼續學習
||
<svg> <defs> <pattern id="GravelPattern" patternContentUnits="userSpaceOnUse" x="0" y="0" width="100" height="67" viewBox="0 0 100 67"> <image x="0" y="0" width="100" height="67" xlink:href="gravel.jpg" /> </pattern> <%--渐变--%> <linearGradient id="RedBlackGradient"> <stop offset="0%" stop-color="#000"></stop> <stop offset="100%" stop-color="#f00"></stop> </linearGradient> </defs> <rect x="0" y="20" width="100" height="80" stroke="red" fill="url(#RedBlackGradient)" /> <circle cx="120" cy="80" r="40" stroke="#00f" stroke-width="8" fill="url(#GravelPattern)" /> </svg>
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!