SVG文件可單獨使用,使用XML定義幷包含DTD聲明:css
<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> </svg>
在現代瀏覽器中,咱們能夠直接在HTML代碼中嵌入SVG代碼:html
<div class="svg-wrap"> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> </svg> </div>
即<svg>標籤,svg有三個視圖相關的屬性:jquery
viewBox ='20 20 100 100'
定義了起始座標爲(20, 20),寬高爲100的矩形區域,演示地址 用法 <align> [<meet or slice>] align: xMid xMin xMax 和 YMid YMin YMax 自由組合 e.g. preserveAspectRatio = "xMidYMid meet"
svg繪製基本圖形元素,只要明確好各個參數的含義,應該很簡單,老鐵們快速過一遍:css3
矩形,rx,ry定義圓角 <rect x="10" y="10" width="100" height="100" rx="5" ry="5" fill="yellow"></rect> 圓 cx cy 定義圓心 <circle cx="50" cy="50" r="40" fill="yellow"></circle> 橢圓 rx ry 定義長軸半徑、短軸半徑 <ellipse cx="50" cy="50" rx="40" ry="20" fill="yellow"></ellipse> 線段 <line x1="10" y1="10" x2="90" y2="90" stroke="yellow"></line> 折線 點與點之間用空格隔開 <polyline points="50,10 80,90 10,30 90,30 20,90" stroke="#fb3" fill="transparent"></polyline> 多邊形 <polygon points="50,10 80,90 10,30 90,30 20,90" stroke="#fb3" fill="transparent"></polygon> 路徑,能夠繪製上述全部圖形 d屬性定義路徑的具體形式 <path d="M10,10 C40,5 40,140 100,100" stroke="#fb3" stroke-width="4px"></path> 文字 dx dy是相對起點座標的偏移量,rotate指定單個文字的旋轉 <text x="10" y="10" dx="10" dy="10" textLength="100" rotate="20">示例文字</text>
主要有git
<g> <defs> <symbol> <use> <clipPath> <linearGradient> 等
能夠參考這個 codepen 演示 來理解。github
why svg?若是你問我爲何用svg作動畫,而不是其餘技術,那能夠告訴你如下幾點:web
SMIL 動畫 Demo
基於SMIL標準,能夠直接藉助svg animate標籤實現動畫。chrome
目前SMIL動畫多數均可以用css3來代替,但要讓某個物體沿着特定路徑移動,css3就無能爲力了(除了chrome46新增的motion-path)。編程
遺憾的是,SMIL標準正逐漸衰落,並不會成爲將來世界的主流,它正逐漸被css3所代替,因此咱們只需簡單瞭解svg中的SMIL特性便可。canvas
set 元素能夠在特定時間後,瞬間修改圖形元素的某個屬性值,它不是動畫,是一種突變。
animate元素定義在圖形元素裏面,它能夠改變圖形某一個屬性的值,須要指定起始值和結束值(from to)以及持續時間(dur)
animateMotion它能夠引用一個事先定義好的動畫路徑,用<mpath>元素引用,讓圖形按路徑定義的方式運動。
相似於css transform,它能夠改變圖形的transform屬性,e.g. rotate | translate | scale | skewX | skewY
snap.svg 動畫 Demo
經過css或js修改svg圖形的屬性也可實現動畫,這種方式也是目前最經常使用的。這就涉及到其餘的知識點了,css3的transform,transition,animation等,js的setInterval和requestAnimationFrame。除了用原生代碼控制,咱們固然也能夠用業界已經成熟的動畫庫來操做屬性:
// animejs api var animation= anime({ targets: '#svg-path', // 目標元素,支持css選擇器,dom,dom數組等 opacity: '0', 要變化的屬性,這裏是opacity屬性,能夠是任何css或svg屬性 duration: 3000, delay: 1000, easing: 'easeInOutQuart', loop: true, direction: 'reverse', // 動畫方向:逆向播放 complete: function(anim) { } });
常見的圖形屬性以下所示:
因爲svg技術過於強大,此文章只是拋磚引玉,更多精髓等待你們發掘:
method draw | 在線製做svg圖片
svgo | 強大的svg壓縮工具
svg trick | 一個研究svg技術的網站
vivus | 製做svg路徑動畫的js庫
snap.svg.js | svg中的jquery
snap.svg中文文檔
鑫空間,鑫生活 | 博主對svg和css研究很深