このページの中身

問い合わせフォームを組む

パターン / パターン集トップ

フォームは入力・検証・確認・完了の4画面で1セットです。入力欄の見た目より、迷いと不安を減らす順序が仕事の大半を占めます。
フォームを4画面で組み上げた実画面
図を大きく見る

画面の並びと使うパターン#

画面パターンこの画面のボタンこの画面の h1置く理由
入力(骨格)フォームの基本形送信ボタンを持っている。消すここが持つ(お問い合わせ)ラベル上置き・1カラムが土台。必須の凡例もここに入っている
入力(章分け)フォームの章分け送信ボタンを持っている。消す骨格をこちらにしたときはここが持つ項目が7つを超えたら章に割る
入力(1行グループ)1行の入力グループ持たない持たない姓名・郵便番号は横に組む。欄ごとにエラー文の置き場を持っている
入力(エラー)エラー表示 と エラーサマリーどちらも送信ボタンを持っている。消す持たないどこで何が起きたかを二重に示す
入力(同意)同意チェック持たない持たないリンクとチェックの操作を衝突させない
入力(送信)ボタン行 か 確認画面 の1画面目塗りを1つだけ残す。文言は「確認へ」持たない出口はここ1つ
確認確認画面 の2画面目塗りを1つ(送信する)+文字だけ(入力へ戻る)ここが持つ(この内容で送ります)入力と確認の2状態が入っている。修正に戻れる道を残す
完了送信完了画面置かない(戻り先は文字リンク)ここが持つ(お問い合わせを受け付けました)受け付けた事実と、次に起きることを書く。ステップは3段目に移る

塗りのボタンは1画面に1つ#

フォームのパターンは、1枚だけ貼っても成立するように、それぞれが自分の送信ボタンを持っています。入力画面は、そのうちの1つだけを残す画面です。基本形・章分け・エラー表示・サマリーを順に足すと、同じ強さのボタンが4つ縦に並びます。読み手はどれが本当の送信なのか決められません。

残す1つは、確認画面を挟むかどうかで決まります。

ほかのパターンから付いてきた button--primary は、貼ったその場で消してください。各パターンのHTMLには、消す目印としてコメントを入れてあります。

「入力内容を消す」のような取り消しは置きません。押し間違いで全部消える操作に、得るものがないためです(ボタンとリンク)。

見出しは骨格が持つ#

ボタンと同じことが h1 にも起きます。入力画面の h1 は、骨格が1つだけ持ちます。骨格は 基本形 と 章分け のどちらか一方です。両方を貼ると h1 が2つ並びます。

あとから足すエラー表示・サマリー・1行グループ・同意・ボタン行は、見出しを持ちません。入力画面に足す部品なので、上に立つ見出しは骨格のものを使います。

画面が入れ替わる確認と完了は別です。確認画面は 確認画面 の2画面目が「この内容で送ります」を、完了画面は 送信完了画面 が「お問い合わせを受け付けました」を、それぞれ自分の h1 として持ちます。3画面とも、見出しを読めばいまどの画面にいるかが分かります。

名前は1系統でそろえる#

4枚を順に足しても命名が割れないように、欄まわりの名前は全パターンで同じです。自分の項目を足すときも、この5つの外に新しい名前を作らないでください。

名前何に付けるか
.form-noteフォームの先頭に置く注記。必須の凡例はこれ
.field1項目のまとまり(ラベル+入力欄+補助文+エラー文)
.reqラベルの中の「必須」の印
.field__errorその欄のエラー文。空のまま先に置いておく
.form-hint書き方の補助説明

横に並べる欄は .field に .field--inline を、不備のある欄は .field--error を重ねます。派生を足すだけなので、章分けでも1行グループでも欄の姿は変わりません。同意チェックも1つの項目なので、.field と .field__error に乗せています。

.field__error は、横に並べた欄にも1つずつ置きます。1行グループ の姓・名・郵便番号・住所には、空の置き場と aria-describedby が入っています。サマリーの markFields() は .field を順に見て、その中の .field__error へ文言を書きます。置き場のない欄は、一覧に名前が出るだけで、欄のそばには何も出ません。

凡例は項目が3つのフォームでも置きます。印だけを出して凡例を省くと、「必須」が何を指すのかを読み手が推測することになります。凡例の言葉は印と同じ「必須」にそろえてください。

このコードで動いている見本です

必須が多くて任意が少ないなら、印を付けるほうを入れ替えます。そのときは凡例も「「任意」の付いた項目は空のままで送れます。」に書き換えます(入力)。

検証は貼るだけでは動かない#

エラーサマリー には、一覧を組み立てる showErrors() と、欄の側へ同じ文言を出す markFields() に加えて、それを呼ぶ submit ハンドラまで入れてあります。貼って「送信する」を押せば、その場で一覧が出て、焦点がそこへ移ります。

自分で書き換えるのは validate() の中だけです。

このコードで動いている見本です

画面に出す検証は、サーバー側の検証の代わりにはなりません。送られてきた値は、受け取る側でもう一度見ます(フォームの検証)。

組む順序#

  1. 出発点のCSS を貼る
  2. フォームの基本形 に自分の項目を入れる。項目は減らせるだけ減らす(入力)
  3. 7項目を超えたら 章分け へ、姓名などは 1行グループ へ。どちらも欄の名前は .field のまま
  4. エラー表示 と サマリー を足し、validate() に自分の項目の規則を書く。文言は「次に何をすればよいか」で書く(フォームの検証)
  5. 同意 → ボタン行 → 確認 → 完了 の順に足す
  6. 入力画面に残った塗りのボタンを数え、1つになるまで消す

確認画面は入力画面の使い回しにしない#

確認画面 は、入力画面にステップ表示を足したものではありません。送るものを読ませる画面なので、操作できる入力欄を置きません。値は文章として見せ、<input type="hidden"> で持ち回します。

ダミー文は1つの店で書いてある#

フォームのダミー文も、LPや記事と同じ「つばめ珈琲焙煎所」でそろえてあります。章分けの選択肢は定期便・豆選び・見学の3つ、確認画面に出る内容は「深煎りの豆を200g、月に2袋で申し込みたいです。」です。言葉を差し替えるときは、選択肢・確認画面の値・完了画面の案内を通しで直してください。選択肢だけ自分の業種にして、確認画面に珈琲の文が残ると、そこで話者が入れ替わります。

確認する#

関連#

この資料は、Webサイトを作るときに引くためのものです。 何のために作ったか。作っているのは AK²Lab。