UNPKG

icon-font-loader

Version:

A webpack loader to convert svgs into font icons in CSS

254 lines (177 loc) 6.82 kB
# icon-font-loader - [README in English](README.md) 这是一款可以自动将 svg 转换成字体图标的 Webpack loader。 ## 示例 在 CSS 中需要使用图标的地方用自定义属性`icon-font`引入 svg 文件: ``` css .select:after { icon-font: url('../icons/arrow-down.svg'); /* icon-font: url('../icons/arrow-down.svg') '\ff12'; */ /* 指定最终的 unicode */ color: #666; } ``` 通过 icon-font-loader 将会转变为浏览器可识别的 CSS: ``` css .select:after { font-family: 'icon-font'; font-style: normal; font-weight: normal; ... content: '\f106'; /* content: '\ff12'; */ /* 指定最终的 unicode */ color: #666; } ``` 加载器会收集所有这样的引用,统一打包成 (eot,svg,ttf,woff) 字体文件,并在`<head>`中插入一个有`@font-face``<style>`标签或抛出一个这样的 CSS 文件。 ``` css @font-face { font-family: "icon-font"; src: url("icon-font.eot?4063944d4c3fb8fa7bf4c19ad0f59965?#iefix") format("embedded-opentype"), url("icon-font.woff?4063944d4c3fb8fa7bf4c19ad0f59965") format("woff"), url("icon-font.ttf?4063944d4c3fb8fa7bf4c19ad0f59965") format("truetype"), url("icon-font.svg?4063944d4c3fb8fa7bf4c19ad0f59965#icon-font") format("svg"); } ``` 当然,如果开启`dataURL`选项会转换为 ``` css @font-face { font-family: "icon-font"; src:url("data:application/x-font-woff;base64,d09GRgABAAAAAAUkAAsAAAAACQgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAHcAAAC4Ifsmu09TLzIAAAGAAAAAPQAAAFZWTEunY21hcAAAAcAAAADxAAACuqtTRqJnbHlmAAACtAAAAEIAAABwWoXqgmhlYBewAAA=") format("woff"); } ``` ## 特性 与别的类似的字体图标加载器不同的是: - 在 CSS 中使用。利用 CSS 的特性,可以很轻松地覆盖原图标: ``` css .select:after { icon-font: url('../icons/arrow-down.svg'); color: #666; } .select.up:after { icon-font: url('../icons/arrow-up.svg'); } ``` - 必须在`before`或`after`伪元素中使用,我们正是利用了它们的`content`属性,将字体图标视为某种字体下的特殊字符。 - 合并重复的图标。如果有相同的图标而它们的文件名或路径不同,我们会将它们合并起来,减少字体大小。 ## 安装 ``` shell npm install --save-dev icon-font-loader ``` ## 配置 除了在 CSS 中添加自定义属性,还需要在 Webpack 配置中添加一个 Plugin。 ```javascript const IconFontPlugin = require('icon-font-loader').Plugin; module.exports = { ... module: { rules: [{ test: /\.css$/, use: ['style-loader', 'css-loader', 'icon-font-loader'] }], }, plugins: [new IconFontPlugin()], }; ``` ### Loader 参数 暂无。 ### Plugin 参数 #### fontName 字体图标的字体名和文件名。 - Type: `string` - Default: `'icon-font'` #### filename 用于设置生成文件名的模板,类似于 Webpack 的 output.filename。模板支持以下占位符: - `[ext]` 生成资源文件后缀 - `[name]` 字体名称 - `[fontName]` 字体名称,`[name]`的别名 - `[hash]` 生成文件中 svg 文件的 hash 值(默认使用16进制 md5 hash,所有文件使用 svg 的 hash,其他文件的 hash 有时会发生改变) - `[<hashType>:hash:<digestType>:<length>]` 生成 hash 的样式 - `hashType` hash 类型,比如:`sha1`, `md5`, `sha256`, `sha512` - `digestType` 数字进制:`hex`, `base26`, `base32`, `base36`, `base49`, `base52`, `base58`, `base62`, `base64` - `length` 字符长度 - Type: `string` - Default: `'[name].[ext]?[hash]'` #### output 字体和 CSS 等文件相对于 webpack 的 output 的相对路径。**必须是一个相对路径。** - Type: `string` - Default: `'./'` #### publicPath 字体在 CSS url 中的路径,与 Webpack 的 publicPath 相同,此选项用于覆盖它。 - Type: `String` - Default: `''` #### localCSSTemplate 局部 CSS 虚拟属性转换后内容, 接受模板内容而不是模板文件的路径。 如果设置该选项值为空,则不会生成局部 CSS。 - Type: `string` - Default: [global.css.hbs的内容](https://github.com/vusion/icon-font-loader/blob/master/src/global.css.hbs) 比如,该模板变量会生成下面 CSS 规则中的内容。 ``` css .icon-1::before, .icon-2::before .icon-3::before { font-family: '{{ fontName }}'; 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; } ``` #### localCSSSelector 局部 CSS 的选择器默认是当前文件所有图标选择器的合并。 如果设置该选项,默认的选择器会被设置的值代替。 - Type: `string` - Default: `''` 举例说明,比如设置该选项为`'.my-icon'`, 局部 CSS 会生成成下面的代码: ``` css .my-icon { font-family: '{{ fontName }}'; 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; } ``` #### property CSS 的自定义属性名 - Type: `string` - Default: `'icon-font'` #### auto 是否在chunk中自动插入@font-face css 片段。如果不希望每一chunk都插入这段css,那么设置这个参数未false,我们将会生成额外的css文件供手动插入。 - Type: `boolean` - Default: `true` #### dataURL 如果设置为`true`,字体会转换成 data base64 嵌入到 CSS 中,而不是生成对应的字体文件。 在字体图标不多的情况下推荐使用,因为字体文件会产生额外的请求。 - Type: `boolean` - Default: `false` #### startCodepoint - Type: `number` - Default: `0xF101` unicode 的字符起始点。 #### fontOptions 这个属性将直接传入[svgicons2svgfont](https://github.com/nfroidure/svgicons2svgfont)。 默认设置了`descent`字体基线选项,这样对于大部分图标来说,不用额外添加`vertical-align`样式。这是一个最佳实践。 - Type: `Object` - Default: ``` js { fontHeight: 1000, descent: 140, centerHorizontally: true, } ``` #### entries 指定需要插入字体文件引入css的入口,如果没有指定或者是空数组,那么将会为所有的入口插入字体引入样式。 - Type: `Array` - Default: `undefined` ## 修改日志 参见[Releases](https://github.com/vusion/icon-font-loader/releases) ## 贡献指南 参见[Contributing Guide](https://github.com/vusion/DOCUMENTATION/issues/4) ## 开源协议 参见[LICENSE](LICENSE)