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

コーディング時に「アノテーションコメント」を使ってコードを見やすく管理する
Movable TypeでAssetURLやEntryPermalink・ContentPermalinkで出力されるパスを絶対パスから相対パスに変える
pointer-eventsプロパティでクリックイベントを無効化にする|気になるCSSプロパティ
WordPressのwp_is_mobile()で条件分岐をするときは、キャッシュの設定に注意
コーディング時にちゃんと意識したい複数語の連結方法一覧(キャメルケース・スネークケース・ケバブケース)
Vue CLIでVue.jsの開発環境をセットアップするまでの流れ
SourceTreeの外部Diff / MergeツールをKaleidoscopeに設定する
gulpのwatch機能を使って、監視ファイルに変更があった時にタスクを実行する
gulpでPostCSSを使う方法
サーバーのアップロードファイルの最大容量の確認と変更方法
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
MacとiPadを同じマウスやキーボードで操作できる「ユニバーサルコントロール」
Transmit 5のPanic Syncでサーバー情報が同期されないときの対処法
Alfredで「自分のブログ内検索」を行う簡易的なWorkflowの作り方
1番基本的な瞑想方法「サマタ瞑想」で自分の意識を1つのことに集中させる
JavaScriptのテンプレートリテラル内で条件分岐を行う方法
文章を書くことだけに集中できる、高機能でシンプルなデザインのテキストエディタ「Ulysses」
gulp-plumberとgulp-notifyでgulpエラー時にデスクトップで通知がくるようにする
「EWWW Image Optimizer」を使ってWordPressをWebPに対応する方法
Path Finder 8.5がリリース!ファイル圧縮形式の種類が増えたり、細かい機能がいくつか追加