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未満にするべきなのかどうか考えてデザインする必要がありそうです。

Vue Routerでページ遷移後にトーストを表示させる方法
サーバーのアップロードファイルの最大容量の確認と変更方法
JavaScriptで日付をコピーして計算すると、コピー元の日付も変わってしまう場合の対処法
Visual Studio CodeでToDoコメントを一覧で表示する拡張機能「Todo Tree」
スクロール時に表示領域に画面がくっつくようになる処理をCSSだけで実現する「scroll-snap」
Nuxt.jsの「layouts」を使用してレイアウトの共通化を行う方法|Nuxt.jsの基本
EJSのincludeで別ファイルを読み込むときの画像パスを指定する方法
CSSのカスタムプロパティ(変数機能)の使い方
SafariでFacebookのPage Pluginに「リクエストを処理できませんでした」とダイアログが表示される問題
.htaccessを使って、httpからhttpsへリダイレクトする設定方法
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Google タグマネージャー(GTM)の設定をして、コードを触らなくても確認用スクリプトの設定ができるようにする
テキストエディタ.app起動時に表示されるダイアログボックスを非表示にする方法
Keynote × Keyboard Maestroでスライド作りを徹底的にラクにするマクロサンプル
Sketchの図形周りの基本操作|図形の作成方法から描画に関する細かい部分まで
iPhoneでタッチが一切効かなくなった場合に強制再起動する方法
Search Consoleのカバレッジで「送信された URL に noindex タグが追加されています」と表示された時の対処法
Stationの「My custom apps」機能を使って好きなウェブサイトをStationに追加する
新しいMacBook Proを購入して移行するときにやること|コーディングに必要な開発環境を整える
個人ブログにコメント欄は必要なのかどうか
Googleアナリティクスのタグが二重で設定されていないか見分ける方法