SVG已經出來好多年了,其實我也知道很久了~_~不過一直沒用過,平時一直都是切設計師給的效果圖寫頁面。css
最近設計師作網頁改版,裏面有些相似小框框,小圖標等須要一些動畫效果,一開始我只是想純粹的用css3動畫作出來,可是感受效果很是low,尤爲是在作折線的過分時,醜哭我了。無奈只好搬出來想學習良久的SVG,小白進修中。。。html
說到SVG,仍是先囉嗦一下它的意思吧!css3
SVG 是使用 XML 來描述二維圖形和繪圖程序的語言。就是你們所熟悉的可伸縮矢量圖形 (Scalable Vector Graphics)。瀏覽器
與其餘圖像格式相比,使用 SVG 的優點在於:css3動畫
Internet Explorer9,火狐,谷歌Chrome,Opera和Safari都支持SVG。svg
IE8和早期版本都須要一個插件 - 如Adobe SVG瀏覽器,這是免費提供的。工具
廢話很少說,直切主題!學習
1.關於svg的引入動畫
我如今主要是針對的HTML頁面的使用,因此也就直接在HTML裏直接引用了。ui
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>svg1</title> </head> <body> <h1>My first SVG</h1> <!-- 在Firefox、Internet Explorer九、谷歌Chrome和Safari中,你能夠直接在HTML嵌入SVG代碼。 --> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <circle cx="100" cy="50" r="40" stroke="#333" stroke-width="2" fill="#ff0000" /> <!-- 另外一種樣式寫法 --> <!-- <circle cx="100" cy="50" r="40" style="stroke:#333;stroke-width=2;fill:#ff0000;" /> --> </svg> </body> </html>
注意:svg不能直接嵌入到Opera裏面。
2.開始繪製
知道了怎麼引入svg,下面就要開始繪製了。
舉個例子!
我要繪製一個矩形:
<!DOCTYPE html> <html> <body> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect width="300" height="100" style="fill:#ccc;stroke-width:2;stroke:#333" /> </svg> </body> </html>
顯示爲:
可是,有點問題啊!不知道各位有沒有發現.
繪製的時候,我一開始就遇到了個問題,好比我畫矩形的時候,寬300,高100,邊框寬度2,可是在瀏覽器打開時,邊框顯示很不正常。心想多是太細了吧,開始加粗,越粗越不像樣。。。。
原來。。。根據瀏覽器,svg會有自身默認的畫布(乾脆叫作畫布吧)大小,這個大小好像也不太固定。因此解決的辦法是給svg根元素裏設置它的畫布大小,這個最好一開始就設置上,根據本身大小的需求設置。
以下:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width='500' height='500' style="outline: 5px solid #ccc;"> <rect width="300" height="100" style="fill:#ccc;stroke-width:2;stroke:#333" /> </svg>
效果就是:
這樣邊框就顯示正常了,以後所繪製的圖形也會出現一樣的效果,但願你們當心哈!
好啦!入門就到這裏,其餘圖形的小練習,好比圓形,直線,多邊形等,就參考一下http://www.runoob.com/svg/svg-rect.html,作繼續練習吧!
其中的fill-rule填充規則參考 http://blog.csdn.net/cuixiping/article/details/7848369;
3.svg路徑
關於繪製複雜曲線,能夠使用svg的路徑path來繪製。例如:
<path d="M10 10L90 90" stroke="#000000" style="stroke-width: 5px;"></path>
其中 d 是屬性名;
路徑畫虛線的方法:
<path stroke-dasharray="5,5" d="M5,20l25,0" /> 其中:第一個是每一個虛線的長度,第二個是虛線之間的間隔。
path的幾種路徑:
其中:字母大寫表示的是絕對位置,小寫是相對位置。
例1:SC曲線
<path d="M 100 400 L 100 100 L 200 200 C 300,400 400,400 500,200 S 700,0 800,200" fill="none" stroke='#ff0000' stroke-width='2'/>
效果圖:
其中:綠色的線是使用S路徑時自動添加的與C路徑對稱的線。
例2:QT曲線
<path d="M100,100 Q200,200 300,100 T 500,100" stroke-width="2" stroke="blue" fill='none'/>
其中:綠線爲使用T路徑時自動對稱的點。
小效果1:
<!-- 使文字按照路徑展現,能夠實現文字個性展現 --> <defs> <path id="path1" d="M20,20 S100,150 200,10" /> </defs> <text x="10" y="100" style="fill:red;"> <textPath xlink:href="#path1">I love SVG I love SVG</textPath> </text>
效果2:
<text x="550" y="400" fill="red" font-size="30" >你好 <!-- 使字按着路徑方向運動 --> <animateMotion path="M 0 0 L 100 -100 L100 -200" dur="5s" fill="freeze" /> </text>
祝你好運!