<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        小試SVG之新手小白入門教程

        來源:懂視網 責編:小采 時間:2020-11-27 22:02:24
        文檔

        小試SVG之新手小白入門教程

        小試SVG之新手小白入門教程:基本概念 svg(Scalable Vector Graphics)是一種基于XML語法的圖像格式,全稱是可縮放矢量圖,其它圖像格式都是基于像素處理的,SVG則是屬于對圖像的形狀描述,所以它本質上是文本文件,體積較小,且不管放大多少倍都不會失真.SVG是面向圖形,HTML時
        推薦度:
        導讀小試SVG之新手小白入門教程:基本概念 svg(Scalable Vector Graphics)是一種基于XML語法的圖像格式,全稱是可縮放矢量圖,其它圖像格式都是基于像素處理的,SVG則是屬于對圖像的形狀描述,所以它本質上是文本文件,體積較小,且不管放大多少倍都不會失真.SVG是面向圖形,HTML時

        基本概念

        svg(Scalable Vector Graphics)是一種基于XML語法的圖像格式,全稱是可縮放矢量圖,其它圖像格式都是基于像素處理的,SVG則是屬于對圖像的形狀描述,所以它本質上是文本文件,體積較小,且不管放大多少倍都不會失真.SVG是面向圖形,HTML時面向文本。

        嵌入到HTML

        SVG可以寫在一個獨立的文件中,然后用img, object, embed, iframe等標簽插入網頁

        <img src="circle.svg">
        <object id="object" data="circle.svg" type="image/svg+xml"></object>
        <embed id="embed" src="icon.svg" type="image/svg+xml">
        <iframe id="iframe" src="icon.svg"></iframe>

        SVG文件可以轉為base64編碼,然后作為Data URI寫入網頁

        <img src="data:image/svg+xml;base64,[data]" />

        SVG書寫的注意點

      1. SVG的元素和屬性必須按照標準格式來寫,因為XML是確認大小寫的
      2. SVG里的屬性值必須用引號引起來,就算是數值也必須這么做
      3. SVG圖像的默認大小是300像素(寬)x 150像素(高)
      4. 后面的元素會渲染在前面元素之上
      5. SVG的所有元素

        SVG的所有元素

        SVG的所有屬性

        SVG的所有屬性

        常用的形狀元素

        其實上圖只是對一些常用svg標簽的初步認識,因為svg所提供的標簽不止這些,而且比如path標簽是在svg中最為通用的形狀標簽,因為它可以通過設置路徑畫出其它圖形,比如矩形,圓,橢圓,多邊形,多線段,甚至是復雜的貝塞爾曲線等等

        path

        第一次看到svg的標簽的時候,打開控制臺,也是一臉懵逼,首先這里面的d屬性是個啥,M是啥,L是啥,Z是啥,H是啥,V是啥,C是啥,S是啥,Q是啥,T是啥,A是啥,我... 打擾了,打擾了

        嗯,26個兄弟快湊齊了,馬上就可以召喚神龍了。當然,path這條神龍在svg界就是“爸爸”,啥玩意都能給你弄出來,

        想要通過path勾勒出美妙的圖形,需要了解d這個屬性,path標簽中的d屬性可以定義一系列的指令和參數,每一個指令通過一個字母來指定,比如上面說的M,它表示移動到,也就是"move to"的意思,比如讓我們移動到(10, 10)的坐標點,就可以這樣寫:

        <rect d="M10 10" />'

        當然每一種字母都是區分大小寫的,比如M是基于畫布上的一個絕對坐標,而m則是基于上一個點的坐標,也就是相對坐標。比如有下面兩種指令

        <path d="M20,20 L40 40 M60 60 L80 80" fill="none" stroke="blue" stroke-width="5"/>
        
        <path d="M20,20 L40 40 m60 60 L80 80" fill="none" stroke="blue" stroke-width="5"/>

        兩個path唯一的區別就是第三個指令,一個是M60 60, 一個是m60 60

        線段指令(Line commands)

      6. L:L指令會拿到兩個參數,x坐標和y坐標,然后從當前位置到指定參數坐標位置來繪制線段
      7. H:H其實是horizontal的縮寫,意為繪制出水平方向的線段,因為方向已確定,所以只需一個參數就能完成線段的繪制
      8. V:同H同理,只不過表示垂直方向(vertical)的線段繪制
      9. 比如用H和V來繪制一個矩形, 我們一步一步來

        step1

        <path d="M10 10 H 90" fill="none" stroke="blue"/>

        step2

        <path d="M10 10 H 90 V 90" fill="none" stroke="blue"/>

        step3

        <path d="M10 10 H 90 V 90 H 10" fill="none" stroke="blue"/>

        step4

        <path d="M10 10 H 90 V 90 H 10 V 10" fill="none" stroke="blue"/>

        上面的寫法也可以通過一個指令來簡寫一下,這就用到了Z指令

        Z:該指令的作用是從當前位置向起始點畫出一條線段,它一般都被放置在一連串節點的末尾,并且不區分大小寫。可以理解為”閉環“指令

        所以上例可以寫成這樣,也能達到同樣的效果

        <path d="M10 10 H 90 V 90 H 10 Z" fill="none" stroke="blue"/>

        同樣,上例也可以通過相對定位的形式進行改寫,效果是一致的

        <path d="M10 10 h 80 v 80 h -80 Z" fill="transparent" stroke="blue"/>

        曲線指令(Curve commands)

        一說到曲線,那貝塞爾曲線是繞不開的,對于曾高數掛科的我來說是很排斥的,但好在閑著蛋疼,遂學之。

        path標簽中有兩類貝塞爾曲線,一種叫做“三次貝塞爾曲線(cubic curve)“, 一種叫做”二次貝塞爾曲線(quadratic curve)“,這名字聽起來就不接地氣。

        那先從三次貝塞爾曲線說起

        C:該指令用于創建一個三次貝塞爾曲線,需指定三組參數

        比如:

        <path d="M10 10 C 20 20, 40 20, 50 10" stroke="black" fill="transparent"/>

        首先,(20 20)和(40 20)表示控制節點,一個是描述曲線起始點的斜率,另一個是描述曲線終止點的斜率,最后一組(50 10)表示曲線的終點。總結一下這段示例,就是有一條從(10 10)到(50 10)的一條線段,通過設置兩個控制點的斜率,使這條線段的各個點彎曲成正確的(符合斜率趨勢的)曲線。

        MDN上有多組曲線的對比示例。

        這里面我們再添加一種情況,就是設置兩個水平的控制節點,來看看線段是如何變化的

        <path d="M10 10 C 10 10, 40 10, 50 10" stroke="black" fill="transparent"/>

        通過S指令能生成和上述示例中同樣的平滑曲線,使用S指令分為以下兩種情況

      10. S指令跟在C或者另一個S指令之后:那S指令的開始控制節點就是基于前一個控制節點的對稱點,并且S指令指定的第一組節點是結束控制節點
      11. 單獨的S指令:兩個控制節點會被設置為同一個點
      12. 比如如下代碼

         <svg
         xmlns="http://www.w3.org/2000/svg"
         width="190"
         height="160"
         >
         <path d="M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" stroke="black" fill="transparent"/>
        
         <circle cx="10" cy="80" r="2" fill="red"/>
         <circle cx="95" cy="80" r="2" fill="red"/>
         <circle cx="180" cy="80" r="2" fill="red"/>
         <circle cx="150" cy="150" r="2" fill="red"/>
         </svg>

        我們通過不斷改變S的第一組節點來看圖形的變化趨勢

        我們可以看到,隨著不斷給S指令結束控制節點的橫坐標累加,曲線會向右偏移。

        接下來看下S指令前面沒有其他C或者S指令的情況,代碼如下

        <svg
        xmlns="http://www.w3.org/2000/svg"
        width="300"
        height="300"
        >
        <path d="M10 80 S 95 150, 180 80" stroke="black" fill="transparent"/>
        
        <circle cx="10" cy="80" r="2" fill="red"/>
        <circle cx="95" cy="150" r="2" fill="red"/>
        </svg>

        另一種曲線是二次貝塞爾曲線(quadratic curve)

        它通過指令Q來來進行描述,相較于三次貝塞爾曲線,它更為簡單。

        Q:只需要指定兩組參數,第一組表示控制節點的坐標,第二組表示終點坐標。

        示例:

        <svg
        xmlns="http://www.w3.org/2000/svg"
        width="300"
        height="300"
        >
        <path d="M10 80 Q 95 10 180 80" stroke="black" fill="transparent"/>
        
        <circle cx="10" cy="80" r="2" fill="red"/>
        <circle cx="95" cy="20" r="2" fill="red"/>
        <circle cx="180" cy="80" r="2" fill="red"/>
        </svg>

        和三次貝塞爾類似,二次貝塞爾也提供了快捷的玩法,那就是T指令

        T:通過找到前一個控制節點,來推斷出一個新的控制點,T指令后面只需要指定一組結束點坐標即可,由于T指令是基于前一個控制點的基礎上來生成的,所以T指令之前必須要有Q指令或者其他T指令,否則生成的控制節點就和前一個控制節點就會重合,在畫布上看到的就僅僅是一條直線。

        示例:

         <svg
         xmlns="http://www.w3.org/2000/svg"
         width="300"
         height="300"
         >
         <path d="M10 80 Q 52.5 10, 95 80 T 180 80" stroke="black" fill="transparent"/>
        
         <circle cx="10" cy="80" r="2" fill="red"/>
         <circle cx="52.5" cy="10" r="2" fill="red"/>
         <circle cx="95" cy="80" r="2" fill="red"/>
         <circle cx="180" cy="80" r="2" fill="red"/>
        
         </svg>

        在上面幾個例子中,兩種曲線都生成了同樣的結果,雖然三次貝塞爾允許更多的自由度,但是決定使用哪種曲線還要依照具體情形以及對稱曲線的數量來定

        弧度(Arcs)

        在svg中也可以創建弧度這種曲線,它通過A指令來指定,A指令可以接收7個參數

      13. rx:x軸半徑
      14. ry:y軸半徑
      15. x-axis-rotation:弧形的旋轉角度
      16. large-arc-flag:決定弧線是大于180度好事小于180度,0表示小角度弧,1表示大角度弧
      17. sweep-flag:表示弧線的方向,0表示從起點到終點沿逆時針畫弧,1表示從起點到終點沿順時針畫弧
      18. x:弧形終點的橫坐標
      19. y:弧形終點的縱坐標
      20. 示例:

         <?xml version="1.0" standalone="no"?>
         <svg width="325px" height="325px" version="1.1" xmlns="http://www.w3.org/2000/svg">
         <path d="M80 80
         A 45 45, 0, 0, 0, 125 125
         L 125 80 Z" fill="green"/>
         <path d="M230 80
         A 45 45, 0, 1, 0, 275 125
         L 275 80 Z" fill="red"/>
         <path d="M80 230
         A 45 45, 0, 0, 1, 125 275
         L 125 230 Z" fill="purple"/>
         <path d="M230 230
         A 45 45, 0, 1, 1, 275 275
         L 275 230 Z" fill="blue"/>
         </svg>

        餅圖

        通過學習path,我們來繪制一個簡單的餅圖

         <svg width="325" height="325" xmlns="http://www.w3.org/2000/svg">
         <path d="M80 80
         A 45 45, 0, 0, 0, 125 125
         L 125 80 Z" fill="green"/>
         <path d="M170 80
         A 45 45, 0, 0, 1, 125 125
         L 125 80 Z" fill="red"/>
         <path d="M170 80
         A 45 45, 0, 0, 0, 125 35 
         L 125 80 Z" fill="blue" />
         <path d="M80 80
         A 45 45, 0, 0, 1, 125 35
         L 125 80 Z" fill="pink"/>
         </svg>

        小結

        在最近的一些項目中,接觸到了部分有關svg的需求,所以這篇文章就是記錄下自己在學習svg的一部分總結,比較基礎,方便自己今后的復習和查閱。

        參考資源

        MDN SVG

        總結

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        小試SVG之新手小白入門教程

        小試SVG之新手小白入門教程:基本概念 svg(Scalable Vector Graphics)是一種基于XML語法的圖像格式,全稱是可縮放矢量圖,其它圖像格式都是基于像素處理的,SVG則是屬于對圖像的形狀描述,所以它本質上是文本文件,體積較小,且不管放大多少倍都不會失真.SVG是面向圖形,HTML時
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费人成在线观看网站品爱网| 成人a毛片视频免费看| 久久久久国产精品免费看| 国产亚洲美女精品久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲精品无码专区在线在线播放| 色噜噜狠狠色综合免费视频| 国产又黄又爽又刺激的免费网址| 亚洲日韩精品国产3区| 国产精品公开免费视频| 日韩精品视频在线观看免费| 亚洲精品综合久久| a毛片视频免费观看影院| 亚洲国产精品无码久久久秋霞2| 好久久免费视频高清| 久久精品国产精品亚洲蜜月| 中文字幕免费在线看线人| 亚洲一级免费视频| 国产一区二区三区在线免费观看| 日日躁狠狠躁狠狠爱免费视频| 亚洲另类激情综合偷自拍图| 久久久久久夜精品精品免费啦| 亚洲精品乱码久久久久久下载 | 成人爱做日本视频免费| 美女扒开屁股让男人桶爽免费 | 免费三级毛片电影片| 亚洲精品av无码喷奶水糖心| 男人的天堂亚洲一区二区三区| 青草久久精品亚洲综合专区| 亚洲综合国产一区二区三区| 一区二区免费视频| 亚洲狠狠婷婷综合久久蜜芽| 亚洲中文字幕视频国产| 67194成手机免费观看| 亚洲国产成人精品无码区花野真一| 亚洲精品NV久久久久久久久久| 日本中文字幕免费高清视频| 亚洲色偷偷色噜噜狠狠99| 亚洲中文字幕无码日韩| 黄色片在线免费观看| 国产免费人成视频在线播放播|