本文へ移動

§17

モバイル特有

Mobile

Patterns
12
Demos
12

§17-01

Bottom sheet

画面下からスライドして現れるパネル。

親指が届く下部で選択や詳細を扱え、片手操作で完結する。モバイルでモーダルの代わりに短い選択や設定を出す場面で使う。

実装のポイント下端に固定したシートを translateY で出し入れし、背景スクロールのロックとフォーカストラップを入れる。ドラッグハンドルで下に払って閉じられると手に馴染む。

デモはボトムシート (mobile)と共通です。

  • アニメーション
  • アクセシビリティ
詳細

§17-02

Pull to refresh

一覧を引き下げて最新の内容に更新する。

一覧の先頭を引き下げる動作で最新情報を取り込め、更新ボタンを探さずに済む。モバイルのフィードや受信箱で広く期待される操作。

実装のポイントscrollTop が 0 のときだけ touchmove の移動量でインジケータを引き出し、閾値を超えて離したら更新する。overscroll-behavior: contain でブラウザ標準の更新と競合させない。

  • ジェスチャー
  • 非同期
  • モック
詳細

§17-03

Swipe action (リスト)

リスト項目を左右にスワイプして削除や保管を行う。

メニューを開かずに一項目ずつ素早く片付けられる。受信箱やタスク一覧など、繰り返し処理するリストで操作回数を減らす。

実装のポイントpointermove で横移動量を追い、閾値を超えたら開いた位置に吸着させる。スワイプできない利用者のために同じ操作をメニューやボタンからも呼べるようにする。

  • ジェスチャー
  • 状態管理
詳細

§17-04

Floating action button (FAB)

画面右下に浮かぶ主要操作のボタンを置く。

画面のどこからでも主要な操作に手が届くようにする。新規作成や投稿のように、利用の中心となる操作が一つあるときに向く。

実装のポイント画面の主要アクションを 1 つだけ載せ、position: fixed で右下に置く。下端は safe-area-inset-bottom を加算し、アイコンのみなので aria-label を必ず付ける。

  • CSS のみ
  • アクセシビリティ
詳細

§17-05

Long press menu

長押しでコンテキストメニューを開く。

右クリックのないタッチ端末で、項目ごとの追加操作を提供する。一覧の各行に削除や共有などの補助操作を付けたいときに使う。

実装のポイントpointerdown でタイマーを開始し、pointerup/pointercancel や一定距離の移動で取り消す。キーボード向けにメニューボタンも用意する。

  • ジェスチャー
  • タイマー
詳細

§17-06

Safe area insets 対応

ノッチやホームバーに内容が隠れないよう余白を取る。

画面の切り欠きやホームバーに内容が重ならないよう余白を確保する。全画面表示や下部固定の操作があるモバイル画面で必須になる。

実装のポイントviewport メタに viewport-fit=cover を指定し、padding に env(safe-area-inset-top) などを加える。max() で通常の余白と比べると全端末で崩れない。

  • CSS のみ
詳細

§17-07

PWA install prompt

ホーム画面への追加を自前のタイミングで促す。

ブラウザの通知任せにせず、利用者が価値を感じた直後に導入を勧められる。繰り返し使うことが前提の Web アプリに向く。

実装のポイントbeforeinstallprompt を preventDefault して保持し、利用者が価値を感じた後に自前のボタンから prompt() を呼ぶ。閉じられたら記録して再表示を控える。

  • ブラウザ API
  • モック
詳細

§17-08

Splash screen (PWA)

アプリ起動時にアイコンと背景色の画面を見せる。

ホーム画面から起動したときに空白画面を見せない。ネイティブアプリのような起動感を出したいときに使う。

実装のポイントスプラッシュは manifest の name、background_color、icons から生成されるので、テーマに合う背景色と十分な解像度のアイコンを用意する。起動中に重い処理を置かない。

  • CSS のみ
  • モック
詳細
残り 4 件のパターンNotification permission prompt (タイミング工夫) / Haptic feedback (Web Vibration) / 縦動画 viewer …

§17-09

Notification permission prompt (タイミング工夫)

通知の許可を文脈に合わせたタイミングで求める。

利用者が通知の必要性を理解した瞬間に求めることで、許可率が上がる。初回表示で機械的に求めるより拒否されにくい。

実装のポイントまず自前の説明 UI で意図を確認し、同意した場合だけ Notification.requestPermission() を呼ぶ。一度 denied になると再要求できない。

デモはPush 通知 (Web Push)と共通です。

  • ブラウザ API
  • 状態管理
  • モック
詳細

§17-10

Haptic feedback (Web Vibration)

タップに合わせて端末を短く振動させる。

操作に合わせて端末を振動させ、押した手触りを返す。視線を外していても反応が分かるので、ゲームや素早い入力の補助に向く。

実装のポイントnavigator.vibrate はミリ秒または振動/停止の配列を受け取る。未対応のブラウザが多いので機能検出して黙ってスキップし、振動だけに意味を担わせない。

  • ブラウザ API
詳細

§17-11

縦動画 viewer

縦長の動画を全画面で一本ずつ送って見る。

スマートフォンを縦に持ったまま次々と見られる。短い動画を連続して見せるフィードや、片手で眺める場面に向く。

実装のポイント各動画を 100dvh にして scroll-snap-type: y mandatory で 1 本ずつ吸着させる。IntersectionObserver で表示中の動画だけ再生し、画面外は pause する。

  • CSS のみ
詳細

§17-12

Gesture nav (戻るスワイプ)

画面端からのスワイプで前の画面に戻る。

片手操作で戻るボタンに指を伸ばさずに済ませる。スマートフォンの縦長画面で、上部のボタンが届きにくい問題に効く。

実装のポイント画面端から数十 px 以内で始まった横スワイプだけを戻る操作とみなし、OS の端スワイプと衝突しないよう判定域を絞る。戻るボタンも常に併置する。

  • ジェスチャー
詳細