絵文字をファビコンとして表示する簡単な方法
ちょっとしたWebサイトを作るときに地味に面倒なのがファビコンです。わざわざ画像を作るのも、どこかからちょうど良い画像素材を持ってくるのも、アップロードするのも面倒だったりします。
そんなときは絵文字をファビコンとして使いましょう。
やり方
先にやり方を載せておきます。これをHTMLの<head>
の中へコピペすればファビコンとして絵文字が表示されます。
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%2250%%22 y=%2250%%22 style=%22dominant-baseline:central;text-anchor:middle;font-size:90px;%22>😸</text></svg>">
中に含まれる😸
は好きな絵文字に変えて使ってください。これでChrome、Firefox、Edgeではファビコンとして絵文字が表示されるはずです。
Safari対策
ただし、この方法はSafariではうまく動きません。以下のように別途、png形式などの画像をファビコンとして指定する必要があります。
<!-- Chrome / Firefox / Edge -->
<link rel="icon" href="data:image/svg+xml,<svg ... />">
+ <!-- Safari / IE -->
+ <link rel="icon alternate" type="image/png" href="https://twemoji.maxcdn.com/v/13.0.2/72x72/1f638.png" />
↑ ここではMaxCDNで配信されているTwemojiのうち、😸
のPNG画像を指定しています(Twemoji一覧)。
ここから下は絵文字ファビコンの仕組みの解説です。
絵文字をSVGに埋め込めばファビコンとして使える
Chrome、Firefox、Edge、Safariといったモダンブラウザでは、ファビコンにSVG形式の画像を使うことができます。
2021年5月時点のブラウザ対応状況(caniuse)
このSVGをData URLとして直書きすれば、外部から画像を読み込むことなくファビコンを表示できます。
<link rel="icon" href="data:image/svg+xml,<ここにSVG />">
SVGの中に絵文字を含めるには
以下のように<svg>
の直下に<text>
を配置し、その中に絵文字を入れます。
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<text x="50%" y="50%" style="dominant-baseline:central;text-anchor:middle;font-size:90px;">
😸
</text>
</svg>
絵文字が表示領域の中央にちょうどいいサイズで表示されるように<text>
にstyleを指定しています。このコードをブラウザで読み込むとこんな感じ ↓
<svg>
の中で<text>
を中央寄せする方法はHow to place and center text in an SVG rectangleを参考にしました。
↓ ちなみに普通のテキストをSVGに埋め込むこともできます。
※ 表示されるテキストのフォントは環境に依存します。
"
はエンコード
SVGの中の <link rel="icon" href="この中">
にSVGを書くことになるので、ダブルクオーテーション"
は%22
にエンコードしておきます。また、改行は詰めておきましょう。
そんなこんなで、最初に載せたコードが出来上がります。
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%2250%%22 y=%2250%%22 style=%22dominant-baseline:central;text-anchor:middle;font-size:90px;%22>😸</text></svg>">
以上、絵文字をファビコンとして使う方法の紹介でした。
Discussion
すごく良いです、ありがとうございます!
faviconをどうするか悩んでいたので、大変助かりました。
さっそくやってみたのですが、次の lint ではエラーになりました。
href内はURLエンコードしないといけないようです。
"(ダブルクォート)だけでなく、開始タグを%3Cに、終了タグを%3Eに、半角スペースを%20に
変換すると、エラーは表示されないようになりました。
また、ブラウザ上でもfaviconが表示されました。
ありがとうございます。ちゃんとやるなら
<svg>~</svg>
をまるごとencodeURIComponent()
に通したうえでhref
に含めるのが良さそうですね(試したところ問題なく表示された)。SafariはSVGのfaviconをサポートしていないようです。
ありがとうございます。記事を修正します。
ファビコンとは全く関係ない質問で恐縮です。
このように、画像の周りに影が入っています。
これは、マークダウンを使って影を入れているのでしょうか?
それとも何かのアプリを使って影のついたスクリーンショットを撮っているのですか?
いえ、これはChromeウィンドウを小さくしたうえで、白の背景に配置してでスクリーンショットを撮っただけですね。macOSだとこんな感じに影がつきます。
なるほど、ありがとうございます!