フォームでエラーを出す時の挙動を考える

フォームを作っている時に必須項目が入力されなかったらエラー文言を出す、という動作があるが、その時の画面をどのようにつくるべきかちょっと考えた。

実装例

広告バナーやコンテンツが読まれた時に、ガタッとしてしまうとユーザ体験が最悪という説がある。それを前提に、エラー文の場所を確保するUIにしてみた。

f:id:yresy:20190925122802p:plain

挙動としては、一度フォーカスを当てたコンポーネントのフォーカスが外れるとエラー文が出現する。エラー文が出ると以下のようになる。

f:id:yresy:20190925123154p:plain

メリット・デメリット

理想としていたガタッとならない世界は実現することができた。しかし、 エラーが出現していない場合のマージンが空きすぎている。そのため、デザインがあまり揃わなくなってしまった。仮に同じだけのマージンを付与するとコンポーネントに対して広すぎる余白を持つことになってしまう。

世の中の事例と向き合う

Googleや国内のサービスを見ると、細かい挙動の差はあれど、エラー文の余白はなく、選択したあとにフォーム下にエラー文が出現することが多かった。その時は追加されたエラー文の高さだけ、対象より下に配置されたコンポーネントの位置が下がるようになっている。

所感

ページを開いた時のコンテンツの高さ確保の話と、今回のフォームのエラー文の高さの話は別の問題なのだと思った。
バリデーションの実装方法にもよると思うが、フォームの状態( フォーカスされているか ) であったり、入力の内容を見てリアルタイム判定するのであれば、次のフォームに移動した際に、エラー文が出ても動作に支障がでることはほぼない気がするので(視覚的に若干の視点移動は発生するが) デザインを整えるという面でも、最初からエラーの高さを確保する必要はなさそうだと思った。