Skip to content

A webpack loader to convert svgs into font icons in CSS.

License

Notifications You must be signed in to change notification settings

knyy/icon-font-loader

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

icon-font-loader

A webpack loader to convert svgs into font icons in CSS.

CircleCI NPM Version Dependencies NPM Download

Example

Import svg file with a custom property called icon-font by default where you want to use icon font in CSS:

.select:after {
    icon-font: url('../icons/arrow-down.svg');
    color: #666;
}

Then icon-font-loader will generate corresponding css so web browsers can recognize.

.select:after {
    font-family: 'icon-font';
    font-style: normal;
    font-weight: normal;
    ...
    content: '\f106';
    color: #666;
}

After packing all these imports, the loader will create font files (eot,svg,ttf,woff), and insert a <style> tag into the <head> automatically or emit a CSS file containing @font-face.

@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");
}

Well, if dataURL option enabled, the result is:

@font-face {
	font-family: "icon-font";
	src:url("data:application/x-font-woff;base64,d09GRgABAAAAAAUkAAsAAAAACQgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAHcAAAC4Ifsmu09TLzIAAAGAAAAAPQAAAFZWTEunY21hcAAAAcAAAADxAAACuqtTRqJnbHlmAAACtAAAAEIAAABwWoXqgmhlYBewAAA=") format("woff");
}

Features

Our loader works in a way different to others:

  • css only. You can override existing style like this:
    .select:after {
        icon-font: url('../icons/arrow-down.svg');
        color: #666;
    }
    
    .select.up:after {
        icon-font: url('../icons/arrow-up.svg');
    }
    
  • pseudo elements(before or after) only. We treat these icon fonts as some certain characters under one font-family by using their property content.
  • Merge duplicated svgs. We will merge those same svgs into only one to keep slim even they lie in different places in your project.

Install

npm install --save-dev icon-font-loader

Config

You must import plugin below in webpack in addition to adding custom properties in CSS.

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 options

None.

Plugin options

fontName

Name of font family and font files.

  • Type: string
  • Default: 'icon-font'

filename

Output filename format like output.filename of Webpack. The following tokens will be replaced:

  • [ext] the extension of the resource

  • [name] the font name

  • [fontName] the font name, alias of [name]

  • [hash] the hash of svg file (Buffer) (by default it's the hex digest of the md5 hash, and all file will use hash of the svg file)

  • [<hashType>:hash:<digestType>:<length>] optionally one can configure

    • other hashTypes, i. e. sha1, md5, sha256, sha512
    • other digestTypes, i. e. hex, base26, base32, base36, base49, base52, base58, base62, base64
    • and length the length in chars
  • Type: string

  • Default: '[fontName].[ext]?[hash]'

output

Output path of emitted font and css files, relative to webpack output path. Must be a relative path.

  • Type: string
  • Default: './'

publicPath

Font public path in css url, same as webpack output.publicPath. This option is for overriding it.

  • Type: string
  • Default: ''

localCSSTemplate

Template of virtual property transformed local CSS. It accepts template content instead of a template file path。

property

Custom CSS property name

  • Type: string
  • Default: 'icon-font'

auto

Whether to insert @font-face into the <head> with a <style> tag automatically or emit a css file.

  • Type: boolean
  • Default: true

dataURL

If true, fonts will be converted into data base64 format embedded in css, instead of emitted as font files.

It's recommanded if there are not many icons because font files need extra requests.

  • Type: boolean
  • Default: false

mergeDuplicates

Whether to merge duplicated icons in font file. If true, it will shrink font file after built, but this makes compilation slower. Recommand that you enable this option in production mode.

  • Type: boolean
  • Default: false

startCodepoint

  • Type: number
  • Default: 0xF101

Starting codepoint. Defaults to beginning of unicode private area.

fontOptions

  • Type: Object
  • Default: {}

Options that are passed directly to svgicons2svgfont.

Changelog

See Releases

Contributing

See Contributing Guide

License

MIT

About

A webpack loader to convert svgs into font icons in CSS.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 82.6%
  • CSS 9.7%
  • HTML 7.7%