动态

详情 返回 返回

PWA 圖標顯示問題,兼顧 macOS、Windows、iPad - 动态 详情

首先看macOS任務欄的圖標規律:
image.png

會發現第三個:YouTube Music(PWA版本)的圖標很不對勁,不是因為它是圓形,其他都是方形。而是它很大,寬高明顯大過其他圖標。在我對比了VSC和YouTube Music的圖標圖片之後發現了區別所在:
app_512x512x32.png
image.png

上面看不明顯的話,這麼對比看就明顯了:
image.png

解釋下,圖3是圖2在控制枱(F12)資源那裏顯示的圖片,之所以看這個是因為可以看出來,圖2外層有一圈白色的,其實也是圖片的一部分,而且是透明的。
圖1四角也有白色的,也是透明的。

所以現在能解釋為什麼VSC和YouTube Music的圖標就算尺寸一樣大,他們在macOS上顯示的大小也不同了:VSC有一圈透明白邊,YM沒有。

在做PWA項目時,會涉及到給PWA添加桌面圖標的情況,即,在 manifest.icons 配置中添加圖標設置,比如:

{
  "icons": [
    {
      "src": "logo64.png",
      "sizes": "64x64 48x48 32x32 24x24 16x16",
      "type": "image/x-icon"
    },
    {
      "src": "logo192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "logo512.png",
      "type": "image/png",
      "sizes": "512x512"
    }
  ]
}

在我這邊的項目中,上面三個圖標文件都是像VSC那種有一圈透明邊的文件,但我發現到了Windows平台,任務欄的圖標顯示很小(最後一個):
image.png
和左邊Brave瀏覽器對比下,顯得更小。一開始我以為Windows PWA圖標取的是上面的icons,所以我把logo64.pnglogo192.pnglogo512.png的圖標都去掉了透明白邊,發現到了Windows這邊還是不行。

我最後才發現:原來 Windows(只測試了win7) PWA 應用在任務欄(包括桌面上)的圖標取的是網頁的favicon.ico,而 macOS平台取的是manifest.icons裏的圖標,真是坑。

所以解決方法就是:在manifest.icons配置時用有一圈透明邊緣的圖(macOS用),然後html favicon.ico的圖用不帶透明邊緣的圖(Windows用)。

更新: Windows11的Chrome/Edge取的是manifest.icons配置,這就很尷尬了。如果你配置的圖標不留外層一圈透明空白,你的圖標在Windows11上顯示正常,在macOS上顯示就和上面的YouTube Music一樣顯得大。反之macOS上正常,那麼Windows11上就顯得比其他圖標小。

然後iPad也需要單獨處理:

  • 首先Safari不會讀PWA的 manifest 配置文件,會去讀html的<link rel="apple-touch-icon" href="/apple-pwa.png">
  • 其次,不能有透明像素,透明像素就會顯示為黑色。(上面VSCode圖標最外層那一圈就是透明像素)
  • 還有個特點 就是得貼邊 外框是safari給加(這條不確定,應該是指不應該給圖標增加box-shadow陰影效果)
  • safari的title透明是這樣搞:apple-mobile-web-app-capable+apple-mobile-web-app-status-bar-style

    然後還有個安全區(劉海,豎屏、橫屏)的坑。上面這個設置好之後,safari就會遵守theme-color設置的顏色

Add a new 评论

Some HTML is okay.