“刘海” 和 CSS

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费积分!

苹果的 iPhone X 拥有一块覆盖手机整个表面的屏幕,除了一个用于放置摄像头和其他各种组件的“刘海”。这在屏幕设计方面带来了一些尴尬的情况,例如将网站限制在“安全区域”以及在边缘出现白色条。然而,移除它并不难,在 body 上使用 background-color 即可。或者,将网站扩展到整个区域(无论刘海如何),您可以在 meta viewport 标签中添加 viewport-fit=cover。

<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> 

然后,您需要考虑任何重叠问题,这些问题通常由安全区域处理。有一些新的 CSS 可以帮助您解决这个问题。 Stephen Radford 的文档

为了处理可能需要的任何调整,iOS 11 版本的 Safari 包含了一些常量,这些常量可以在使用 viewport-fit=cover 时使用。

  • safe-area-inset-top
  • safe-area-inset-right
  • safe-area-inset-left
  • safe-area-inset-bottom

这可以添加到 marginpadding 或绝对位置值(如 topleft)中。

我在网站上的主容器中添加了以下内容。

padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);

(更新:当 iPhone X 首次发布时,它使用 constant() 而不是 env(),但从 11.2 版本开始,constant() 已被标准化的 env() 取代)。

刘海、安全区域和固定定位之间还存在另一种尴尬情况。 Darryl Pogue 的报告

iOS 11 与早期版本的不同之处在于,webview 内容现在会尊重安全区域。这意味着,如果您有一个顶部为 top: 0 的固定位置元素的标题栏,它最初将在屏幕顶部下方 20 像素处渲染:与状态栏底部对齐。向下滚动时,它将向上移动到状态栏后面。向上滚动时,它将再次下降到状态栏下方(在 20 像素的间隙中留下一个尴尬的间隙,使内容在其中显示)。

您可以在这个视频片段中看到它有多糟糕。

幸运的是,这也是一个简单的解决方法,因为在 meta viewport 标签中添加 viewport-fit=cover 可以解决这个问题。

如果您要覆盖该视窗,您可能需要稍微聪明一点,以避免隐藏内容!