iOS Safariでinputタグにフォーカスを合わせると、自動で画面が拡大してしまう原因と解決方法

iOS Safariでウェブサイト内のテキストフィールドをタップしてフォーカスを合わせたとき、画面が少し拡大されてしまうことがあります。
入力したあとはで縮小しないと、ずっと拡大されたままなので正直面倒です。
フォームのフォントサイズが16px未満だと拡大される
これはiOS Safariの仕様で、<input>タグのフォントサイズが16px未満のときに、そのタグにフォーカスされると自動で拡大されてしまいます。

See the Pen iOS|<input> font-size by Masakazu Saito (@31mskz10) on CodePen.
zoomプロパティでフォントサイズは16pxにしながら縮小して小さく表示させる
かなり邪道な方法ですが、「どうしてもこのフォームのフォントサイズは小さくしないといけないけど、拡大はさせたくない」という場合に、フォントサイズは16pxにしておきながら、zoomを使って小さくする方法があります。
input {
font-size: 16px; // フォントサイズは16pxにして拡大しないようにする
zoom: 0.75; // 倍率を指定して表示を小さくする
}見た目上は小さく表示されていますが、実際のフォントサイズは16pxなので、フォーカスしても拡大されません。
しかしこの方法は、レイアウトがかなり面倒になりますし、思わぬ表示崩れを生む可能性があります。
「そこまでする意味があるの?」を考えないと、ただただ時間がかかるだけの実装になってしまいます。
デザインから知っておく必要がある
ウェブサイトを実装したりデザインするときに、なぜこうなるのか知っておかないと、ユーザーに余計なストレスを与えてしまうことになります。
今回の問題は実装観点の話ですが、デザイナーも知っておかないと深く考えずに15pxの指定をしてしまいそうです。
inputの中の文字は普通にデザインしていると通常文字より小さくなってしまう場合がありますが、本当に16px未満にするべきなのかどうか考えてデザインする必要がありそうです。

Dart Sassを使う上で1番基本的なネストやアンパサンドの書き方|Dart Sass入門
Sassのマップ機能を使った変数の管理方法
Google Maps APIでピンをクリックしたときに吹き出しを表示する方法
Visual Studio Codeの基本|概要やインストールから日本語化など最低限の設定方法
Visual Studio Codeのエクスプローラー上でファイル・フォルダの複製ができるようになる拡張機能「Duplicate action」
JavaScriptのtest関数と正規表現でバリデーションチェックを行う
Visual Studio Codeで連番を入力する拡張機能「vscode-input-sequence」
WordPressのメディアライブラリで画像を追加するときに表示される「HTTP エラー」の解消方法
WordPressで「現在メンテナンス中のため、しばらくの間ご利用いただけません。」の状態でログインできなくなった場合の対処法
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Alfredの設定画面でショートカットキーが認識されない場合はKeyboard Maestroの設定を確認しよう
スクロール時に表示領域に画面がくっつくようになる処理をCSSだけで実現する「scroll-snap」
Macの「システム終了」や「スリープ」操作を素早く行う方法
Path Finder 8で使えるツールバーの項目一覧
iPhoneでタッチが一切効かなくなった場合に強制再起動する方法
Path Finderでタグを一斉に追加するタググループ機能
Figmaで簡単に波の素材を生成するプラグイン「Get Waves」
Drive File Streamで接続しているGoogle Drive内の検索をするAlfred Workflowの作成方法
Chrome拡張機能の「Get RSS Feed URLs」でサイトのRSSを簡単に取得
npm install時に「cb() never called!」とエラーが表示されたときの解決法