Favicons - Лучшие практики

107

Я пытаюсь разобраться во всех этих разных размерах и форматах, которые необходимы для значков Favicons, Touch, а теперь и для значков Tile.

Я прочитал это сообщение: http://www.jonathantneal.com/blog/understand-the-favicon, но я все еще не уверен, что именно использовать, что будет выглядеть достаточно хорошо на всех устройствах и браузерах> = IE8 .

Думаю, мне стоит создать следующее:

ICO
favicon.ico (32x32)

PNG
favicon.png (96x96)

Значок плитки
tileicon.png (144x144)

Apple Touch Icon
apple-touch-icon-precomposed.png (152x152)
на основе этого https://github.com/h5bp/html5-boilerplate/issues/1367

... а затем использовать этот код для их обслуживания?

<link rel="apple-touch-icon" href="path/to/touchicon.png">
<link rel="icon" href="path/to/favicon.png">
<!--[if IE]><link rel="shortcut icon" href="path/to/favicon.ico"><![endif]-->
<!-- or, set /favicon.ico for IE10 win -->
<meta name="msapplication-TileColor" content="#D83434">
<meta name="msapplication-TileImage" content="path/to/tileicon.png">

Я что-нибудь упускаю?

Я не знаю, подойдет ли это IE 10?

Леон
источник
Чтобы получить лучший ответ,
посетите
1
На веб-сайте Apple на момент написания есть неполная или отсутствующая информация об изображениях заставок и, возможно, о многом другом.
Мухаммад Рехан Саид
ВАУ - сколько здесь деталей. Если вам нужен краткий и простой ответ, см. Stackoverflow.com/a/45301651/661584, может помочь. спасибо
MemeDeveloper

Ответы:

115

Favicon намного сложнее, чем кажется. 10 лет назад favicon.icoбыл единственным нужным предметом. Затем был сенсорный значок, затем был несколько сенсорных значков, связанных с различными разрешениями экрана устройств iOS, затем был значок плитки для Windows ...

Некоторые ответы здесь очень исчерпывающие - и подавляющие (все это только для значка?). Тем не менее, они не могут указать, что значок плитки 310x310 для Windows рекомендуется иметь размер 558x558 . И поскольку они были написаны несколько месяцев назад, в них не упоминается недавний манифест для Android Chrome M39 или значок SVG закрепленной вкладки для Safari в OS X El Capitan. .

Пост-платформенный дизайн - еще одна сложная, но игнорируемая тема. Например, фавиконы часто бывают прозрачными. Но iOS не поддерживает прозрачность (для примера сравните значок SO touch и то, что вы получаете, когда добавляете SO на домашний экран вашего iPhone).

По этим причинам я считаю лучшей практикой для favicon не создавать его вручную. Вместо этого используйте инструмент для автоматизации всего процесса и обеспечения соблюдения правил платформы.

Советую использовать RealFaviconGenerator . Он генерирует все изображения и HTML-код, необходимые для выполнения работы:

  • favicon.ico и значки PNG для настольных браузеров
  • Значок Apple Touch для устройств iOS и Android
  • Плитка Windows 8
  • Значок закрепленной вкладки для Safari в OS X El Capitan

Например, он генерирует не только msapplication-TileImageизображение и разметку, но и более свежий browserconfig.xmlфайл, поддерживаемый IE11. Он также был обновлен несколько месяцев назад для поддержки манифеста Android Chrome и Safari OS X El Capitan.

Полное раскрытие: я являюсь автором этого сайта.

philippe_b
источник
1
Я только что воспользовался вашим сайтом, очень приятно. Вы должны включить метатег msapplication-config, если он не находится в корневом каталоге:<meta name="msapplication-config" content="../path/to/browserconfig.xml">
Рик Дэвис,
1
Спасибо! О пути к browserconfig.xml: он уже включен в сгенерированный код, не так ли?
philippe_b
1
Файл создан, а строка кода - нет. Я просто попробовал. Кстати, спасибо за отличный сервис.
user664833
1
@ user664833 Спасибо за отзыв :) Вы имеете в виду строчку, которая объявляет browserconfig.xml?
philippe_b
3
Это сделано специально. browserconfig.xmlне нужно объявлять, пока он находится в корне сайта. IE ищет его автоматически. В других случаях (когда вы вводите определенный путь в параметрах) создается объявление.
philippe_b
56

Вот полный (насколько я знаю) пример значка для мобильных устройств и планшетов:

<!-- non-retina iPhone pre iOS 7 -->
<link rel="apple-touch-icon" href="icon57.png" sizes="57x57">
<!-- non-retina iPad pre iOS 7 -->
<link rel="apple-touch-icon" href="icon72.png" sizes="72x72">
<!-- non-retina iPad iOS 7 -->
<link rel="apple-touch-icon" href="icon76.png" sizes="76x76">
<!-- retina iPhone pre iOS 7 -->
<link rel="apple-touch-icon" href="icon114.png" sizes="114x114">
<!-- retina iPhone iOS 7 -->
<link rel="apple-touch-icon" href="icon120.png" sizes="120x120">
<!-- retina iPad pre iOS 7 -->
<link rel="apple-touch-icon" href="icon144.png" sizes="144x144">
<!-- retina iPad iOS 7 -->
<link rel="apple-touch-icon" href="icon152.png" sizes="152x152">
<!-- Win8 tile -->
<meta name="msapplication-TileImage" content="favicon-144.png">
<meta name="msapplication-TileColor" content="#B20099"/>
<meta name="application-name" content="name" />

<!-- IE11 tiles -->
<meta name="msapplication-square70x70logo" content="tile-tiny.png"/>
<meta name="msapplication-square150x150logo" content="tile-square.png"/>
<meta name="msapplication-wide310x150logo" content="tile-wide.png"/>
<meta name="msapplication-square310x310logo" content="tile-large.png"/>

Для IE11 вот FAQ

user2477225
источник
2
Отлично - новые и для IE11! Спасибо за размещение информации.
Леон,
4
Но сюда не входят «apple-touch-icon-precomposed.png» и «apple-touch-icon.png»
Питер,
2
+1 Но я не уверен, что это лучшая практика , хотя она основательна. Для лучшей практики (IMHO) и более практичного подхода см. Превосходную шпаргалку, предложенную Нилом Робертсоном ниже.
Боаз
Есть ли шанс обновить ответ, чтобы он работал и с 6 и 6+? Или должен работать приведенный выше код?
Rvervuurt
см. мой ответ stackoverflow.com/a/45301651/661584 намного проще. может помочь. спасибо
MemeDeveloper
26

Существует ряд различных значков и даже экранов-заставок, которые вы можете настроить для различных устройств. В этом ответе рассказывается, как их всех поддержать.

Вот несколько фрагментов, которые я использовал с соответствующими ссылками на то, где я собрал информацию. См. Мой блог для получения дополнительной информации и дополнительных сведений о шаблоне ASP.NET MVC. шаблоне проекта со всем этим встроенным прямо из коробки (включая образцы файлов изображений).

Добавьте следующую разметку в HTML-заголовок. Закомментированные разделы не являются обязательными. В то время как разделы без комментариев рекомендуется охватывать все случаи использования значков. Не бойтесь, если это комментарии, чтобы помочь вам.

<!-- Icons & Platform Specific Settings - Favicon generator used to generate the icons below http://realfavicongenerator.net/ -->
<!-- shortcut icon - It is best to add this icon to the root of your site and only use this link element if you move it somewhere else. This file contains the following sizes 16x16, 32x32 and 48x48. -->
<!--<link rel="shortcut icon" href="favicon.ico">-->
<!-- favicon-96x96.png - For Google TV. -->
<link rel="icon" type="image/png" href="https://stackoverflow.com/content/images/favicon-96x96.png" sizes="96x96">
<!-- favicon-16x16.png - The classic favicon, displayed in the tabs. -->
<link rel="icon" type="image/png" href="https://stackoverflow.com/content/images/favicon-16x16.png" sizes="16x16">
<!-- favicon-32x32.png - For Safari on Mac OS. -->
<link rel="icon" type="image/png" href="https://stackoverflow.com/content/images/favicon-32x32.png" sizes="32x32">

<!-- Android/Chrome -->
<!-- manifest-json - The location of the browser configuration file. It contains locations of icon files, name of the application and default device screen orientation. Note that the name field is mandatory.
    https://developer.chrome.com/multidevice/android/installtohomescreen. -->
<link rel="manifest" href="https://stackoverflow.com/content/icons/manifest.json">
<!-- theme-color - The colour of the toolbar in Chrome M39+
    http://updates.html5rocks.com/2014/11/Support-for-theme-color-in-Chrome-39-for-Android -->
<meta name="theme-color" content="#1E1E1E">
<!-- favicon-192x192.png - For Android Chrome M36 to M38 this HTML is used. M39+ uses the manifest.json file. -->
<link rel="icon" type="image/png" href="https://stackoverflow.com/content/icons/favicon-192x192.png" sizes="192x192">
<!-- mobile-web-app-capable - Run Android/Chrome version M31 to M38 in standalone mode, hiding the browser chrome. -->
<!-- <meta name="mobile-web-app-capable" content="yes"> -->

<!-- Apple Icons - You can move all these icons to the root of the site and remove these link elements, if you don't mind the clutter.
    https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Introduction.html#//apple_ref/doc/uid/30001261-SW1 -->
<!-- apple-mobile-web-app-title - The name of the application if pinned to the IOS start screen. -->
<!--<meta name="apple-mobile-web-app-title" content="">-->
<!-- apple-mobile-web-app-capable - Hide the browsers user interface on IOS, when the app is run in 'standalone' mode. Any links to other pages that are clicked whilst your app is in standalone mode will launch the full Safari browser. -->
<!--<meta name="apple-mobile-web-app-capable" content="yes">-->
<!-- apple-mobile-web-app-status-bar-style - default/black/black-translucent Styles the IOS status bar. Using black-translucent makes it transparent and overlays it on top of your site, so make sure you have enough margin. -->
<!--<meta name="apple-mobile-web-app-status-bar-style" content="black">-->
<!-- apple-touch-icon-57x57.png - Android Stock Browser and non-Retina iPhone and iPod Touch -->
<link rel="apple-touch-icon" sizes="57x57" href="https://stackoverflow.com/content/images/apple-touch-icon-57x57.png">
<!-- apple-touch-icon-114x114.png - iPhone (with 2× display) iOS = 6 -->
<link rel="apple-touch-icon" sizes="114x114" href="https://stackoverflow.com/content/images/apple-touch-icon-114x114.png">
<!-- apple-touch-icon-72x72.png - iPad mini and the first- and second-generation iPad (1× display) on iOS = 6 -->
<link rel="apple-touch-icon" sizes="72x72" href="https://stackoverflow.com/content/images/apple-touch-icon-72x72.png">
<!-- apple-touch-icon-144x144.png - iPad (with 2× display) iOS = 6 -->
<link rel="apple-touch-icon" sizes="144x144" href="https://stackoverflow.com/content/images/apple-touch-icon-144x144.png">
<!-- apple-touch-icon-60x60.png - Same as apple-touch-icon-57x57.png, for non-retina iPhone with iOS7. -->
<link rel="apple-touch-icon" sizes="60x60" href="https://stackoverflow.com/content/images/apple-touch-icon-60x60.png">
<!-- apple-touch-icon-120x120.png - iPhone (with 2× and 3 display) iOS = 7 -->
<link rel="apple-touch-icon" sizes="120x120" href="https://stackoverflow.com/content/images/apple-touch-icon-120x120.png">
<!-- apple-touch-icon-76x76.png - iPad mini and the first- and second-generation iPad (1× display) on iOS = 7 -->
<link rel="apple-touch-icon" sizes="76x76" href="https://stackoverflow.com/content/images/apple-touch-icon-76x76.png">
<!-- apple-touch-icon-152x152.png - iPad 3+ (with 2× display) iOS = 7 -->
<link rel="apple-touch-icon" sizes="152x152" href="https://stackoverflow.com/content/images/apple-touch-icon-152x152.png">
<!-- apple-touch-icon-180x180.png - iPad and iPad mini (with 2× display) iOS = 8 -->
<link rel="apple-touch-icon" sizes="180x180" href="https://stackoverflow.com/content/images/apple-touch-icon-180x180.png">

<!-- Apple Startup Images - These are shown when the page is loading if the site is pinned https://gist.github.com/tfausak/2222823 -->
<!-- apple-touch-startup-image-1536x2008.png - iOS 6 & 7 iPad (retina, portrait) -->
<link rel="apple-touch-startup-image"
      href="https://stackoverflow.com/content/images/apple-touch-startup-image-1536x2008.png"
      media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)">
<!-- apple-touch-startup-image-1496x2048.png - iOS 6 & 7 iPad (retina, landscape) -->
<link rel="apple-touch-startup-image"
      href="https://stackoverflow.com/content/images/apple-touch-startup-image-1496x2048.png"
      media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)">
<!-- apple-touch-startup-image-768x1004.png - iOS 6 iPad (portrait) -->
<link rel="apple-touch-startup-image"
      href="https://stackoverflow.com/content/images/apple-touch-startup-image-768x1004.png"
      media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)">
<!-- apple-touch-startup-image-748x1024.png - iOS 6 iPad (landscape) -->
<link rel="apple-touch-startup-image"
      href="https://stackoverflow.com/content/images/apple-touch-startup-image-748x1024.png"
      media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)">
<!-- apple-touch-startup-image-640x1096.png - iOS 6 & 7 iPhone 5 -->
<link rel="apple-touch-startup-image"
      href="https://stackoverflow.com/content/images/apple-touch-startup-image-640x1096.png"
      media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)">
<!-- apple-touch-startup-image-640x920.png - iOS 6 & 7 iPhone (retina) -->
<link rel="apple-touch-startup-image"
      href="https://stackoverflow.com/content/images/apple-touch-startup-image-640x920.png"
      media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)">
<!-- apple-touch-startup-image-320x460.png - iOS 6 iPhone -->
<link rel="apple-touch-startup-image"
      href="https://stackoverflow.com/content/images/apple-touch-startup-image-320x460.png"
      media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)">

<!-- Windows 8 Icons - If you add an RSS feed, revisit this page and regenerate the browserconfig.xml file. You will then have a cool live tile!
     browserconfig.xml - Windows 8.1 - Has been added to the root of the site. This points to the tile images and tile background colour. It contains the following images:
     mstile-70x70.png - For Windows 8.1 / IE11.
     mstile-144x144.png - For Windows 8 / IE10.
     mstile-150x150.png - For Windows 8.1 / IE11.
     mstile-310x310.png - For Windows 8.1 / IE11.
     mstile-310x150.png - For Windows 8.1 / IE11.
     See http://www.buildmypinnedsite.com/en and http://msdn.microsoft.com/en-gb/library/ie/dn255024%28v=vs.85%29.aspx. -->
<!-- application-name - Windows 8+ - The name of the application if pinned to the start screen. -->
<!--<meta name="application-name" content="">-->
<!-- msapplication-TileColor - Windows 8 - The tile colour which shows around your tile image (msapplication-TileImage). -->
<meta name="msapplication-TileColor" content="#5cb95c">
<!-- msapplication-TileImage - Windows 8 - The tile image. -->
<meta name="msapplication-TileImage" content="/content/images/mstile-144x144.png">

Мой файл browserconfig.xml. Полное объяснение выше.

<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
  <msapplication>
    <tile>
      <square70x70logo src="/Content/Images/mstile-70x70.png"/>
      <square150x150logo src="/Content/Images/mstile-150x150.png"/>
      <square310x310logo src="/Content/Images/mstile-310x310.png"/>
      <wide310x150logo src="/Content/Images/mstile-310x150.png"/>
      <TileColor>#5cb95c</TileColor>
    </tile>
  </msapplication>
</browserconfig>

Мой файл manifest.json. Полное объяснение выше.

{
    "name": "ASP.NET MVC Boilerplate (Required! Update This)",
    "icons": [
        {
            "src": "\/Content\/icons\/android-chrome-36x36.png",
            "sizes": "36x36",
            "type": "image\/png",
            "density": "0.75"
        },
        {
            "src": "\/Content\/icons\/android-chrome-48x48.png",
            "sizes": "48x48",
            "type": "image\/png",
            "density": "1.0"
        },
        {
            "src": "\/Content\/icons\/android-chrome-72x72.png",
            "sizes": "72x72",
            "type": "image\/png",
            "density": "1.5"
        },
        {
            "src": "\/Content\/icons\/android-chrome-96x96.png",
            "sizes": "96x96",
            "type": "image\/png",
            "density": "2.0"
        },
        {
            "src": "\/Content\/icons\/android-chrome-144x144.png",
            "sizes": "144x144",
            "type": "image\/png",
            "density": "3.0"
        },
        {
            "src": "\/Content\/icons\/android-chrome-192x192.png",
            "sizes": "192x192",
            "type": "image\/png",
            "density": "4.0"
        }
    ]
}

Список файлов в проекте (обратите внимание, что имена этих файлов важны, если вы решите поместить некоторые из них в корень своего проекта, чтобы избежать использования вышеуказанных метатегов):

favicon.ico
browserconfig.xml
Content/Images/
    android-chrome-144x144.png
    android-chrome-192x192.png
    android-chrome-36x36.png
    android-chrome-48x48.png
    android-chrome-72x72.png
    android-chrome-96x96.png
    apple-touch-icon.png
    apple-touch-icon-57x57.png
    apple-touch-icon-60x60.png
    apple-touch-icon-72x72.png
    apple-touch-icon-76x76.png
    apple-touch-icon-114x114.png
    apple-touch-icon-120x120.png
    apple-touch-icon-144x144.png
    apple-touch-icon-152x152.png
    apple-touch-icon-180x180.png
    apple-touch-icon-precomposed.png (180x180)
    favicon-16x16.png
    favicon-32x32.png
    favicon-96x96.png
    favicon-192x192.png
    manifest.json
    mstile-70x70.png
    mstile-144x144.png
    mstile-150x150.png
    mstile-310x150.png
    mstile-310x310.png
    apple-touch-startup-image-1536x2008.png
    apple-touch-startup-image-1496x2048.png
    apple-touch-startup-image-768x1004.png
    apple-touch-startup-image-748x1024.png
    apple-touch-startup-image-640x1096.png
    apple-touch-startup-image-640x920.png
    apple-touch-startup-image-320x460.png

Общие накладные расходы

Если вы удалите комментарии, которые составляют 3 КБ дополнительного HTML, если вы не поддерживаете заставку, это 1,5 КБ. Если вы используете сжатие GZIP для своего HTML-контента, что все должны делать в наши дни, это оставляет вам около 634 байтов накладных расходов на запрос для поддержки всех платформ или 446 байтов без экранов-заставок. Я лично считаю, что стоит поддерживать устройства IOS, Android и Windows, но это ваш выбор, я просто даю варианты!

Боковое примечание о текущем веб-значке / начальном экране / настройках

Такая ситуация со значками, специфичными для производителя, экранами-заставками и специальными тегами для управления веб-браузером или закрепленными значками, просто смешна. В идеальном мире мы бы все использовали файл favicon.svg, который мог бы хорошо выглядеть при любом размере и мог бы быть помещен в корень страницы. Только FireFox поддерживает это на момент написания (см. CanIUse.com ).

Однако значки - не единственная настройка в наши дни, есть несколько других настроек, специфичных для поставщика (показано выше), но файл favicon.svg может охватывать большинство случаев использования.

Обновить

Обновлено, чтобы включить новую версию Android / Chrome M39 + значки / темы. Интересно, что они использовали тот же подход, что и Microsoft, но используют файл JSON вместо XML.

Мухаммад Рехан Саид
источник
4
Это слишком много. (Не вы отвечаете, а тот факт, что у производителей браузеров очень много требований :)).
jor
@jor Полностью согласен, это глупая ситуация. svg favicons решит 90% проблемы.
Мухаммад Рехан Саид
см. мой ответ stackoverflow.com/a/45301651/661584 намного проще. может помочь. спасибо
MemeDeveloper
Вы упомянули, что имена файлов важны. Я не совсем понял, о чем вы говорите. У меня вопрос: могу ли я переименовать все файлы так, чтобы они начинались с префикса favicon-... - если я обновлю имена в манифесте и <link>тегах в html-документе head?
Шерил Хохман,
5

Самое простое решение - использовать одно (!) PNG-изображение (в 2020 году).

Просто добавьте это в заголовок вашего документа:

<link rel="shortcut icon" type="image/png" href="https://stackoverflow.com/img/icon-192x192.png">
<link rel="shortcut icon" sizes="192x192" href="https://stackoverflow.com/img/icon-192x192.png">
<link rel="apple-touch-icon" href="https://stackoverflow.com/img/icon-192x192.png">

Последняя ссылка предназначена для Apple (домашний экран), вторая - для Android (домашний экран), а первая - для остальных.

Обратите внимание, что это решение НЕ поддерживает «плитки» в Windows 8/10. Он ДЕЙСТВИТЕЛЬНО поддерживает изображения в ярлыках, закладках и вкладках браузера.

Размер точно соответствует размеру домашнего экрана Android. Размер значка на главном экране Apple составляет 60 пикселей (3x), то есть 180 пикселей и он будет уменьшен. На других платформах используется ярлык по умолчанию, который также будет уменьшен в масштабе.

JoostS
источник
1
Просто интересно, откуда взялся размер 196 пикселей. Это спецификация для конкретного устройства или стандарт?
bluesixty
Это спецификация домашнего экрана Android: emergeinteractive.com/insights/detail/… . Вначале это была икона размером 196 × 196 пикселей. Я перечитал спецификации, чего не делал долгое время. Я понимаю, что произошли изменения: 196 × 196 стало 192 × 192. realfavicongenerator.net/blog/android-chrome-and-its-favicon
JoostS
1

На самом деле я задавал себе тот же вопрос и пытался найти какие-либо простые проекты, которые можно было бы интегрировать в этап сборки или просто упростить создание необходимых ресурсов и разметки.

Я не нашел ничего, что соответствовало бы моим требованиям, поэтому я создал faviconbuild и выпустил его под лицензией MIT .

Цель этого проекта - создать централизованную, обслуживаемую и запускаемую локально кроссплатформенную утилиту для создания значков и поддержки разметки. Он использует возможности Imagemagick, поэтому вам нужно будет загрузить его для своей платформы или использовать те, которые я предоставляю в своих выпусках . Не стесняйтесь использовать это в коммерческих или личных проектах, вносить свой вклад, отправлять запросы функций или просто использовать в качестве источника вдохновения для ваших собственных утилит.

Проект состоит из командного файла для Windows и сценария bash для Unix / Mac (или Windows через Cygwin). Вы можете получить полный список поддерживаемых параметров с помощью параметра внутренней справки -h или --help.

пример:

./faviconbuild.sh -h

Оба сценария анализируют простой текстовый файл , который также можно переопределить с помощью параметра -p или --parsed. По сути, этот файл представляет собой просто шаблон команд для запуска, поэтому при необходимости вы можете легко настроить вывод.

Я также опубликовал сообщение в блоге о разработке и как мини-руководство по созданию сценариев bash / batch.

Мэтью Сандерс
источник