Kazuho OHTA

モバイルでページ全体を縮ませないviewport設計

スマートフォンでページ全体が縮小する問題を防ぐ。viewportの指定と、画面の外へはみ出さない構造を整理する。

スマートフォンで「カードだけでなくページ全体が小さくなった」ときは、カード幅より先にviewportを疑う。モバイルブラウザには、レイアウトに使う領域と、実際に見えている領域があり、拡大率が変わると両者の幅は一致しなくなる。

初期倍率を明示する

このサイトでは、次の指定を基本にしている。

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

initial-scale=1で初期倍率を明示し、viewport-fit=coverとsafe-area-inset-*でノッチ周辺を扱う。ただし、user-scalable=noや小さなmaximum-scaleは指定しない。表示の安定と、利用者が文字を拡大できることは両立させたい。

横幅を数値で確認する

見た目だけでなく、innerWidth、visualViewport.width、documentElement.scrollWidthを比べる。通常はスクロール幅がinnerWidthを超えず、意図しない操作でvisualViewport.scaleが変わらない状態が望ましい。タップ前だけでなく、アニメーション中と終了後も測ると、一瞬だけ生まれるはみ出しを見つけやすい。