svg sprite

概述

SVG(Scalable Vector Graphics)是一種矢量圖格式。Adobe Illustrator是專門編輯硕蛹、制作矢量圖的軟件猪腕。

隨著高清視網(wǎng)膜屏幕的出現(xiàn),Web設(shè)計需要根據(jù)屏幕輸出不同分辨率的圖片誉帅。在開發(fā)中需要準(zhǔn)備兩套不同的圖片應(yīng)對,一套在普通屏幕上顯示右莱;一套在高清屏幕上顯示蚜锨。

現(xiàn)在流行的icon font字體圖標(biāo),其實質(zhì)上是SVG的封裝慢蜓。

SVG的優(yōu)勢

  • SVG是矢量圖形文件亚再,無限放大不失真。
  • 可以用CSS樣式來自由定義圖標(biāo)顏色晨抡,比如顏色/尺寸等效果氛悬。
  • 所有的SVG可以全部在一個文件中,節(jié)省HTTP請求 耘柱。
  • 使用SMIL如捅、CSS或者是javascript可以制作充滿靈性的交互動畫和濾鏡效果。
  • 由于SVG也是一種XML節(jié)點的文件调煎,所以可以使用gzip的方式把文件壓縮到很小镜遣。

Adobe Illustrator

Adobe Illustrator能直接把文件保存成SVG格式:

1-1保存-選擇SVG(svg)
1-2格式類型選擇 SVG 1.1

瀏覽器支持

瀏覽器支持統(tǒng)計

在所有瀏覽器中支持,可以采用以下方式:David Bushell

  • 使用 JavaScript if there’s an error:
    <img src="image.svg" onerror="this.onerror=null; this.src='image.png'">

  • 使用Modernizr檢測,JQuery做降級處理:
    <pre>
    if (!Modernizr.svg) {
    $('img[src$=".svg"]').each(function() {
    $(this).attr('src', $(this).attr('src').replace('.svg', '.png'));
    });
    }
    </pre>

  • 使用Modernizr檢測,CSS降級處理:
    Modernizr在檢測到不支持SVG時汛蝙,會在HTML上加了no-svgCSS類
    <pre>
    .icon-logo
    {
    background: url(logo.svg) no-repeat top left;
    background-size: contain;
    }
    </pre>

    <pre>
    .no-svg .main-header
    {
    background-image: url(logo.png);
    }
    </pre>

  • 使用SVGeezy插件

SVG的使用

  • 使用imgobject標(biāo)簽直接引用svg烈涮。這種方法的缺點主要在于要求每個圖標(biāo)都單獨保存成一個SVG文件朴肺,使用時也是單獨請求的窖剑,增加了HTTP請求坚洽。

    • 最簡單的用法:
      <img src="image.svg">

    • 使用object標(biāo)簽:
      <object type="image/svg+xml" data="image.svg">
      <img src="fallback.png">
      </object>

    • 使用object標(biāo)簽,Data URL 方式
      <object type="image/svg+xml" data="data:image/svg+xml;base64,[data]">
      <img src="fallback.png">
      </object>

    • object+css:不能加載svg時西土,會渲染內(nèi)部 div的樣式

      html:
      <object id="logo" type="image/svg+xml" data="logo.svg">
      <div>logo description</div>
      </object>
      css:
      #logo div
      {
      width: 300px;
      height: 50px;
      background-image: url("logo.png");
      }

  • Inline SVG讶舰,直接把SVG寫入 HTML 中,這種方法簡單直接需了,而且具有非常好的可調(diào)性跳昼。Inline SVG 作為HTML文檔的一部分,不需要單獨請求肋乍。臨時需要修改某個圖標(biāo)的形狀也比較方便鹅颊。但是Inline SVG使用上比較繁瑣,需要在頁面中插入一大塊SVG代碼不適合手寫墓造,圖標(biāo)復(fù)用起來也比較麻煩堪伍。

     <!--[if (gt IE 8)]><!--><svg></svg><!--<![endif]-->
    
  • SVG Sprite。這里所說的Sprite技術(shù)觅闽,沒錯帝雇,類似于CSS中的Sprite技術(shù)。圖標(biāo)圖形整合在一起蛉拙,實際呈現(xiàn)的時候準(zhǔn)確顯示特定圖標(biāo)尸闸。其實基礎(chǔ)的SVG Sprite也只是將原來的位圖改成了SVG而已。

  • 使用svg中的<symbol>元素來制作icon孕锄。SVG本身的定義是允許你可以使用<use>的方式直接引用SVG中的某一部分吮廉。

首先使用<symbol>方式,將SVG文件組裝起來畸肆。注意每個<symbol>都必須有唯一的id宦芦。
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="circle-cross" viewBox="0 0 32 32">
<title>circle-cross icon</title>
<path d="M16 1.333q2.99 0 5.703 1.161t4.677 3.125 3.125 4.677 1.161 5.703-1.161 5.703-3.125 4.677-4.677 3.125-5.703 1.161-5.703-1.161-4.677-3.125-3.125-4.677-1.161-5.703 1.161-5.703 3.125-4.677 4.677-3.125 5.703-1.161zm0 2.667q-2.438 0-4.661.953t-3.828 2.557-2.557 3.828-.953 4.661.953 4.661 2.557 3.828 3.828 2.557 4.661.953 4.661-.953 3.828-2.557 2.557-3.828.953-4.661-.953-4.661-2.557-3.828-3.828-2.557-4.661-.953zm3.771 6.885q.552 0 .948.391t.396.943-.396.948l-2.833 2.833 2.833 2.823q.396.396.396.938 0 .552-.396.943t-.948.391-.938-.385l-2.833-2.823-2.823 2.823q-.385.385-.948.385-.552 0-.943-.385t-.391-.938q0-.563.385-.948l2.833-2.823-2.833-2.833q-.385-.385-.385-.938t.391-.948.943-.396.948.396l2.823 2.833 2.833-2.833q.396-.396.938-.396z"/>
</symbol>
<symbol id="circle-check" viewBox="0 0 32 32">
<title>circle-check icon</title>
<path d="M16 1.333q2.99 0 5.703 1.161t4.677 3.125 3.125 4.677 1.161 5.703-1.161 5.703-3.125 4.677-4.677 3.125-5.703 1.161-5.703-1.161-4.677-3.125-3.125-4.677-1.161-5.703 1.161-5.703 3.125-4.677 4.677-3.125 5.703-1.161zm0 2.667q-2.438 0-4.661.953t-3.828 2.557-2.557 3.828-.953 4.661.953 4.661 2.557 3.828 3.828 2.557 4.661.953 4.661-.953 3.828-2.557 2.557-3.828.953-4.661-.953-4.661-2.557-3.828-3.828-2.557-4.661-.953zm4.49 7.99q.552 0 .943.391t.391.943-.396.948l-5.656 5.656q-.385.385-.938.385-.563 0-.948-.385l-2.833-2.823q-.385-.385-.385-.948 0-.552.391-.943t.943-.391.948.396l1.885 1.885 4.708-4.719q.396-.396.948-.396z"/>
</symbol>

</svg>

1.  將SVG的XML文檔插入到HTML中,直接用id引用icon:
        <svg class="icon">
            <use xlink:href="#circle-cross"></use>
        </svg>

2.  使用外部鏈接文件的形式引用icon:
        <svg class="icon">
            <use xlink:href:"/asssets/svg-symbols.svg#circle-cross"></use>
        </svg>

3.  支持fallback:
         <svg class="icon" viewBox="0 0 50 41"> 
            <switch> 
                <use xlink:href="#twitter-icon"></use>     
                <foreignObject> 
                    <img class="icon" src="img/twitter-icon.png" alt="Twitter"> 
                </foreignObject> 
            </switch> 
        </svg>

自動合并生成工具gulp-svg-symbols

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恼除,一起剝皮案震驚了整個濱河市踪旷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豁辉,老刑警劉巖令野,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異徽级,居然都是意外死亡气破,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門餐抢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來现使,“玉大人低匙,你說我怎么就攤上這事√夹猓” “怎么了顽冶?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長售碳。 經(jīng)常有香客問我强重,道長,這世上最難降的妖魔是什么贸人? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任间景,我火速辦了婚禮,結(jié)果婚禮上艺智,老公的妹妹穿的比我還像新娘倘要。我一直安慰自己,他們只是感情好十拣,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布封拧。 她就那樣靜靜地躺著,像睡著了一般父晶。 火紅的嫁衣襯著肌膚如雪哮缺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天甲喝,我揣著相機與錄音尝苇,去河邊找鬼。 笑死埠胖,一個胖子當(dāng)著我的面吹牛糠溜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播直撤,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼非竿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谋竖?” 一聲冷哼從身側(cè)響起红柱,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蓖乘,沒想到半個月后锤悄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡嘉抒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年零聚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡隶症,死狀恐怖政模,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚂会,我是刑警寧澤淋样,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站颂龙,受9級特大地震影響习蓬,放射性物質(zhì)發(fā)生泄漏纽什。R本人自食惡果不足惜措嵌,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芦缰。 院中可真熱鬧企巢,春花似錦、人聲如沸让蕾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽探孝。三九已至笋婿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顿颅,已是汗流浹背缸濒。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粱腻,地道東北人庇配。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像绍些,于是被迫代替她去往敵國和親捞慌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 演示地址 代碼 SVG Sprite 傳統(tǒng)的做法使用AI或者合并SVG圖像柬批,然后用background-posti...
    饑人谷_米彌輪閱讀 1,333評論 0 0
  • 轉(zhuǎn)載請聲明 原文鏈接地址 關(guān)注公眾號獲取更多資訊 第一部分 HTML 第一章 職業(yè)規(guī)劃和前景 職業(yè)方向規(guī)劃定位...
    程序員poetry閱讀 16,548評論 32 459
  • 本文為譯文啸澡,原文標(biāo)題:inline SVG VS icon font,鏈接:via 氮帐。 如果你正在為網(wǎng)站構(gòu)建圖標(biāo)系...
    張未舟閱讀 10,041評論 1 12
  • 我入微信比較晚嗅虏,也一直認為微信是很私密的東西,在入互聯(lián)網(wǎng)之前我是不加陌生人的揪漩。這個還是源自于一種態(tài)度吧旋恼,比如我之前...
    farewell兔too閱讀 127評論 0 0
  • 我想我要徹底離開淚水滿面的神話。并且努力尋找自己所期待的快樂,但我一天天嘗到的是一個小小的幸福和苦難在相互變換冰更。因...
    守望天邊閱讀 794評論 0 0