iPhone XのiOS 11.11以下と11.12以上どちらにも対応するWebページの作り方

WebKit公式サイトを含め、多くのWebサイトで解説されている「iPhone X対応のWebページの作り方」はiOS 11.11系まで、またはiOS 11.12以上のどちらか一方にしか対応していないため、その両方に対応する書き方について解説します。

この記事の内容は「スマートフォン時代のWebコーディングスクール」の授業資料の一部です。

iPhone X対応していないWebページはどう見えるのか

縦持ちでは特に問題ありませんが、横持ちの場合画面の左右に空白ができてしまいます。

たとえば、このブログの記事ページを横持ちで観ると以下の画像のように見えます。

のスクロールバー

このブログの場合、bodyの背景色は濃い茶色、ページ全体を包んでいるwrapper要素に背景画像が設定されています。

iPhone Xのセーフエリアについて

iPhone Xのディスプレイを横向きにした時、センサーハウジングや角丸の部分を除いた「セーフエリア」とよばれる領域があります。
iPhone X対応していない場合、このセーフエリアはbodyの背景色になり、テキストなどのコンテンツがセーフエリアに表示されることはありません。

セーフエリアの外までコンテンツを表示させるには、以下の要素をHTMLのhead要素内に入れます。

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

一般的なスマートフォン対応ののviewportとの違いは “viewport-fit=cover” が入っていることです。

しかしこのままだと、ページ内の本文テキストや写真などのコンテンツがセンサーハウジングなどと被ってしまい、コンテンツの一部を見ることができない場合があります。

そこで、CSSを使用してコンテンツ部分のみセーフエリア内に配置することができます。
しかしその方法が、iOS 11.1以下と11.2以上で異なります。

Webコーディングスクール 体験レッスン受付中

iOS 11.1までの方法

WebKitのサイトには、iOS 11.1までは、ページ全体を囲む .wrapper 要素を作り、そこに以下のようなスタイルを適用することと書かれていました。

.wrapper {
padding: constant(safe-area-inset-top) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left);
}

paddingの値が4つに分かれて書かれていますが、これはそれぞれtop, right, bottom, leftを指定しています。
セーフエリアの大きさは左右と上下で異なるため、まとめて一括指定はできません。

iOS 11.2からの方法

しかし、constant() はiOS 11.2のSafariでは無効(廃止)になり、代わりにenv()を使用することとなっています。
現在WebKitのサイトには以下のように書かれています。

.wrapper {
padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}

しかし、HTMLのviewport-fit=cover指定+この記述では、iOS 11.1までのiPhone Xではコンテンツがセーフエリアとかぶってしまうという問題があります。

どちらでも動くようにするには

両方で動くようにするには、以下のように併記する方法があります。

.wrapper {
/* iPhone X 以外にpaddingをつける場合ここに書く /
padding: 10px;
/
iPhone X iOS 11.1以下: Safe Aria内に配置 /
padding: constant(safe-area-inset-top) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left);
/
iPhone X iOS 11.2以上: Safe Aria内に配置 */
padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}

これで、どのバージョンのiPhone Xでも、それ以外の端末でも適切なpaddingを指定することができます。

最近の記事

Web制作関連動画

メルマガ会員向けの「コーダーにも役立つ補完AI『Codeium』の使い方」の動画を期間限定で公開しています。
CodeiumはGitHub Copilotと似ていますが、CSSなども補完できて、今登録すれば無料で使えます。

メルマガでは、Web制作者のためのAI活用やWordPress関連の動画など、さまざまな特典があります。ご興味ある方は、ぜひメルマガにご登録ください。
Index