LoginSignup
5
8

More than 5 years have passed since last update.

icomoonに頼らずにiconフォントを作成する(gulp-iconfont)

Posted at

はじめに

webサービスでアイコンフォントを使おうとして、自分の好きなアイコンだけ選んで使え、自作のアイコンを登録できるicomoonを使用していた。
しかし、無料版は設定をCookieに保存するので下記の点で困っていた。

  • キャッシュクリアしたら再作成する必要がある
  • 他人と設定を共有できない
  • 課金額に見合うメリットが見出せない

そんなわけで、アイコンをGulpで生成きないかなと思ったらgulp-iconfontというパッケージがあったので導入時に詰まったところを備忘録として残しておく。nodeとgulpの使い方は省略します。

アウトプットファイル

  • アイコンフォント一式
  • sassファイル
    • ここからさらにsassコンパイルして1つのcssを出力しているため
  • ドキュメントファイル
    • html(iconsTemplate.html)
    • css(iconsTemplate.css)
    • 使用フォント一覧をブラウザで見えるようにしておくと便利

準備

  • nodeのインストール
  • gulpとパッケージのインストール
    • gulp
    • gulp-rename
    • gulp-iconfont
    • gulp-consolidate
    • lodash
  • iconフォント化したいSVG
  • テンプレートファイル

タスクの設定

gulpfile.coffee
gulp         = require 'gulp'
rename       = require 'gulp-rename'
iconfont     = require 'gulp-iconfont'
consolidate  = require 'gulp-consolidate'

fontOutputDirectory = "fonts/"
runTimestamp = Math.round Date.now() / 1000
fontName = 'sampleicons'

gulp.task 'iconfont', () ->
  return gulp.src [fontOutputDirectory + 'svg/*.svg']
    .pipe iconfont
      fontName: fontName
      timestamp: runTimestamp
      formats: ['ttf','eot','woff','svg']
    .on 'glyphs', (glyphs, options) ->
      cssFileName = 'iconsSample'
      scssFileName = '_icons'
      htmlFileName = 'iconsSample'
      engine = 'lodash'
      consolidateOptions =
        glyphs: glyphs
        fontName: fontName
        fontPath: './'
        className: 'icon'
      #sass
      gulp.src fontOutputDirectory + 'iconsTemplate.scss'
        .pipe consolidate engine, consolidateOptions
        .pipe rename basename: scssFileName
        .pipe gulp.dest 'sass/font/'
      #css
      gulp.src fontOutputDirectory + 'iconsTemplate.css'
        .pipe consolidate engine, consolidateOptions
        .pipe rename basename: cssFileName
        .pipe gulp.dest fontOutputDirectory
      # #html
      consolidateOptions.cssFileName = cssFileName
      gulp.src fontOutputDirectory + 'iconsTemplate.html'
        .pipe consolidate engine, consolidateOptions
        .pipe rename basename: htmlFileName
        .pipe gulp.dest fontOutputDirectory

    .pipe gulp.dest(fontOutputDirectory)

つまりどころ

Cannot read property 'toString' of undefinedとエラーが出る

glyph.codepoint.toString(16).toUpperCase()

glyph.unicode[0].charCodeAt(0).toString(16).toUpperCase()
に変更する

使用するSVG画像

大きさを1000px以上を使用しないと生成時にアイコンが崩れてしまう

参考URL

http://qiita.com/MAL09/items/1b383fbb62e241ed6e1b
http://sakamock.hatenablog.com/entry/2016/11/25/173403

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8