React + Webpack + SVG Sprite

以前我們項(xiàng)目中使用矢量圖溉瓶,通常的做法是由設(shè)計(jì)師提供SVG授药,然后通過 http://fontello.com/ 生成 Web Icon Font。麻煩的是每次添加一個(gè)SVG就得重新生成一遍鸵鸥,再把新生成的文件添加到代碼倉庫中嵌巷,十分繁瑣;另外 Web Icon Font 對(duì)彩色圖標(biāo)支持也不是很好室抽。

為了省事搪哪,我也曾經(jīng)直接在 JSX 頁面中嵌入 SVG,就是把 SVG 當(dāng)做普通的 HTML 標(biāo)簽寫進(jìn)去坪圾,這樣當(dāng)然是可以的晓折,只是這些 SVG 對(duì) JSX 代碼是一個(gè)污染,所以這也不是一個(gè)好方案兽泄。

后來考慮用更優(yōu)雅的方式使用SVG漓概,看到這篇 SVG Sprite 技術(shù)實(shí)踐,里面也羅列了一下 SVG 相關(guān)的文章病梢,于是準(zhǔn)備使用 SVG Sprite 胃珍。

首先,我準(zhǔn)備用 react-boilerplate 做Demo蜓陌,發(fā)現(xiàn)里面已經(jīng)自帶了 svg-url-loader觅彰,便決定先嘗試一下,發(fā)現(xiàn)它是將 SVG 轉(zhuǎn)為 DataURL 嵌入到頁面钮热,這種方式可用填抬,但不是我喜歡的方式。

然后隧期,刪掉 svg-url-loader飒责,使用 svg-sprite-loader

以這樣的方式使用 SVG 之后仆潮,再也不用像 Web Icon Font 那樣每次添加圖片都必須更新許多文件宏蛉。而且 SVG Sprite 還支持設(shè)置顏色,方便做一些 Hover 之類的 CSS 效果性置。

相關(guān)代碼

package.json

"svg-sprite-loader": "^3.8.0",

webpack.base.conf.js

  {
    test: /\.svg$/,
    loader: 'svg-sprite-loader',
  },

注意檐晕,配置文件中若有 file-loader 之類的插件,注意 test 捕獲文件可能會(huì)造成沖突。

react

import Cube from './cube.svg';
import Game from './game.svg';
import Facebook from './facebook.svg';

<svg>
  <use xlinkHref={`#${Cube.id}`} />
</svg>
<svg>
  <use xlinkHref={`#${Game.id}`} />
</svg>
<svg>
  <use xlinkHref={`#${Facebook.id}`} />
</svg>

注意辟灰,此處引入的 SVG 應(yīng)該是純凈的个榕,設(shè)計(jì)師提供的 SVG 可能會(huì)在path中包含 fill,那樣就很難修改顏色芥喇。

生成的 HTML

<svg><use xlink:href="#cube"></use></svg>
<svg><use xlink:href="#game"></use></svg>
<svg><use xlink:href="#facebook"></use></svg>

設(shè)置大小西采、修改顏色

直接設(shè)置 width 和 height 屬性即可。
單色圖標(biāo)可以通過 fill 屬性直接修改顏色继控,多色圖標(biāo)設(shè)置比較麻煩械馆,不建議。

使用效果

SVG Sprite 是否支持 CSS 中的 background

支持武通,但是兼容性并不好霹崎,Safari 并不支持,參考 https://github.com/kisenka/svg-sprite-loader/tree/master/examples/extract-mode冶忱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尾菇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子囚枪,更是在濱河造成了極大的恐慌派诬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件链沼,死亡現(xiàn)場離奇詭異默赂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)括勺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門缆八,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疾捍,你說我怎么就攤上這事耀里。” “怎么了拾氓?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵冯挎,是天一觀的道長。 經(jīng)常有香客問我咙鞍,道長房官,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任续滋,我火速辦了婚禮翰守,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疲酌。我一直安慰自己蜡峰,他們只是感情好了袁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湿颅,像睡著了一般载绿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上油航,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天崭庸,我揣著相機(jī)與錄音,去河邊找鬼谊囚。 笑死怕享,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镰踏。 我是一名探鬼主播函筋,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奠伪!你這毒婦竟也來了跌帐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤芳来,失蹤者是張志新(化名)和其女友劉穎含末,沒想到半個(gè)月后猜拾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體即舌,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年挎袜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顽聂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盯仪,死狀恐怖紊搪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情全景,我是刑警寧澤耀石,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站爸黄,受9級(jí)特大地震影響滞伟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炕贵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一梆奈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧称开,春花似錦亩钟、人聲如沸乓梨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扶镀。三九已至,卻和暖如春总处,著一層夾襖步出監(jiān)牢的瞬間狈惫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工鹦马, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胧谈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓荸频,卻偏偏與公主長得像菱肖,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旭从,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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

  • 1 Webpack 1.1 概念簡介 1.1.1 WebPack是什么 1稳强、一個(gè)打包工具 2、一個(gè)模塊加載工具 3...
    Kevin_Junbaozi閱讀 6,665評(píng)論 0 16
  • 目錄第1章 webpack簡介 11.1 webpack是什么和悦? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,735評(píng)論 0 1
  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載馍忽。 webpack介紹和使用 一棒坏、webpack介紹 1、由來 ...
    it筱竹閱讀 11,125評(píng)論 0 21
  • 學(xué)習(xí)流程 參考文檔:入門Webpack遭笋,看這篇就夠了Webpack for React 一. 簡單使用webpac...
    Jason_Zeng閱讀 3,138評(píng)論 2 16
  • 昨天上班沒帶手機(jī)坝冕!這是個(gè)嚴(yán)重的問題…… 沒辦法處理業(yè)務(wù),沒有辦法跟客戶溝通瓦呼,也沒有辦法用手機(jī)來登錄一些工作的網(wǎng)站喂窟,...
    tiffanybly閱讀 1,185評(píng)論 0 1