LoginSignup
5
0

More than 5 years have passed since last update.

Font Awesome 5で変わった点とRiotからの利用

Posted at

少し前にFont Awesome 5がリリースされましたが、4以前とエコシステムから大きく変わるものでした。

SVG+JavaScriptがメインに

Font Awesome 4まではWeb Fontで作られていましたが、Font Awesome 5では「JavaScriptで動的に<svg>タグを生成して、文章中に直接埋め込む」という手法がメインとして取り上げられていました。

このような形とすることで、

  • WebpackやRollupのTree Shaking(importした分のみ読み込む)を利用して、必要なアイコンだけ組み込むことが容易に行える
  • Node.jsによるサーバサイドレンダリングが可能となる
  • React.jsなど、仮想DOMフレームワークとの親和性向上

などといったメリットがあります。一方で、「SVGを埋め込む」ということでいくつか気になる点がありましたが、巧妙に解消していました。

  • 周りのフォントと色が合うのか…fill="currentColor"を使うことで、文章のフォント色をそのまま使うことが可能
  • あとから<i>を追加した場合や、アイコンのクラスを変更した場合はどうなるのか…MutationObserverを入れることで、タイマーなしで変更を追随できるようにしてあった
  • Font Awesome 4との互換性…互換レイヤーがあるので、名前の違うアイコンなどもそのまま使える

Riotから使ってみる

Vue.jsReact.jsについては公式のバインディングがありますが、Riot.jsからも使いたいと思ったので、自分でjkr2255/riot-fontawesomeを作ってみました。

fontawesome.iconの結果として得られるものは、

  • html…HTMLソース
  • node…DOMノード
  • abstract…VDOMのhに投げるのにピッタリとなる、仮想DOM的な要素の詳細

と、3つの形式があります。Riotに直接ASTを投げる方法がわからなかったのと、DOMノードが取れるのならそれを使うのが手っ取り早いということで、イベントサイクルを見計らってappendChildreplaceChildではめ込む、という形の実装としています。

実は、これがnpm初登録だったので、環境を整えるのにも少々悪戦苦闘しました。

5
0
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
0