SVG從入門(mén)到起飛【1】

今天我們開(kāi)始一個(gè)新話(huà)題--SVG。

SVG在前端開(kāi)發(fā)者由其是前端可視化開(kāi)發(fā)者中越來(lái)越重要,圖表、圖形、特效等都可以用它來(lái)實(shí)現(xiàn)。雖然重要,但很多開(kāi)發(fā)者對(duì)它似乎并不太了解,所以我們先從簡(jiǎn)單的基礎(chǔ)說(shuō)起。


svg.png

SVG是什么

SVG是Scalable Vector Graphics的縮寫(xiě),即可縮放矢量圖形,也就是說(shuō)它本質(zhì)上是一種數(shù)學(xué)描述,縮小放大時(shí)不會(huì)引起質(zhì)量損失。SVG使用XML標(biāo)記語(yǔ)言,類(lèi)似于HTML,只不過(guò)HTML描述的是文檔結(jié)構(gòu),而SVG描述的是圖形。同時(shí)現(xiàn)代瀏覽器都支持直接在HTML中嵌入SVG。

SVG包含一些基礎(chǔ)的形狀元素,它們有直線(xiàn)(line)、矩形(rect)、圓(circle)、橢圓(ellipse)、多邊形(polygon)和相對(duì)高級(jí)且最重要的路徑(path)。這些基礎(chǔ)形狀以后我們會(huì)詳細(xì)討論。

SVG怎么用

對(duì)于前端開(kāi)發(fā)而言,SVG最終會(huì)像img元素一樣被嵌入到html中,或者說(shuō)嵌入到DOM結(jié)構(gòu)中。每個(gè)SVG都是由一個(gè) svg 元素包裹著的,所以我們?nèi)绻趙eb頁(yè)面上顯示SVG圖像,就是把 svg 元素嵌入到DOM結(jié)構(gòu)中。當(dāng)然要說(shuō)明的是, svg 并不是普通DOM元素,所以不能簡(jiǎn)單的像對(duì)待HTML元素一樣對(duì)待它。

在HTML中直接嵌入

在HTML中直接嵌入很簡(jiǎn)單,直接像寫(xiě)HTML一樣就可以了,如下

<body>
  <svg xmlns="http://www.w3.org/2000/svg" width="600" height="400">
  ...
  </svg>
<body>

這樣我們就在body里嵌入了一個(gè)寬600高400的svg元素,只要在 svg 元素中加入基礎(chǔ)形狀等內(nèi)容,就可以繪制出自己想要的圖形了。

原生JS動(dòng)態(tài)創(chuàng)建

有時(shí)我們需要?jiǎng)討B(tài)的生成或修改svg以及其內(nèi)容,方法如下

// 生成svg元素
let svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
// 設(shè)置width屬性值
svg.setAttribute('width', 600);
// 設(shè)置height屬性值
svg.setAttribute('height', 400);
// 添加到body
document.body.appendChild(svg);

使用d3.js創(chuàng)建

在使用d3.js生成圖表時(shí)svg是經(jīng)常用到的內(nèi)容,d3創(chuàng)建svg元素十分簡(jiǎn)單

d3.select('body')  // 選中body元素
    .append('svg')  // 添加svg元素
    .attr('width', 600)  // 設(shè)置width屬性值
    .attr('height', 400)  // 設(shè)置height屬性值

今天我們簡(jiǎn)單地介紹了一下svg,以及在頁(yè)面中使用它的幾種方式。后續(xù)我們會(huì)依次說(shuō)一說(shuō)svg的基礎(chǔ)形狀。

(微信公眾號(hào)var_web同步更新)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容