🔥 新しいプロジェクトをご紹介 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>

セーフエリア

アプリがフルスクリーンアプリであり、セーフエリアを考慮する必要があることをコンポーネントに伝えるには、Konsta UIコンポーネントの親要素(できればルートアプリ要素)にsafe-areasクラスを追加する必要があります。

/* App.jsx */
import React from 'react';

export default function MyApp() {
  return (
    <>
      {/* add "safe-areas" class to the app root element */}
      <div id="my-app" className="safe-areas">
        ...
      </div>
    </>
  );
}

Konsta UIのAppコンポーネントを使用する場合は、safeAreasプロパティで有効にできます。

/* App.jsx */
import React from 'react';
import { App, ... } from 'konsta/react';

export default function MyApp() {
  return (
    <>
      {/* enable with safeAreas prop */}
      <App safeAreas theme="ios">
        ...
      </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 className="left-safe bottom-4-safe">...</div>;
コードは下記ライセンスで提供されています。 MIT.
2022 © Konsta UI by nolimits4web.