スポンサー
Support Framework7

セーフエリア

iPhone Xのリリース以降、Appleはいわゆるセーフエリアを導入しました。

セーフエリアのあるデバイス(トップスクリーンのノッチがあるような)では、アプリのUIは、縦向きでは追加の上下の間隔(トップノッチと新しいボトムバーを考慮)、横向きでは追加の左右の間隔(左右のノッチを考慮)を含める必要があります。

縦向きの場合は、Framework7が必要なスタイルの変更を自動的に行いますが、横向きの場合は、いくつかの追加クラスを要素に追加する必要があります。

  • safe-areas - 横向きの場合、左右のスクリーンエッジに密着する要素に追加します。
  • safe-area-left - 横長の画面で、左の画面端にくっついている要素に追加します。
  • safe-area-right - 横長の画面で、右の画面の端にくっついている要素に追加します。
  • no-safe-areas - safe-areas の内側にある要素に追加して、追加の水平方向のスペースを削除します。
  • no-safe-area-left - safe-areas の内側にある要素に追加して、追加の左のスペースを削除します。
  • no-safe-area-right - safe-areas の中にある要素に追加して、追加の右のスペーシングを取り除きます。

以下の要素には、このようなクラスは必要ありません。

  • Popup, Sheet - 既にフルスクリーンの要素として考えられており、左右両方に余分なスペーシングが必要となります。
  • 左パネル - すでに、画面の左端にくっついていて、左側に余分なスペーシングが必要な要素とみなされています。
  • 右パネル - 右画面の端に貼り付けられ、右側に余分なスペースを必要とする要素として既に考慮されています。

このようなクラスを持つアプリのレイアウト例を示します。

<body>
  <!-- アプリのルート -->
  <div id="app">

    <!-- 左パネルには追加のクラスは必要ありません -->
    <div class="panel panel-left panel-cover">
      ...
    </div>

    <!-- 右パネルには、追加のクラスは必要ありません。 -->
    <div class="panel panel-right panel-reveal">
      ...
    </div>

    <!-- main view, full-wide element, add "safe-areas" class -->
    <div class="view view-main view-init safe-areas" data-url="/">
      <div class="page">
        <div class="navbar">
          ...
        </div>
        <div class="page-content">
          <!-- フルワイドリスト:セーフエリアをビューから継承します。 -->
          <div class="list">
            ...
          </div>
          <!-- フルワイドのコンテンツブロックは、ビューからセーフエリアを継承する。 -->
          <div class="block">
            ...
          </div>
          <!--
            two-columns blocks: need to
              - remove extra spacing on right side for left block
              - remove extra spacing on left side for right block
          -->
          <div class="row">
            <!-- 左ブロックの右スペースを削除 -->
            <div class="block col no-safe-area-right">
              ...
            </div>
            <!-- 右ブロックの左余白を削除 -->
            <div class="block col no-safe-area-left">
              ...
            </div>
          </div>
          ...
        </div>
      </div>
    </div>
  </div>
  ...
</body>