本篇重點是基礎知識, 但願您看完以後能夠對svg作出一些簡單的修改, 或者是一個小圖片不用再等ui作完給咱們, 咱們能夠本身動手製做.css
XML 被設計用來傳輸和存儲數據, 指可擴展標記語言(_EX_tensible _M_arkup _L_anguage)
HTML 被設計用來顯示數據。html
SVG 是使用 XML 來描述二維圖形和繪圖程序的語言。(節選自w3school)前端
矢量圖介紹短片html5
<svg width="500" height="500" version="1.1"
xmlns="http://www.w3.org/2000/svg">java
例如SVG< a>元素和HTML< a>若是一個被稱爲svg:a和另外一個html:a,則能夠區分該元素, 做用就是防止svg標籤內的元素與html元素混亂一團.
html5中不寫這句影響也不大.面試
<?xml version="1.0" standalone="no"?> <!-- 1: 總體的長寬, 規則定義 --> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1:矩形 --> <!-- x, y 左上角的位置 --> <!-- fill: 填充的顏色 --> <rect width="100" height="100" style="x:20; y:20;" /> <!-- 1:圓形 --> <!-- 2: cx,cy 圓心的座標 --> <!-- 3: r半徑 --> <circle cx="70" cy="220" r="50" fill="red"></circle> <!-- 3: 直線 --> <!-- 兩個點的座標 --> <line x1="160" y1="80" x2="300" y2="80" style="stroke:green;stroke-width:16;"></line> <!-- 4: 多點線 --> <!-- 會自動把第一個點與最後一個點鏈接起來 --> <!-- points:一組一組的xy座標 --> <polyline points="500,60 330,60 420,180"></polyline> <!-- 5: 多邊形 --> <polygon points="470,400 450,320 410,320 410,340 410,440" style="fill:red;stroke:red;stroke-width:2"></polygon> </svg>
如圖所示:json
<rect width="100" height="100" x="20" y="20" />
setAttribute('x', 200)
讓他x軸變爲200<?xml version="1.0" standalone="no"?> <!-- 1: 視野 --> <!-- viewBox: 我能看到哪一部分, 當前就是左上角 --> <!-- viewBox就算小了, 可是總體的寬高是不變的, 因此會有放大縮小效果 --> <!-- 2: 若是viewport和viewBox的寬高比不相同。你須要本身來指定如何在SVG閱讀器(如瀏覽器)中顯示SVG圖像。你能夠在<svg>中使用preserveAspectRatio屬性來指定。 --> <!-- preserveAspectRatio meet就是保持原比例不失真--> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 100" preserveAspectRatio="none meet"> <rect width="200" height="200" style="x:20; y:20; rx:20;ry:60; fill:rgb(0,0,255);stroke-width:16; stroke:black"/> </svg>
1: 不設置viewBox
瀏覽器
2: 設置後
網絡
viewBox不影響總體svg的大小與比例, 只是以多大的窗口展現這個svg圖片前端工程師
神奇的 g 標籤
<?xml version="1.0" standalone="no"?> <!-- 1: <g>標籤分組了, 就有面向對象的概念了 --> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 定義了總體的屬性 --> <!-- 2: 能夠多層嵌套替換 --> <g style="fill:rgb(0,0,255);stroke-width:16"> <rect width="100" height="100" style="x:20; y:20; rx:20;ry:60; stroke:black"/> <rect width="100" height="100" style="x:20; y:140; rx:20;ry:60; stroke:black"/> </g> </svg>
效果以下圖, 如出一轍的兩個圖形
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <g style="fill:rgb(0,0,255);stroke-width:16"> <rect width="100" height="100" style="x:20; y:20; rx:20;ry:60; stroke:black"/> <rect width="100" height="100" style="x:20; y:140; rx:20;ry:60; stroke:black"/> <g style="fill:red;stroke-width:16"> <rect width="100" height="100" style="x:20; y:260; rx:20;ry:60; stroke:black"/> </g> </g> </svg>
如圖:
使用<use>標籤進行引用圖形, 而且在use標籤上進行新圖形的操做, 能夠直接設置xy之類的東西.
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <g id="cc"> <rect width="100" height="100" x="20" y="20" /> </g> <use xlink:href="#cc" transform="translate(160,0)" fill="red"/> </svg>
這裏可能會出現做用域的問題, 可是放在html裏面就沒問題了
後面會講問什麼放在html裏面會好, 已經如何解決這個問題!!!
有問題的同窗能夠用下面的代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <g id="cc"> <rect width="100" height="100" x="20" y="20" /> </g> <use xlink:href="#cc" transform="translate(160,0)" fill="red"/> </svg> </body> </html>
效果以下:
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1: 定義了一組漸變, 設置id方便引用 --> <defs> <!-- 這裏指定了漸變的區域, 1-0的範圍 --> <linearGradient id="orange_red" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" style="stop-color:rgb(255,255,0); stop-opacity:1"/> <stop offset="100%" style="stop-color:rgb(255,0,0); stop-opacity:1"/> </linearGradient> </defs> <!-- 1: 引入相應的漸變顏色 --> <ellipse cx="200" cy="190" rx="85" ry="55" style="fill:url(#orange_red)"/> </svg>
如圖所示:
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1: 定義填充類 --> <defs> <!-- 2: 內容寫在這裏 --> <pattern id="cc" x="0" y="0" width="0.2" height="0.2"> <circle cx="10" cy="10" r="10" fill="red"> </circle> </pattern> </defs> <rect width="400" height="400" fill="url(#cc)" style="x:20; y:20; rx:60;ry:60;stroke:black"/> </svg>
如圖所示:
<?xml version="1.0" standalone="no"?> <svg width="600" height="600" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1: 把path當成一支畫筆, path就是一鼓作氣的繪製操做 --> <!-- 2: M 是移動的xy m是移動的相對距離 c是curveto曲線圖 --> <!-- 3: L畫直線 --> <path d="M153 334 C153 334 151 334 151 334 C151 339 153 344 156 344 C164 344 171 339 171 334 C171 322 164 314 156 314 C142 314 131 322 131 334 C131 350 142 364 156 364 C175 364 191 350 191 334 C191 311 175 294 156 294 C131 294 111 311 111 334 C111 361 131 384 156 384 C186 384 211 361 211 334 C211 300 186 274 156 274" style="fill:white;stroke:red;stroke-width:2"/> </svg>
如圖所示:
簡單的也有
<?xml version="1.0" standalone="no"?> <svg width="600" height="600" version="1.1" xmlns="http://www.w3.org/2000/svg"> <path d="M150 0 L75 200 L225 200 Z" /> </svg>
如圖所示:
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- 1: 理論上svg並非一個專業處理文字的載體 --> <!-- 2: style標籤可使用大部分css屬性啦, 不用要px --> <!-- 3: xy對應的是左下角的基線, 而不是完美的左下角 --> <!-- 4: 文字的顏色也要放在fill屬性裏面, 這也更符合工程化 --> <text x="200" y="200" style="font-size:26;" fill="red">蚊子蚊子1</text> <!-- 5: 針對裏面每個字符設置距離 --> <!-- dx dy 具體到每一個文字的距離 --> <!-- 那麼我其實能夠巧用svg來搞點花裏胡哨的 --> <!-- 用波浪形畫個❤ --> <!-- 再加上動畫效果, 就是扭動起來的文字啦 --> <text x="200" y="300" dx="0 20 60 " dy="0 20 40" style="font-size:26;" fill="blue">蚊子蚊子2</text> <!-- tspan標籤對文字的單獨處理(含鏤空!!!!) --> <text x="200" y="100" style="font-size:40"> <tspan fill="red">蚊子3</tspan> <tspan stroke="blue" fill="none">蚊子4</tspan> </text> </svg>
如圖所示:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>textpath</title> </head> <body> <svg xmlns='http://www.w3.org/2000/svg' width='800' height='600'> <path id="path1" d='M 100 200 Q 200 100 300 200 T 500 200' stroke='rgb(0,255,0)' fill='none'> </path> <text style='font-size:24px;'> <textpath xlink:href='#path1'> 學來學去學來, 你還學得動嗎哈哈哈!! </textpath> </text> </svg> </body> </html>
去掉 fill='none':
加上 fill='none:
加上這個就能夠不用在html文件中才能顯示了, 也就是規定了做用域
<?xml version="1.0" standalone="no"?> <svg width="500" height="500" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <defs> <path id="my" d="M 100 200 Q 200 100 300 200 T 500 200" /> </defs> <text x="10" y="200" style="font-size:26" fill="red"> <textPath xlink:href="#my"> 學來學去學來, 你還學得動嗎哈哈哈!! </textPath> </text> </svg>
使用svg可不僅是把svg放在html結構中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <!-- 1: 這個爲啥網上沒人說? --> ![](./2.基本圖形.svg) <!-- 2: embed標籤引入 --> <embed id="cc" src="./2.基本圖形.svg" width="500" height="500" type="image/svg+xml" pluginspage="http://www.adobe.com/svg/viewer/install/" /> <!-- 3: object --> <object data="./2.基本圖形.svg" width="300" height="100" type="image/svg+xml" codebase="http://www.adobe.com/svg/viewer/install/" /> </body> </html>
仍是要單獨強調一下, svg有本身的比例, 可是若是你的項目須要把svg圖片撐滿容器的時候, 你就要在svg標籤上設置preserveAspectRatio="none meet", 不然是不容許破話svg比例的.(也可直接preserveAspectRatio ="none")
svg不是前端工程師的必修課, 同時也不是一門必須使用的技術, 不要據說svg好就強制使用,咱們要知道它好在哪,怎麼用更好才行.但經過學習svg的相關知識可使咱們能夠靠本身作出更多絢麗的東西, 也會擴充不少有趣的知識點, 鑄造咱們更好的思惟與知識體系.此次就是這樣, 但願和你一塊兒進步.