0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

(備忘録)今日つまづいたスマホレイアウトのあれこれ

Last updated at Posted at 2022-05-17

今日スマホ実機で確認をした際に躓いたレイアウト、挙動面のエラーが
今後も起こりそうなので、備忘録を残します!

inputエリアをタップ→画面が勝手に拡大

  • 原因
    iOSではfont-sizeが16pxを基準値としているため
    cssでfont-size15px以下を指定すると、画面が勝手に拡大する

  • 解決策
    ①font-sizeを16px以上に指定(意外と大きすぎない)
    ②metaタグのviewportにmaximum-scale=1.0を挿入する

 <head>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0">
 </head>

※ダブルタップズームは別途制御が必要

  • 解決策
  1. htmlにtouch-action:manipulation
    touch-actionには他にも色んなプロパティがあるようだけど
    safariではautomanipulationしか使えないみたい。
    manipulation
    ピンチでのズームはOK、ブラウザ仕様等で追加された
    ダブルタップで自動ズームなどの挙動を制限するプロパティとのこと。

  2. preventDefaultをつかってdblclickのアクションを消す

  リセットに1の解決策を組み込んでいる人も多いみたいです。

overflowでのスクロールロックが効かない

モーダルなどを表示した時に裏背景のスクロールを止めたい時など。

  • 原因
    よくわかりませんでした。スマホ実機の独特の仕様が多いですね;

  • 解決策
    preventDefaultを使ってユーザーのスクロール挙動の前に操作を差し込む
    (スマホならtouchmove、PCならwheel

function handllingScroll(e) {
	e.preventDefault();
}

function stopScroll() {
	document.addEventListener("wheel", handllingScroll, { passive: false });
	document.addEventListener("touchmove", handllingScroll, { passive: false });
}

 解除は解除用の関数を作って、removeEventListner

 ただ、この方法だと例えばモーダル内等にscroll要素があった場合も
 含めて「全止め」なので、ちょっと不便。

 ②htmlにoverflow:auto;height:100%;の指定をし、
 その上でbodyにoverflow:hidden;と同じくheight:100%;を指定。
 (既定値のvisibleが邪魔をする..という事なのでしょうか。)

 こちらの記事を参考にさせていただきました、ありがとうございます!
 * iOSでbodyにoverflow: hiddenが効かないとき

バウンススクロールも解除したい場合

↓これ
162c8415bc83e485a8d45c2ca1c44f7d.gif

さっきoverflow:auto;にしたhtmlをoverflow:hidden;にするだけ!
→これを起点のイベントに組み込む

overscroll-behaviorという要素も使えるんですが
あのsafariが非対応なので、あまり現実的でないかも;

最終的にこうなりました↓

平時
html{
    overflow: auto;
    height:100%;
    touch-action: manipulation;
    overscroll-behavior: none;
    position:relative;
}
イベント後
html{
    overflow: hidden;
    height:100%;
    touch-action: manipulation;
    overscroll-behavior: none;
    position:relative;
}

body{
    overflow-y: hidden;
    overscroll-behavior: none;
    height:100%;
}

以上Qiita初記事、乱文失礼しました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?