Что такое maskable-иконка

Когда человек устанавливает веб-приложение, лаунчер показывает его иконку в своей форме: на одном телефоне это круг, на другом — скругленный квадрат или капля. Как обычная иконка с прозрачным фоном впишется в эту форму, решает платформа. Maskable-иконка сделана как раз под обрезку: она заполняет весь квадрат собственным фоном, поэтому какую бы форму ни вырезал лаунчер, получается цельная цветная иконка.

В манифесте веб-приложения эту разницу задает поле purpose у каждой иконки. Спецификация W3C перечисляет три значения — any, maskable и monochrome, а иконка без purpose считается any.

Безопасная зона: круг радиусом 40 %

Спецификация определяет, где графике не страшна никакая маска: это «круг с центром в центре иконки и радиусом 2/5 (40 %) от размера иконки». На иконке 512 px это круг диаметром 410 px по центру. MDN описывает ту же зону как круг диаметром 80 % от иконки, а web.dev предупреждает, что внешний край — примерно по 10 % с каждой стороны — может быть обрезан.

Четыре копии примера maskable-иконки: с безопасной зоной, обведенной коралловым цветом, затем обрезанные кругом, скругленным квадратом и каплей; знак везде целый

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

Генератор favicon вписывает в круг саму графику, а не ее ограничивающий прямоугольник, за вычетом выбранного отступа. Поэтому круглый знак может занять почти всю безопасную зону, а квадратное фото получится мельче — ведь в круг должны поместиться и его углы.

Purpose any или maskable: зачем два файла

Иконка может объявить "purpose": "any maskable", и статья web.dev о манифесте использует именно такую форму. Но статья web.dev о maskable-иконках советует так не делать: иконка с отступом под маску выглядит слишком мелкой там, где ее показывают без маски. Источники расходятся, а два файла снимают этот компромисс. Иконка any сохраняет прозрачность, и графика заполняет квадрат; у иконки maskable фон до самого края, а графика — внутри безопасной зоны.

Purpose Фон Графика Где показывается
any Прозрачный Заполняет квадрат за вычетом отступа Везде, где иконку показывают без обрезки
maskable Ваш цвет фона от края до края Внутри круга 40 % В лаунчерах, которые обрезают иконки под форму

Иконка 512 px из примера пакета с purpose any: знак на прозрачном фоне

Тот же знак как maskable-иконка 512 px: мельче, по центру, на сплошном светло-голубом квадрате

Манифест с иконками обоих видов

Это site.webmanifest из примера пакета. Пути к иконкам относительные: спецификация отсчитывает src, как и start_url, от адреса самого манифеста, поэтому иконки работают из любой папки, если лежат рядом с манифестом.

{
  "name": "png2svg.art",
  "short_name": "png2svg",
  "icons": [
    {
      "src": "icon-192.png",
      "sizes": "192x192",
      "type": "image/png",
      "purpose": "any"
    },
    {
      "src": "icon-512.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "any"
    },
    {
      "src": "icon-maskable-192.png",
      "sizes": "192x192",
      "type": "image/png",
      "purpose": "maskable"
    },
    {
      "src": "icon-maskable-512.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "maskable"
    }
  ],
  "theme_color": "#0a2d8f",
  "background_color": "#e8efff",
  "display": "standalone",
  "start_url": "/"
}

Подключите его на каждой странице тегом <link rel="manifest" href="/site.webmanifest">. Спецификация называет .webmanifest зарегистрированным расширением файла и рекомендует отдавать его с типом application/manifest+json, хотя подойдет любой JSON-тип.

Размеры выбраны не случайно. Руководство MDN по установке PWA, обновленное в сентябре 2026 года, говорит, что браузеры на Chromium, помимо прочих условий, устанавливают веб-приложение, только если в манифесте есть name или short_name, start_url, режим display и иконки 192 и 512 px, а сайт работает по HTTPS. Safari устроен иначе: команда WebKit написала для Safari 26, что требований к установке нет, а иконки из манифеста используются, если сайт их задал. MDN также советует начинать с графики не меньше 1024 px по стороне: маленький растр, растянутый до 512 px, деталей не наберет.

Как проверить maskable-иконку

В Chrome откройте DevTools, перейдите в Application → Manifest и отметьте Show only the minimum safe area for maskable icons. Тогда в разделе иконок каждая maskable-иконка будет обрезана по безопасной зоне: если там пропало что-то важное, лаунчер тоже может это обрезать. Эта опция описана в документации Chrome. web.dev также советует Maskable.app — сторонний сайт, где можно посмотреть иконку под разными масками. Последняя проверка — установленное приложение на настоящем телефоне.

Настоящий пример для скачивания

Иконки выше получены за один запуск генератора favicon на собственном знаке этого сайта (SVG из нашего репозитория, а не чья-то загрузка) с отступом 8 % и фоном #e8efff. Это ровно те файлы, которые делает инструмент. Скачайте пример пакета (ZIP), чтобы посмотреть все файлы вместе с README. Про сторону вкладки браузера в этом же пакете читайте в руководстве SVG, PNG или ICO для favicon.