Unicode 記号で Glyphicon みたいなフラットアイコンを表示したかった

Twitter Bootstrap の Glyphicon とか Font Awesome とかみたいな、フラットな記号文字を、標準的な記号文字だけでできないものかなぁ〜と思っていた。

こういうのはパイフォントと呼ばれるようで、Symbols や Dingbats といった修飾文字をまとめたフォントということになる。

古くは Webdings や Wingdings みたいなモノがあって、Unicode の中でも記号文字が登録されていることから、コレを使えないかなーと思って色々調べた。

Wingdings などは font-family に指定してもうまく使えない

Wingdings などの古くからあるパイフォントは、文字のマッピングが Unicode に沿っていない。Chrome だと font-family を指定して利用できるが、Firefox だとフォントが適用されず、イマイチ使えない。

Wingdings のアイコンに対応する Unicode のコードを指定すれば、必ずしも Wingdings などを使う必要はない。しかし、Wingdings の見た目を利用したい時は使えないが…。

Unicode 記号は絵文字になる?

Unicode 記号を � のように HTML に入力すると、色の付いた絵文字になってしまう。何か良いフォントを指定したらフラットなテキストスタイルになるかなぁと思ったが、どうもそういうフォントはないようだった。

…というワケで、テキストスタイル表示と絵文字スタイルを選ぶための文字コードがあるのだが、まだ対応するフォントがかなり少ないようだ。

記号を選べば、絵文字ではないテキストスタイルの記号もあるが、Glyphicon や Font Awesome ほどの自由度はなく。

絵文字を CSS で白黒表示して誤魔化す

予め色の付いた絵文字を使うとなると、Glyphicon のように自分で色を決めたりできない。これでは自由度が低いので、もう少し誤魔化し方を考えてみる。

CSS の filter プロパティを使うと、要素をモノクロ化したりできる。コレが絵文字テキストにも効くので、コレで絵文字を白黒化してみようということ。

.monochrome-emoji {
  /* サンプルのため絵文字フォントを確実に適用させる */
  font-family: "Apple Color Emoji", "Android Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "Noto Sans Emoji", "Noto Sans Symbols", "Noto Emoji", "Gecko Emoji";
  /* 少しコントラストを上げてからグレースケール化する */
  filter: contrast(110%) grayscale(100%);
}

単に filter: grayscale(100%) でも白黒にはなるが、contrast() で少しコントラストを上げておくと、グラデーションな部分をもう少しフラットにできるかなと思う。

…ウーンイマイチ。

やっぱりフォントファイルに容量食ったとしても、Glyphicon とか Font Awesome とか使うのが手っ取り早いか…。