ぼやき

0

高速化と Retina 対応のため、サイトの使っているアイコンを Web フォントにしました。Web フォントとは SVG をフォント化してそれを CSS で表示させます。ベクター素材の SVG が元なので、画像などとは違い拡大してもエッジがきれいです。なので Retina 対応のディスプレイで見てもきれいに表示されます。

Font Awesome が有名だけど読み込むのが遅いので Fontelloを使うことにした

Font Awesome というアイコンフォントのサービスが有名ですが、これを設置したところページの読み込み完了まで 20 秒もかかってしまったので、Fontello にて必要なアイコンのみをまとめ、自分のサーバーに置くことにしました。Font Awesome は CDN を使っているのですが、それでも重かったです。

Fontello

20170511_1.png

あと Font Awesome にははてなブックマークと LINE のアイコンがありません。Fontello は Font Awesome などのサービスから自分でアイコンを選べるほか、SVG をアップロードしてフォントにも組み込めます。

足りないアイコンの SVG を用意する

まずははてなブックマークと LINE のアイコンの SVG ファイルを作成します。それぞれ公式からロゴファイルがダウンロードできます。今回は Mac の Sketch.app を使用して SVG を作成します。はてなブックマークについては EPS を Sketch.app でそのまま開き、不要な部分を削除したり非表示にします。(SVG だとうまく編集できなかったです。)

20170511_2.png

パスが重なっている部分は重なっているパスを含むレイヤーを選択し、メニューから「Edit」→「Combine」→「Difference」を選択します。Web フォントとして使うには全体を 1 色でベタ塗りする必要があります。最後に Export から SVG で保存します。

LINE は AI ファイルしかなく、直接 Sketch.app で開くことができません。一度プレビュー.app で開き印刷の方向を横に合わせて PDF に保存します。それを Sketch.app に読み込んで同じように加工し、SVG に書き出します。

Fontello にて Web フォントにまとめる

20170511_3.png

Font Awesome 等から必要なフォントを選びます。

20170511_4.png

用意した SVG を画面にドラッグ・アンド・ドロップしてアップロードし選択します。

これで右上部の「Download」をクリックすれば必要なファイルが手に入ります。以下は細かい設定です。設定しなくても使えます。

20170511_5.png

CSS のクラスで指定する名前が変えられます。SVG をアップロードするときにファイル名をわかりにくい名前にしてしまった場合はここで変更できます。

20170511_6.png

先頭の「icon-」は上部のスパナアイコンから変更できます。

20170511_7.png

フォントのコードも変えられます。

サイトでの表示

ダウンロードして ZIP ファイルを解凍すると以下のような構成になっています。(アイコンは Fontello で作成したフォントアイコンを使用しました。)

  • fontello-xxxxxxxx
    • config.json
    • css
      • fontello.css
    • demo.html
    • font
    • LICENSE.txt
    • README.txt

このフォルダを fontello-icon と名前を変え、テーマフォルダの中に入れました。Web フォントを表示するのに必要なのは css と font フォルダです。他のファイルはアップロードしなくても大丈夫です。(アイコンを追加した場合は config.json を Fontello のページにドラッグ・アンド・ドロップすると、同じ設定でフォントの追加や変更が可能です。)

ヘッダで CSS ファイルを読み込む

css/fontello.css ファイルを <head> で読み込みます。管理しやすいので function.php に以下のように付け加えました。

function add_fontello() {
	wp_enqueue_style( 'fontello', get_template_directory_uri() . '/fontello-icon/css/fontello.css', 'css-style', '1.0' );
}
add_action( 'wp_enqueue_scripts', 'add_fontello' );
クラスを指定すると表示される

クラス名を指定すると CSS の :before の擬似要素を使って表示されます。aria-hidden="true" で装飾のためのアイコンでスクリーンリーダーに対して存在しないものとして認識させます。

<i class="fa icon-facebook" aria-hidden="true"></i>

 ←こんな感じに表示されます。

→Qiita:Font-Awesomeでアクセシビリティを確保しながらウェブフォントを活用する

WordPress に SNS ボタンを設置

以下のサイトを参考にしてアイコンフォントを使って SNS ボタンを作りました。アクセスビリティを考慮して一部コードを改良しました。ボタンには title 属性をつけました。

→LIG.inc:PHPがわからなくても簡単!WordPressでオリジナルのソーシャルボタンを設置する方法

<aside>
	<ul class="social">
		<li class="fa"><a href="http://www.facebook.com/share.php?u=<?php the_permalink(); ?>&t=<?php echo get_the_title(); ?>" target="_blank"><i class="fa icon-facebook" title="Facebook" aria-hidden="true"></i></a></li>
		<li class="go"><a href="https://plus.google.com/share?url=<?php the_permalink(); ?>" target="_blank"><i class="fa icon-gplus" title="Google+" aria-hidden="true"></i></a></li>
		<li class="tw"><a href="http://twitter.com/share?url=<?php the_permalink(); ?>&text=<?php echo get_the_title(); ?>" target="_blank"><i class="fa icon-twitter" title="twitter" aria-hidden="true"></i></a></li>
		<li class="ha"><a href="http://b.hatena.ne.jp/add?mode=confirm&url=<?php the_permalink(); ?>&title=<?php echo get_the_title(); ?>" target="_blank"><i class="icon-hatenabookmark" title="Hatena Bookmark" aria-hidden="true"></i></a></li>
		<li class="li"><a href="http://line.me/R/msg/text/?<?php the_permalink(); ?>%0D%0A<?php echo get_the_title(); ?>" target="_blank"><i class="icon-line" title="LINE" aria-hidden="true"></i></a></li>
	</ul>
</aside>

CSS はこんな感じにしました。

.social {
	list-style: none;
	text-align: center;
	clear: both;
}

.social li{
	float: left;
	font-size: 1.6em;
	width: 2.4em;
	height: 2.4em;
	line-height: 2.4em;
	background: #999999;
	border-radius: 50%;
}

.social a{
	color: #ffffff;
	display:block;
	width: 100%;
	height: 100%;
}

WordPress が出力するリストに表示

WordPress が出力するカテゴリ一覧などのリストファイルに表示するには class を追加できないので、css で :before の擬似要素の content プロパティにコードを指定しています。

.widget_categories li, .widget_mycategoryorder li{
	padding-left: 1.2em;
	line-height: 1.6em;
}
.widget_categories li:before, .widget_mycategoryorder li:before{
	content: "\f07b";
	font-family: fontello;
	color: #cccccc;
	padding-right: 0.2em;
	font-size: 1.2em;
	vertical-align: -0.2em;
	margin-left: -1.2em;
	speak: none;
}

音声読み上げを制御するために speak: none; プロパティをつけています。

→E-riverstyle Vanguard :「aria-hidden=”true”」と「speak: none;」

関連記事