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

一. SVG是什么?

  1. SVG 意為可縮放矢量圖形(Scalable Vectors Graphics)。
  2. SVG 圖形在放大或者改變尺寸的情況下,其圖形的質(zhì)量不會有所損失。
  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)是一個整體。

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

<?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(可擴展標(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ù)的,重點是:什么是數(shù)據(jù),如何存放數(shù)據(jù)。
③ HTML是用來顯示數(shù)據(jù)的,重點是:顯示數(shù)據(jù)以及如何顯示數(shù)據(jù)更好上面。
HTML是與顯示信息相關(guān)的, XML則是與描述信息相關(guān)的。

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

<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個參數(shù)的列表 min-x, min-y, width and height, 以空格或者逗號分隔開
屬性 preserveAspectRatio屬性表示是否強制進行統(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)簽也屬于同一命名空間。用戶代理檢查他們是否屬于同一個命名空間,如果是的話才去如何處理命名空間下的標(biāo)簽標(biāo)記。
??注意,命名空間名稱只是字符串,盡管SVG命名空間名稱看起來像URI,但這并不重要。URI通常被使用,因為它們是唯一的,目的不是“鏈接”某處。(事實上??,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)簽名稱。這是通過在屬性名稱之前放置命名空間前綴和冒號來實現(xiàn)的,如上例中的<script>標(biāo)記所示。這告訴用戶代理該特定屬性屬于分配給命名空間前綴(XLink)的命名空間,并且它是可以用于具有相同含義的其他標(biāo)記上。
??請注意,使用未綁定到命名空間名稱前綴是XML錯誤。盡管xlink:href屬性不會導(dǎo)致錯誤,但上面示例中由xmlns:xlink屬性創(chuàng)建的綁定是絕對必要的。這個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 圖形輪廓的寬度
    這兩個屬性控制圖形的輪廓該怎么顯示。這里把圓形的輪廓設(shè)置為 1px 寬,邊框無填充顏色。
  • fill 填充顏色(設(shè)置形狀內(nèi)的顏色)
  • fill-rule 填充規(guī)則
解釋 如何判斷路徑的哪一側(cè)在路徑所構(gòu)成的形狀的內(nèi)部,從而判斷fill屬性如何給這個形狀上色。
類別 外觀屬性
nonzero / evenodd / inherit
  1. nonzero

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


    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="對圖片的文字描述">
  • 使用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

四. 添加樣式和動畫

  • 使用外部樣式表為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添加動畫
    animation-動畫
.star_Wrapper {
    animation: spin 2s 1s;
    transform-origin: 50% 50%;
}

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

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

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

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