
开发者实现 Logo 资源指南
开发者高效将 Logo Foundry 资源集成到项目中的完整技术指南

PWA 图标的完整参考:必备尺寸 192×192 与 512×512、80% 安全区域规则、可遮罩图标(maskable icon)配置,以及 Lighthouse 报错修复方法。
PWA 需要在 manifest.json 中声明至少两个 PNG 图标:192×192 和 512×512。如果要支持 Android 自适应图标,还需要这两个尺寸的可遮罩(maskable)变体,并将关键内容保留在中心 80% 安全区域内(四周各留 10% 边距)。purpose: "any" 和 purpose: "maskable" 必须分开声明,切勿合并为 "any maskable"。
| 尺寸 | 是否必需 | purpose | 使用场景 |
|---|---|---|---|
| 192×192 | ✅ 必需 | any | Chrome 安装提示、Android 主屏 |
| 512×512 | ✅ 必需 | any | 启动画面、Play Store 预览、高 DPI 屏 |
| 192×192 maskable | 🟡 强烈推荐 | maskable | Android 自适应图标 |
| 512×512 maskable | 🟡 强烈推荐 | maskable | 高 DPI 设备的启动画面 |
| 144×144、168×168、384×384 | 可选 | any | 特定屏幕密度的像素级精确渲染 |
| 1024×1024 | 可选 | any | 未来超高 DPI 屏、营销素材 |
最小可用配置:1 个 192×192 标准图标 + 1 个 512×512 标准图标 + 1 个 512×512 可遮罩图标。Chrome 会自动在尺寸间缩放。
PWA 图标通过 manifest.json 中的 purpose 字段告诉浏览器该如何渲染。
purpose: "any"——标准图标purpose: "maskable"——自适应图标purpose: "any maskable"把两种用途合并到同一条目是 web.dev 官方明确反对的写法,Chrome DevTools 也会发出警告。原因是:可遮罩图标本身已预留 10% 边距,当 OS 把它当作标准 any 图标使用时,边距会被保留——结果你的图标看起来比其他应用小 20%。
正确做法是在 manifest 中提供两个独立的图标条目。
可遮罩图标的规范定义了一个最小安全区域:以图标中心为圆心、半径为图标宽度 40% 的圆形区域。等价说法是,所有关键内容必须保留在图标中心 80% 的区域内。
完整图标尺寸:512 × 512 px
安全区域: 410 × 410 px(中心 80%)
四周边距: 各 51 px(10%)
安全区形状: 半径 205 px 的圆形内容布局原则:
之所以是 80%,是因为最激进的裁剪形状(圆形)会从四边各切掉约 10%。可能被应用的遮罩形状包括:
如果你的 Logo 顶到边缘,圆形遮罩就会切到 Logo 上。80% 安全区能保证图标在任何遮罩形状下都能完整呈现。
manifest.json 配置推荐使用四条独立的图标声明——两条用于标准渲染,两条用于自适应图标:
{
"name": "你的 PWA 名称",
"short_name": "应用简称",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000",
"icons": [
{
"src": "/icons/icon-192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/icons/icon-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/icons/icon-maskable-192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/icons/icon-maskable-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}别忘了在 HTML 的 <head> 中引用 manifest:
<link rel="manifest" href="/manifest.json" />
<meta name="theme-color" content="#000000" />最常见的错误是直接把标准 Logo 当作 maskable 图标使用——结果在 Android 上被裁切。正确步骤如下:
快速方案:使用我们的 PWA 图标生成器,上传一次 Logo 即可自动生成标准版和可遮罩版的全部尺寸,附带实时安全区域预览。
验证可遮罩图标最可靠的方式:
如果你的 Logo 和关键内容在裁剪后依然可见,说明图标在所有遮罩形状下都安全。
DevTools 和在线预览覆盖不了所有边界情况。上线前务必:
原因:manifest.json 中没有 purpose: "maskable" 的图标条目。
修复:按上面的 manifest 示例新增一条独立的 maskable 图标条目。注意 Lighthouse 只检查声明是否存在,不会验证图片是否真的符合安全区域要求。添加后还要用 Chrome DevTools 手动确认图标内容。
按优先级排查:
<head> 中必须有 <link rel="manifest" href="/manifest.json">。原因:把透明的 PNG 用作了可遮罩图标。Android 系统会用默认色(通常是灰白色)填充透明区域,再应用遮罩。
修复:重新生成可遮罩版本,使用不透明背景,颜色匹配品牌色。标准 any 图标可以继续保持透明。
原因:把可遮罩图标用作了标准 any 用途(常见于使用了 "any maskable")。为遮罩预留的 10% 边距在不裁剪的场景下被保留,导致视觉上偏小。
修复:提供两份独立的图片文件——purpose: "any" 用满铺版本,purpose: "maskable" 用带安全区的版本。
Chrome 在 Android 上安装 PWA 时会生成 WebAPK——一个真正的 Android 安装包——使用 manifest 中的图标。可遮罩图标用于自适应主屏图标,标准图标用于安装提示横幅。
iOS 不读取 manifest 的 icons 数组,而是使用 apple-touch-icon。HTML 中需要单独声明:
<link rel="apple-touch-icon" href="/icons/apple-touch-icon-180.png" />推荐尺寸 180×180 PNG,不要透明背景——iOS 会用白色填充透明区域。如果需要完整体验,还要提供 apple-touch-startup-image 启动画面。
any 图标用于任务栏和磁贴渲染,忽略 maskable 图标。maskable 图标,没有则回退到 any。purpose: "any" 和 purpose: "maskable" 分开两套图片文件。apple-touch-icon(180×180)。Chrome 的安装条件要求 manifest.json 中至少包含 192×192 和 512×512 两个 PNG 图标。192×192 用于安装提示和主屏图标,512×512 用于启动画面和高分辨率屏幕。若要支持 Android 自适应图标,还需额外提供这两个尺寸的 maskable 版本。
可以通过 Lighthouse 的安装性检查,但不推荐。Chrome 在小尺寸场景下会把 512×512 缩小到 192×192,可能产生轻微模糊。同时提供两个尺寸能确保像素级清晰。
purpose: "any maskable" 这种写法可以用吗?不要这样用。web.dev 官方文档和 Chrome DevTools 都会警告。原因是:maskable 图标本身已有 10% 边距,当系统把它当作 any 使用时,边距会被保留,导致图标看起来比其他应用小 20%。
在 manifest.json 的 icons 数组中新增一项,purpose 字段设为 "maskable",使用一张独立的、符合 80% 安全区域规范的图片。
不推荐。Chrome 支持 manifest 中的 SVG 图标,但 iOS Safari 和部分 Android 启动器不支持。稳妥做法是用 PNG 提供 192×192 和 512×512。
最常见原因:用错了浏览器(必须用 Chrome,不要用 Firefox/Edge),或 HTML head 中缺少 manifest 引用,或图标 URL 返回 404。打开 DevTools → Application → Manifest 排查。
favicon.ico 和所有浏览器 favicon 变体。purpose: "any"——标准图标purpose: "maskable"——自适应图标⚠️ 不要使用 purpose: "any maskable"80% 安全区域规则完整的 manifest.json 配置如何从 Logo 制作可遮罩图标如何测试 PWA 图标Chrome DevTools(官方方法)真机测试常见错误与修复Lighthouse 报错 "Manifest doesn't have a maskable icon"Chrome 在 Android 安装 PWA 后图标不显示Android 上图标周围出现白色背景图标在主屏上比其他应用图标小一圈平台差异速览Android(WebAPK)iOSWindows 和 macOS最佳实践清单常见问题PWA 图标必须提供哪些尺寸?只提供 512×512 一个尺寸可以吗?purpose: "any maskable" 这种写法可以用吗?Lighthouse 提示 "Manifest doesn't have a maskable icon" 怎么修复?PWA 图标可以用 SVG 格式吗?Chrome 在 Android 安装 PWA 后图标不显示怎么解决?相关工具加入我们的社区
订阅邮件列表,及时获取最新消息和更新