Site icon Tips Note by TAM

gulpでsvgからアイコンフォントを作成する

オリジナルのアイコンをアイコンフォント化して使用する機会があったので、gulpでアイコンフォントを作成してみました。

フォルダ構成

/
├ package.json
├ gulpfile.js
├ node_modules/
└ dev/
  ├ icons/ ←アイコンフォント用svgファイルを格納【A】
    ├ *.svg
    └ templates/
      └ iconfont.css ←テンプレートcssファイル【B】
  ├ fonts/ ←gulpで生成したアイコンフォントの格納場所【C】
    ├ iconfont.eot
    ├ iconfont.svg
    ├ iconfont.ttf
    └ iconfont.woff
  └ css/ ←gulpで生成したcssファイル【D】

svgファイルの作成【A】

gulp-iconfont というプラグインを使ってアイコンフォントを作成するので、注意点を確認してからsvgファイルを作成してください。
下記URLからSVGファイルをダウンロードすることもできます。
https://github.com/backflip/gulp-iconfont-css/tree/master/test/fixtures/icons

Beware that your SVG icons must have a high enough height. 500 is a minimum. If you do not want to resize them, you can try to combine the fontHeight and the normalize option to get them in a correct size.

テンプレートcssファイルの用意【B】

こちらのcssファイルを使用させていただきました。
https://github.com/backflip/gulp-iconfont-css/blob/master/templates/_icons.css
※今回作成したgulpfileではファイル名を「iconfont.css」に変更しました。

パッケージのインストール

※gulpの導入については省略します。

以下のパッケージを使用しました。

  • gulp
  • gulp-iconfont
  • gulp-consolidate
  • lodash

コマンドを実行してパッケージをインストールします。
$ npm intsall --save-dev パッケージ名

gulpfileにタスクを記述する

// パッケージの読み込み
// ------------------------------------------
var gulp            = require('gulp'),
    iconfont        = require('gulp-iconfont'),
    consolidate     = require('gulp-consolidate');

/***************************************************************************
* アイコンフォント
***************************************************************************/
var runTimestamp = Math.round(Date.now()/1000);
gulp.task('iconfonts', function(){

  return gulp.src(['dev/icons/*.svg']) // 【A】のパスを指定
    .pipe(iconfont({
      startUnicode: 0xF001,
      fontName: 'iconfont',
      formats: ['ttf', 'eot', 'woff', 'svg'],
      appendCodepoints:false,
      normalize: true,
      fontHeight: 500,
      timestamp: runTimestamp
    }))

   .on('glyphs', function(glyphs) {
      gulp.src('dev/icons/templates/iconfont.css') // 【B】のパスを指定
      .pipe(consolidate('lodash', {
        glyphs: glyphs.map(function(glyph) {
          return { fileName: glyph.name, codePoint: glyph.unicode[0].charCodeAt(0).toString(16).toUpperCase() };
        }),
        fontName: 'iconfont',
        fontPath: '../fonts/',
        cssClass: 'icon'
      }))
      .pipe(gulp.dest('dev/css/')); // 【D】のパスを指定
    })

    .pipe(gulp.dest('dev/fonts')); // 【C】のパスを指定
});

参考サイト