让你的 PWA 在 iOS 上看起来更美观

2025-06-09

让你的 PWA 在 iOS 上看起来更美观

我谈论了如何利用凹口让您的 PWAs 覆盖 iOS 设备上的整个屏幕。

问题

为了避免内容被刘海屏隐藏,苹果默认限制了 PWA 的视口:

Cinepotato 已添加到 iPhone X 的主屏幕

Apple 还将没有凹口的iPhone 和 iPad 上的视口限制在状态栏下方的区域:

Cinepotato 已添加到 iPad 2020 的主屏幕

如果您希望 PWA 能够接受缺口并使其覆盖整个屏幕,那么您将需要进行一些小改动。

解决方案

将文档设置为流向缺口区域:



// index.html

<head>
  ...
  <meta name="viewport" content="initial-scale=1, viewport-fit=cover, width=device-width"></meta>
  <meta name="apple-mobile-web-app-capable" content="yes"></meta>
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"></meta>
  ...
</head>


Enter fullscreen mode Exit fullscreen mode

请注意,这会将 iOS 状态栏的字体颜色设置为白色。

技巧:将文档的最小高度设置为 100% 加上顶部安全区域的高度。这样可以避免由于将文档“向上”移动而导致底部出现白条。

此外,在所有 4 个侧面添加安全区域填充,以确保无论设备方向如何,内容都不会隐藏在凹口下:



/* styles.css */

html {
  min-height: calc(100% + env(safe-area-inset-top));
  padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
  ...
  background-attachment: fixed;
  background-image: url('/bg.svg');
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}


Enter fullscreen mode Exit fullscreen mode

结果

umagoyal.com 已添加到 iPhone X 的主屏幕

umagoyal.com 已添加到 iPad 2020 的主屏幕

额外提示

如果您有带有安全区域填充的元素position: fixed(例如,消息框、侧边栏、底部导航等),请为其容器或自身添加安全区域填充(以相关者为准)。您只需在可能放置刘海的侧面添加填充即可。



/* styles.css */

.left-sidebar {
  padding: env(safe-area-inset-top) 0 0 env(safe-area-inset-left);
}


Enter fullscreen mode Exit fullscreen mode

在 iPhone X 的主屏幕上添加了“Share By Cam”侧边栏

在 iPhone X 的主屏幕上添加了“Share By Cam”侧边栏

对于固定标题,您可以选择在凹口区域下方显示标题(如Share By Cam所做的那样)或填充标题的相关边而不是 html 来填充凹口区域。


很久以前,我在 iOS 12 上尝试了好几次后,开发出了这个 hack,但一直没分享,希望苹果能修复它。看来这个怪癖会一直存在,就这样吧。干杯!

向MockUPhone致敬,它是一款出色的手机模拟工具!

鏂囩珷鏉ユ簮锛�https://dev.to/karmasakshi/make-your-pwas-look-handsome-on-ios-1o08
PREV
什么是虚拟 Dom?为什么它更快?
NEXT
WSL 上的 Warp 终端非常棒