kitak's blog

Kみたいなエンジニアになりたいブログ

MobileSafari でダブルタップしたらズームするのを防ぐ

iOS10 から <meta name="viewport" ...user-scalable=no の指定が無効になって、ダブルタップしたらズームされるようになった。

読み物系のサイトでは問題ないと思うんだけど、ボタンを連打するようなUIを作っている場合、拡大されるとUXとしてよろしくないので、防ぎたい。

調べたら JS で touch 系のイベントリスナーを登録して、フラグが立ったら preventDefault するようなハックをよく見かけたのだけど、もう少しシンプルにできないか、と思った。
そういえばタッチの振る舞いを決める CSS プロパティがあったことを思い出して、サイト上でのタップ操作をサポートする  |  Web  |  Google Developers を読んだら、touch-action: manipulation; というドンピシャなものがあった。クリック遅延を防止するらしいので、画面をタップした際の click イベントが発火するタイミングにも良い影響があるかもしれない。

touch-action: manipulation ダブルタップ操作を無効にして、ブラウザでのクリック遅延を防止します。 スクロールやピンチズームの処理はブラウザに委ねます。

ベースの CSS に以下の記述を足しておしまい。

html {
  touch-action: manipulation;
}