SVG學(xué)習(xí)筆記

一. SVG是什么?

  1. SVG 意為可縮放矢量圖形(Scalable Vectors Graphics)。
  2. SVG 圖形在放大或者改變尺寸的情況下,其圖形的質(zhì)量不會(huì)有所損失。
  3. SVG 使用 XML 格式定義圖形。
  4. SVG 文件是純粹的 XML。
  5. SVG 是萬維網(wǎng)聯(lián)盟的標(biāo)準(zhǔn)。
  6. SVG 與諸如 DOM 和 XSL 之類的 W3C 標(biāo)準(zhǔn)是一個(gè)整體。

二. 代碼解釋(書p138實(shí)例)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="198px" height="188px" viewBox="0 0 198 188" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
    <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->
    <title>Star 1</title>
    <desc>Created with Sketch.</desc>
    <defs></defs>
    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
        <polygon id="Star-1" stroke="#979797" stroke-width="3" fill="#F8E81C" sketch:type="MSShapeGroup" points="99 154 40.2214748 184.901699 51.4471742 119.45085 3.89434837 73.0983006 69.6107374 63.5491503 99 4 128.389263 63.5491503 194.105652 73.0983006 146.552826 119.45085 157.778525 184.901699 "></polygon>
    </g>
</svg>

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  • XML
    Extentsible Markup Language(可擴(kuò)展標(biāo)記語言),用來定義其它語言的一種元語言,其前身是SGML(標(biāo)準(zhǔn)通用標(biāo)記語言)。它沒有標(biāo)簽集(tag set),也沒有語法規(guī)則(grammatical rule),但是它有句法規(guī)則(syntax rule)。
▲XML和HTML的區(qū)別

① XML不是HTML的替代品,XML和HTML是兩種不同用途的語言。
② XML是用來描述數(shù)據(jù)的,重點(diǎn)是:什么是數(shù)據(jù),如何存放數(shù)據(jù)
③ HTML是用來顯示數(shù)據(jù)的,重點(diǎn)是:顯示數(shù)據(jù)以及如何顯示數(shù)據(jù)更好上面
HTML是與顯示信息相關(guān)的, XML則是與描述信息相關(guān)的。

  • version="1.0" 定義所使用的SVG版本
  • standalone="no" standalone 這個(gè)屬性規(guī)定這個(gè) SVG 文件是否是“獨(dú)立的”,還是有引用外部文件。standalone="no" 意味著 SVG 文件不是獨(dú)立的,會(huì)引用外部文件。

<svg width="198px" height="188px" viewBox="0 0 198 188" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
    <!-- Generator: Sketch 3.2.2 (9983) - http://www.bohemiancoding.com/sketch -->
  • width="198px" height="188px" viewBox="0 0 198 188"
    SVG的根元素:width、height和viewbox屬性
viewbox(視框)
解釋 定義了SVG中所有形狀都需要遵循的坐標(biāo)系
包含4個(gè)參數(shù)的列表 min-x, min-y, width and height, 以空格或者逗號(hào)分隔開
屬性 preserveAspectRatio屬性表示是否強(qiáng)制進(jìn)行統(tǒng)一縮放
可用元素 <svg><symbol><image><marker><pattern><view>
▲▲▲ 命名空間
<svg xmlns="http://www.w3.org/2000/svg">
<!-- more tags here -->
</svg>

命名空間聲明由xmlns屬性提供。此屬性表示<svg>標(biāo)記及其子標(biāo)記屬于名稱空間為“http://www.w3.org/2000/svg”的XML方言,當(dāng)然,它是SVG。注意,命名空間聲明只需要在根標(biāo)記上提供一次。聲明定義了默認(rèn)命名空間,因此用戶代理知道所有<svg>標(biāo)簽的后代標(biāo)簽也屬于同一命名空間。用戶代理檢查他們是否屬于同一個(gè)命名空間,如果是的話才去如何處理命名空間下的標(biāo)簽標(biāo)記。
??注意,命名空間名稱只是字符串,盡管SVG命名空間名稱看起來像URI,但這并不重要。URI通常被使用,因?yàn)樗鼈兪俏ㄒ坏模康牟皇恰版溄印蹦程帯#ㄊ聦?shí)上??,URI經(jīng)常使用,通常使用術(shù)語“命名空間URI”而不是“命名空間名稱”。)

  • 重新聲明默認(rèn)命名空間
<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <!-- some XHTML tags here -->
    <svg xmlns="http://www.w3.org/2000/svg" width="300px" height="200px">
    <!-- some SVG tags here -->
    </svg>
  <!-- some XHTML tags here -->
  </body>
</html>

在此示例中,根<html>標(biāo)簽上的xmlns屬性將默認(rèn)名稱空間聲明為XHTML。因此,除了<svg>標(biāo)記,用戶代理將其及其所有子標(biāo)記解釋為屬于XHTML。 <svg>標(biāo)記具有自己的xmlns屬性,通過重新聲明默認(rèn)命名空間,這告訴用戶代理,<svg>標(biāo)記及其后代(除非他們也重新編寫默認(rèn)命名空間)屬于SVG。

  • 聲明命名空間前綴
<svg xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink">
  <script xlink:href="cool-script.js" type="text/ecmascript"/>
</svg>

命名空間前綴用于前綴屬性名稱和標(biāo)簽名稱。這是通過在屬性名稱之前放置命名空間前綴和冒號(hào)來實(shí)現(xiàn)的,如上例中的<script>標(biāo)記所示。這告訴用戶代理該特定屬性屬于分配給命名空間前綴(XLink)的命名空間,并且它是可以用于具有相同含義的其他標(biāo)記上。
??請(qǐng)注意,使用未綁定到命名空間名稱前綴是XML錯(cuò)誤。盡管xlink:href屬性不會(huì)導(dǎo)致錯(cuò)誤,但上面示例中由xmlns:xlink屬性創(chuàng)建的綁定是絕對(duì)必要的。這個(gè)XLink屬性在SVG中經(jīng)常在<a>,<use>和<image>標(biāo)簽等中使用,所以最好在文檔中始終包含XLink聲明。


<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
  • stroke 圖形輪廓的顏色
    stroke-width 圖形輪廓的寬度
    這兩個(gè)屬性控制圖形的輪廓該怎么顯示。這里把圓形的輪廓設(shè)置為 1px 寬,邊框無填充顏色。
  • fill 填充顏色(設(shè)置形狀內(nèi)的顏色)
  • fill-rule 填充規(guī)則
解釋 如何判斷路徑的哪一側(cè)在路徑所構(gòu)成的形狀的內(nèi)部,從而判斷fill屬性如何給這個(gè)形狀上色。
類別 外觀屬性
nonzero / evenodd / inherit
  1. nonzero

    這個(gè)值確定了某點(diǎn)屬于該形狀的“內(nèi)部”還是“外部”。從點(diǎn)向任意方向的無限遠(yuǎn)處繪制射線,然后檢測(cè)形狀與射線相交的位置。開始于0數(shù),射線上每次從左向右相交就加1,每次從右向左相交就減1。數(shù)一下相交次數(shù),如果結(jié)果是0,點(diǎn)就在路徑外面,否則認(rèn)為,點(diǎn)在路徑里面。
    nonzero "非零"
  2. evenodd
    這個(gè)值用確定了某點(diǎn)屬于該形狀的“內(nèi)部”還是“外部”。從點(diǎn)向任意方向的無限遠(yuǎn)處繪制射線,并數(shù)一數(shù)給定形狀與射線相交的路徑段的數(shù)目,如果數(shù)目是奇數(shù)的,點(diǎn)在內(nèi)部,如果數(shù)目是偶數(shù)的,點(diǎn)在外部。


    evenodd "奇偶"

  • DTD文件類型
    DTD一共有三大類型:
    (1)嚴(yán)格型的DTD
    在嚴(yán)格型的DTD中,不能再使用各種表現(xiàn)的標(biāo)記。如:<font>、<b>、<body bgColor>
    要求必須使用CSS來取代各種表現(xiàn)標(biāo)記。
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    (2)過渡型的DTD
    在過渡型的DTD中,可以繼續(xù)使用HTML中的表現(xiàn)的寫法。
    這些表現(xiàn)標(biāo)記,還可以繼續(xù)使用。如:<font>、<b>、<body bgColor> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    (3)框架的DTD
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

三. 在web頁面中插入SVG

  • 使用img標(biāo)簽
<img src="xxxx.svg" alt="對(duì)圖片的文字描述">
  • 使用object標(biāo)簽
<object data="img/svgfile.svg" type="image/svg+xml">

data屬性是你鏈接SVG資源的方式
type屬性描述了內(nèi)容的MIME類型
image/svg+xml是SVG的MIME類型(互聯(lián)網(wǎng)媒體類型:其消息能包括文本、圖像、音頻、視頻以及其他應(yīng)用程序?qū)S玫臄?shù)據(jù))

  • 把SVG作為背景圖像插入
  • 內(nèi)聯(lián)
    不同插入方式下可以使用的功能.png

四. 添加樣式和動(dòng)畫

  • 使用外部樣式表為SVG添加樣式
1. <link href="styles.css" type="text/css" rel="stylesheet"/>
2. <?xml-stylesheet href="styles.css" type="text/css"?> ?better!
  • 使用內(nèi)聯(lián)樣式為SVG添加樣式
<defs>
  <style type="text/css">
    <![CDATA[
        #star_path {
            stroke: red;
        }
    ]]>
  </style>
</defs>
  • 用CSS為SVG添加動(dòng)畫
    animation-動(dòng)畫
.star_Wrapper {
    animation: spin 2s 1s;
    transform-origin: 50% 50%;
}

資料來源
張寶的博客-SVG是什么?
DTD文件類型
XML
fill-rule
SVG命名空間

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,179評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,444評(píng)論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,948評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,185評(píng)論 0 287
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,717評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,602評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,794評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,045評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評(píng)論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,414評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,750評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容

  • SVG 學(xué)習(xí)筆記 SVG是什么 SVG 指可伸縮矢量圖形 (Scalable Vector Graphics) S...
    Penn_Xu閱讀 993評(píng)論 0 1
  • SVG概述 SVG : 可縮放矢量圖形,使用 XML 格式定義圖像。 SVG in HTML 直接嵌入HTML文檔...
    datasun閱讀 983評(píng)論 0 0
  • SVG學(xué)習(xí)筆記 簡(jiǎn)介 SVG使用XML來描述二維圖形和繪圖程序的語言。 SVG形狀 SVG在HTML頁面 SVG ...
    EL_PSY_CONGROO閱讀 258評(píng)論 0 0
  • HTML、XML、XHTML 有什么區(qū)別 1.HTML 是用來描述網(wǎng)頁的一種語言,指的是超文本標(biāo)記語言 (Hype...
    饑人谷_牛牛閱讀 701評(píng)論 0 2
  • 記錄Android NDK開發(fā)相關(guān)知識(shí),前期環(huán)境配置 自行谷歌 Android NDK 提供的組件 Android...
    jiantao閱讀 830評(píng)論 0 50