Решение Killer в 2020 году
Это решение обязательно приходит через девять лет после того, как вопрос был первоначально задан, потому что до недавнего времени большинство браузеров не могли обрабатывать значки в .svg
формате.
Это больше не так.
Смотрите: https://caniuse.com/#feat=link-icon-svg.
1) Выберите SVG в качестве формата Favicon
Прямо сейчас, в июне 2020 года, эти браузеры могут обрабатывать SVG Favicons :
- Хром
- Fire Fox
- край
- опера
- Chrome для Android
- Браузер KaiOS
Обратите внимание, что эти браузеры по-прежнему не могут:
- Сафари
- iOS Safari
- Firefox для Android
Учитывая вышесказанное, мы можем уверенно использовать SVG Favicon .
2) Представьте SVG как URI данных
Основная цель здесь - избежать HTTP-запросов.
Как уже упоминалось в других решениях, довольно разумный способ сделать это - использовать URI данных, а не HTTP URL .
SVG (особенно маленькие SVG) идеально подходят для Data URI, потому что последний является просто открытым текстом (с процентным кодированием любых потенциально неоднозначных символов), а первый, будучи XML, может быть записан в виде длинной строки открытого текста (с незначительным разбросом) процентных кодов) невероятно просто.
3) Весь SVG - эмодзи
В декабре 2019 года Леандро Линарес одним из первых осознал, что с тех пор, как Chrome присоединился к Firefox в поддержке SVG Favicons, стоило поэкспериментировать, чтобы узнать, можно ли создать иконку из эмодзи:
https://lean8086.com/articles/using-an-emoji-as-favicon-with-svg/
Предчувствие Линареса было правильным.
Несколько месяцев спустя (март 2020 года) Code Pirate Lea Verou осознала то же самое:
https://twitter.com/leaverou/status/1241619866475474946
И значки никогда не были прежними.
4) Реализация решения самостоятельно:
Вот простой SVG:
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 16 16">
<text x="0" y="14">🦄</text>
</svg>
И вот тот же SVG, что и URI данных :
data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%3E🦄%3C/text%3E%3C/svg%3E
И, наконец, вот этот Data URI как Favicon:
<link rel="icon" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%3E🦄%3C/text%3E%3C/svg%3E" type="image/svg+xml" />
5) Еще хитрости
Поскольку Favicon является SVG, к нему можно применить любое количество эффектов фильтра (как SVG, так и CSS).
Например, наряду с Фавиконом Белого Единорога выше, мы можем легко сделать Фавикон Черного Единорога , применив фильтр:
style="filter: invert(100%);"
Черный Единорог Фавикон:
<link rel="icon" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%20style='filter:%20invert(100%);'%3E🦄%3C/text%3E%3C/svg%3E" type="image/svg+xml" />