日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

webpack 处理字体_如何在webpack中更优雅的处理字体图标

發(fā)布時間:2023/12/31 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 webpack 处理字体_如何在webpack中更优雅的处理字体图标 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:牟金濤

字體圖標是目前前端中最常見的一種靜態(tài)資源,目前大部分的框架或者網(wǎng)站都會將一些簡單的圖標合并生成一個字體文件而不是合并成雪碧圖。其優(yōu)點顯而易見,字體圖標能夠更加方便的控制圖標的大小和顏色,這樣圖標大小和顏色的改變不需要重新提供視覺圖。

目前來說其實生成字體圖標的方式很多,這里舉幾個栗子,比如gulp項目中我們可以借用fontcustom來實現(xiàn)字體的打包,或者是借用 ttf2eot, ttf2woff, ttf2woff等node包去生成字體文件,當然還有更low一點的方式你可以在每一次上線前將你的svg上傳到http://www.iconfont.cn/上打成字體包覆蓋回你的項目(額,這個方式真不推薦因為會帶來各種合并代碼和圖標管理的問題)。

而 對于webpack項目 實際上目前npm上也有一些node包提供webpack上打包字體功能的plugin和loader,但是就以我們目前搜集到的幾個webpack上的字體處理插件都沒有達到我們的使用要求,這些plugin或者是loader有些存在bug而有些則達不到我們希望能動態(tài)插入字體并且不需要開發(fā)者太多關注字體樣式的要求,簡單的說我們希望能有一款loader能傻瓜式操作,只要配完了config,然后在代碼中引入圖標svg就能夠完成整個字體圖標生成插入的功能,所以我們選擇自己開發(fā)一個webpack上的字體生成工具。恩, 好吧,實際上我就是來推銷我們的icon-font-loader的( ' – ' )。

所以我們還是看一下icon-font-loader是如何使用吧!

首先照例工程目錄下安裝一下

npm install icon-font-loader —save-dev

當前的測試項目的目錄是這樣子的

然后配置一下你的 webpack.config.js,這里說明一下icon-font-loader實際上并不是單純的loader,他是類似于extract-text-webpack-plugin這種的,一個loader和plugin的集合,你需要配置loader并實例化一個IconFontPlugin。

const IconFontPlugin = require('icon-font-loader').Plugin;

module.exports = {

...

module: {

rules: [{ test: /\.css$/, use: ['style-loader', 'css-loader', 'icon-font-loader'] }],

},

plugins: [new IconFontPlugin()],

};

然后在你的css文件中引入你的svg圖標

.icon-arrow-left:before {

icon-font:url('../../icons/arrow-left.svg');

color:red;

}

.icon-arrow-up:before {

icon-font:url('../../icons/arrow-up.svg');

color:blue;

}

然后跑一下webpack,打開index.html

然后,恩,沒有然后了,這樣就好了。使用我們的loader不需要在頁面中引入字體樣式,不需要為dom設置字體圖標的class,只要在你需要的用icon-font: url(path)這個自定義的css屬性,剩下的loader獲處理好

首先我們會將css中錨定的自定義屬性替換成有效的字體樣式

.icon-arrow-left:before {

icon-font:url('../../icons/arrow-left.svg');

color:red;

}

.icon-arrow-up:before {

icon-font:url('../../icons/arrow-up.svg');

color:blue;

}

以上的樣式會被處理成這種最終樣式

.icon-arrow-left:before {

font-family:'icon-font';

font-style:normal;

font-weight:normal;

font-variant:normal;

text-decoration:inherit;

text-rendering:optimizeLegibility;

text-transform:none;

-moz-osx-font-smoothing:grayscale;

-webkit-font-smoothing:antialiased;

font-smoothing:antialiased;

content:'\F102';

color:red;

}

.icon-arrow-up:before {

font-family:'icon-font';

font-style:normal;

font-weight:normal;

font-variant:normal;

text-decoration:inherit;

text-rendering:optimizeLegibility;

text-transform:none;

-moz-osx-font-smoothing:grayscale;

-webkit-font-smoothing:antialiased;

font-smoothing:antialiased;

content:'\F101';

color:blue;

}

最終我們也會在你的document中插入字體的聲明與引用,無需手動插入。

@font-face?{

font-family:?"icon-font";

src:url("icon-font.ttf?b3b2d4639cb78f9c3301a31f65766de1")?format("truetype"),

url("icon-font.eot?b3b2d4639cb78f9c3301a31f65766de1#iefix")?format("embedded-opentype"),

url("icon-font.woff?b3b2d4639cb78f9c3301a31f65766de1")?format("woff"),

url("icon-font.svg?b3b2d4639cb78f9c3301a31f65766de1#icon-font")?format("svg");

}

這其實也是我們最終目的,一條龍的打包服務,更加靈活的圖標的引入,你可以選擇在需要的樣式中插入一個圖標,你也可以選擇將其封裝成一個個的圖標樣式類,當然如果你是vue或者是regular你也可以將圖標封裝成組件,通過傳參來控制圖標。

當然我們也支持webpack的hot reload,實際上不用任何多余的配置,只要style-loader加載的樣式能夠hot reload我們就能夠實現(xiàn)hot reload。PS: 這里有些小伙伴可能對webpack的樣式熱加載有點不熟悉,webpack的樣式熱加載是通過style-loader實現(xiàn)的,style-loader會通過hot reload監(jiān)聽樣式文件模塊,每一次hot realod plugin通過websocket拿到hash值發(fā)生變化的模塊中有css樣式模塊那么style-loader會重新更新document里的style標簽,所以如果樣式熱加載沒生效的很大可能是并未使用style-loader插入樣式,比如使用EtractTextPlugin額外生成css文件再引入這樣樣式可能就不會實現(xiàn)熱加載

我們也提供一些參數(shù)供用戶實現(xiàn)自定義的配置

1.fontName

如果你不喜歡我們的命名,你可以通過這個屬性來實現(xiàn)自定義字體庫的名字

2.output

如果對最終生成文件的路徑有要求,這個屬性可以設置字體和CSS等文件對于webpack的output的相對路徑。必須是一個相對路徑。

3.localCSSTemplate

如果你覺得我們生成的css代碼太長或者不滿足你的要求,那么你可以通過這個參數(shù)傳入hbs模板的字符串來自定義替換的樣式,詳細可以參照src下的local.css.hbs

目前該loader還在不斷的優(yōu)化更新中,我們會及時處理掉使用過程中提出來的issue與pr,所以歡迎大家使用并提出建議。我們希望這個loader最終能夠被webpack官方收錄所以如果能star一下就更好了。

項目github地址:

npm地址:

本文來自網(wǎng)易實踐者社區(qū),經(jīng)作者牟金濤授權發(fā)布

總結

以上是生活随笔為你收集整理的webpack 处理字体_如何在webpack中更优雅的处理字体图标的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久电影 | 偷偷操视频 | 亚洲综合久 | www日本xxx | 一卡二卡精品 | 人人人人爽 | 亚洲乱码久久 | 乳罩脱了喂男人吃奶视频 | 大白屁股一区二区视频 | 国产日本在线 | 天天曰天天爽 | 色老汉av一区二区三区 | 热久久亚洲 | 一区二区传媒有限公司 | 久久久免费高清视频 | 乱子伦视频在线看 | 久久精品免费一区二区 | 天天爽夜夜爽夜夜爽 | 国产精品久久久国产盗摄 | 在线观看黄网 | 麻豆视频在线观看免费 | 一区二区免费av | 久久av一区二区三区 | 亚洲综合图片一区 | 五月婷婷综合在线观看 | 久久免费少妇高潮久久精品99 | 日韩av一级片 | 国产成人免费 | 午夜合集 | 黄色片久久久久 | 亚洲黄色第一页 | 不卡的中文字幕 | 97午夜 | 欧美做受高潮中文字幕 | 国产第三区 | 青青草伊人久久 | 国产精选91 | 久久精品国产av一区二区三区 | www.毛片| 女生的胸无遮挡 | 国产三级中文字幕 | 色校园| 日本色图片| 日本一级片免费看 | 亚洲精品国产suv一区 | 九七电影院97理论片 | 成人午夜在线观看 | 人禽l交视频在线播放 视频 | 国产又大又黄又爽 | 欧美国产精品一区二区 | 日韩免费大片 | 亚洲综合第一 | 打屁屁日本xxxxx变态 | 老熟妇仑乱视频一区二区 | 在线免费一区 | 精人妻一区二区三区 | 娇小萝被两个黑人用半米长 | 欧美一级免费大片 | 国产av无码专区亚洲a∨毛片 | 91福利在线播放 | 国产主播精品 | 国产原创视频在线 | www.黄色在线观看 | 成人做爰9片免费视频 | 国产精品日韩av | jizz性欧美17| 国产精品白丝喷水在线观看 | 日批视频免费观看 | 精品久久久久久久久久久久久久久久久 | 又白又嫩毛又多15p 超碰在线一区 | 日韩欧美国产亚洲 | 亚洲第一成人网站 | 国产素人在线 | 在线看a网站| 一级在线免费观看 | 怡红院男人天堂 | 免费瑟瑟网站 | 91激情影院 | 国产精品99久久久久久一二区 | 制服丝袜国产精品 | 熟女视频一区二区三区 | 国产精品无遮挡 | 国产大片黄 | 一区二区在线免费 | av中文字幕网址 | 日美一级片 | 亚洲成av人片一区二区梦乃 | 国产精品久久av无码一区二区 | 国内偷拍精品视频 | 亚洲第3页| 每日在线观看av | 麻豆传媒网站入口 | 美女伦理水蜜桃4 | 精品人妻一区二区三区四区久久 | 亚洲精品在线电影 | 亚洲精品久久久久av无码 | 自拍偷拍日韩精品 | 欧美精品毛片 | 99re6在线观看 |