HTML5內(nèi)聯(lián)SVG
HTML5內(nèi)嵌SVG
什麼是SVG?
SVG 指可伸縮向量圖形(Scalable Vector Graphics)
SVG 用於定義用於網(wǎng)路的基於向量的圖形
SVG 使用XML格式定義圖形
SVG 影像在放大或改變尺寸的情況下其圖形品質(zhì)不會(huì)有損失
SVG 是萬維網(wǎng)聯(lián)盟的標(biāo)準(zhǔn)
#借助SVG,我們可以實(shí)現(xiàn)很多同Canvas API類型的繪製操作,但在Canvas元素上繪製文字的時(shí)候,字元會(huì)以像素的方式固定到上面。文字成為了圖像的一部分,除非重新繪製Canvas繪製區(qū)域,否則無法改變文字內(nèi)容。正因?yàn)槿绱耍珻anvas上面的文字無法被搜尋引擎獲取,而SVG上的文字卻是可搜尋的。例如,Google會(huì)對Web上的SVG內(nèi)容中的文字進(jìn)行索引。
SVG優(yōu)勢
與其他影像格式相比(例如JPEG 和GIF),使用SVG 的優(yōu)勢在於:
SVG 圖像可透過文字編輯器來建立和修改
SVG 圖像可被搜尋、索引、腳本化或壓縮
SVG 是可伸縮的
SVG 圖像可在任何的解析度下被高品質(zhì)地列印
SVG 可在影像品質(zhì)不下降的情況下放大
在頁面中加入SVG
?內(nèi)嵌方式:像HTML中的其它元素一樣使用,在此基礎(chǔ)上可以編寫HTML,JavaScript和SVG的互動(dòng)應(yīng)用。
<body> <svg width="200" height="200"> </svg> </body>
外聯(lián)方式:透過<img>元素,在HTML導(dǎo)入外部SVG文件,缺點(diǎn)是無法編寫與SVG元素進(jìn)行交互的腳本。
? ?<img src="example.svg" />
簡單的形狀
SVG包含了基本的形狀元素,如長方形、圓形和橢圓。形狀元素的尺寸和位置被定義成了屬性。矩形的屬性有width和height。圓形有一個(gè)表示半徑的r屬性。它們都應(yīng)用CSS語法表示距離,因此單位包括了px 、point 、em等。
矩形:x="50" y="20"表示矩形的起點(diǎn)為(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繪製開關(guān)物件是按物件文件中出現(xiàn)的順序進(jìn)行的。如果我們在畫完矩形之後再畫圓,那麼圓形就會(huì)顯示在矩形之上。
增加一個(gè)圓形:
<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è)元素結(jié)合起來,使它們形成一個(gè)群組,變成一個(gè)整體。
<g>元素代表“群組”,可以用來結(jié)合多個(gè)相關(guān)的元素。組內(nèi)成員可以由透過ID來引用。有些外,群組也可以作為一個(gè)整體進(jìn)行變換。如果你為群組添加了變換屬性,那麼群組中所有內(nèi)容都會(huì)進(jìn)行變換。變換屬性包含了旋轉(zhuǎn)、變形、縮放和斜切。
<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>
?重複使用內(nèi)容
SVG中的<defs>元素用於定義留待將來使用的內(nèi)容。可以用<use>元素將<defs>定義的內(nèi)容連結(jié)到需要展示的地方。借助這兩個(gè)元素,你可以多次重複使用相同內(nèi)容,消除冗餘。
<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> 標(biāo)籤用來定義路徑。
<path> 標(biāo)籤
<path> 標(biāo)籤用來定義路徑。
下面的指令可用來路徑資料:
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 ArcZ = closepath
註解:以上所有指令均允許小寫字母。大寫表示絕對定位,小寫表示相對定位。 SVG不公包含簡單的形狀,也包含自由形態(tài)的路徑。 path元素有一個(gè)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中文字有點(diǎn)類型於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兩者間的區(qū)別SVG 是一種使用XML 來描述2D 圖形的語言。 Canvas 透過 JavaScript 來繪製 2D 圖形。
SVG 是基於 XML,這表示 SVG DOM 中的每個(gè)元素都是可用的。您可以為某個(gè)元素附加 JavaScript 事件處理器。