🔥 欢迎使用我们的新项目 t0ggles - 您终极的项目管理工具! 🔥

安全区域

随着 iPhone X 的发布,Apple 引入了所谓的安全区域,后来被 Google Chrome 实现并支持 Android。

在具有安全区域的设备上(例如带有顶部屏幕缺口的设备),应用程序 UI 必须在纵向方向上包含额外的顶部/底部间距(以考虑顶部缺口和底部栏),并在横向方向上包含额外的左侧/右侧间距(以考虑左侧/右侧缺口)。

视窗

如果您的应用程序面向全屏移动设备,请确保您的 <meta name="viewport"> 中有 viewport-fit=cover,例如:

<!DOCTYPE html>
<html lang="en">
  <head>
    ...
    <!-- Make sure you have viewport-fit=cover in content -->
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, viewport-fit=cover"
    />
  </head>

  <body>
    ...
  </body>
</html>

安全区域

要告诉我们的组件我们的应用程序是全屏应用程序,我们需要考虑安全区域,我们需要将 safe-areas 类添加到 Konsta UI 组件的父元素中,最好是根应用程序元素中。

<!-- App.svelte  -->
<!-- add "safe-areas" class to the app root element -->
<div id="my-app" class="safe-areas">...</div>

如果您使用 Konsta UI 的 App 组件,则可以使用 safeAreas 属性启用它。

<!-- App.svelte -->
<script>
  import { App } from 'konsta/svelte';
</script>

<!-- enable with safeAreas prop -->
<App safeAreas theme="ios">
  <HomePage />
</App>

这是在 CSS 中定义 safe-areas 类的示例。

:root: {
  --k-safe-area-left: 0px;
  --k-safe-area-right: 0px;
  --k-safe-area-top: 0px;
  --k-safe-area-bottom: 0px;
}

@supports (left: env(safe-area-inset-left)):  {
  .safe-areas: {
    --k-safe-area-left: env(safe-area-inset-left);
    --k-safe-area-right: env(safe-area-inset-right);
    --k-safe-area-top: env(safe-area-inset-top);
    --k-safe-area-bottom: env(safe-area-inset-bottom);
  }
}

禁用安全区域

在模态和侧边面板(不是全屏元素)上禁用安全区域可能很有用。

我们可以使用以下实用工具类在某些元素上禁用安全区域。

.no-safe-areas禁用元素上的所有安全区域
.no-safe-areas-top禁用元素上的顶部安全区域
.no-safe-areas-right禁用元素上的右侧安全区域
.no-safe-areas-bottom禁用元素上的底部安全区域
.no-safe-areas-left禁用元素上的左侧安全区域

这是在 CSS 中定义 no-safe-areas 类的示例。

@supports (left: env(safe-area-inset-left)):  {
  .no-safe-areas: {
    --k-safe-area-left: 0px;
    --k-safe-area-right: 0px;
    --k-safe-area-top: 0px;
    --k-safe-area-bottom: 0px;
  }
  .no-safe-areas-top: {
    --k-safe-area-top: 0px;
  }
  .no-safe-areas-right: {
    --k-safe-area-right: 0px;
  }
  .no-safe-areas-bottom: {
    --k-safe-area-bottom: 0px;
  }
  .no-safe-areas-left: {
    --k-safe-area-left: 0px;
  }
}

安全间距和布局

我们也可以在放置元素时考虑安全区域。

CSS
.top-safetop: var(--k-safe-area-top)
.top-[value]-safetop: calc([value] + var(--k-safe-area-top))
.right-saferight: var(--k-safe-area-right)
.right-[value]-saferight: calc([value] + var(--k-safe-area-right))
.bottom-safebottom: var(--k-safe-area-bottom)
.bottom-[value]-safebottom: calc([value] + var(--k-safe-area-bottom))
.left-safeleft: var(--k-safe-area-left)
.left-[value]-safeleft: calc([value] + var(--k-safe-area-left))

以及相同的边距和填充

CSS
.pt-safepadding-top: var(--k-safe-area-top)
.pt-[value]-safepadding-top: calc([value] + var(--k-safe-area-top))
.pr-safepadding-right: var(--k-safe-area-right)
.pr-[value]-safepadding-right: calc([value] + var(--k-safe-area-right))
.pb-safepadding-bottom: var(--k-safe-area-bottom)
.pb-[value]-safepadding-bottom: calc([value] + var(--k-safe-area-bottom))
.pl-safepadding-left: var(--k-safe-area-left)
.pl-[value]-safepadding-left: calc([value] + var(--k-safe-area-left))
CSS
.mt-safemargin-top: var(--k-safe-area-top)
.mt-[value]-safemargin-top: calc([value] + var(--k-safe-area-top))
.mr-safemargin-right: var(--k-safe-area-right)
.mr-[value]-safemargin-right: calc([value] + var(--k-safe-area-right))
.mb-safemargin-bottom: var(--k-safe-area-bottom)
.mb-[value]-safemargin-bottom: calc([value] + var(--k-safe-area-bottom))
.ml-safemargin-left: var(--k-safe-area-left)
.ml-[value]-safemargin-left: calc([value] + var(--k-safe-area-left))

例如

<!--
"left-safe" class will set:
  left: var(--k-safe-area-top);

"bottom-4-safe" class will set:
  bottom: calc(1rem + var(--k-safe-area-bottom));
-->
<div class="left-safe bottom-4-safe">...</div>;
代码许可证: MIT.
2022 © Konsta UI,作者: nolimits4web.