フォームを作る
この場面の困り事と、そのまま使えるコード。全9件。 足りなければ、行末のページへ進む。
このページの中だけを絞ります。ページは移りません。
入力欄のラベルをプレースホルダで代用してよいか
代用しない。入力を始めた瞬間に消えて、何を入れる欄か分からなくなる。ラベルは欄の外に置く。入力
<label for="email">メールアドレス</label>
<input id="email" name="email" type="email" autocomplete="email">必須と任意のどちらを明示するか
少ないほうを明示する。ほとんど必須なら任意にだけ印を付ける。入力
<label>会社名 <span class="optional">任意</span></label>入力欄の幅をどう決めるか
入る内容の長さに合わせる。郵便番号の欄が氏名と同じ幅だと、何を入れるか伝わらない。入力
input[name="zip"] { max-inline-size: 8rem; }
input[name="name"] { max-inline-size: 20rem; }エラーの伝え方が分からない
何が悪いかと、どう直すかを両方書く。入力欄のそばに置き、色だけに頼らない。フォームの検証
<div class="field field--error">
<label for="email">メール</label>
<input id="email" type="email" aria-invalid="true" aria-describedby="email-err">
<p class="field__error" id="email-err" role="alert">@ を含む形式で入力してください</p>
</div>エラーをいつ出すか
入力中は出さない。欄から離れたときか、送信を押したときに出す。フォームの検証
input.addEventListener('blur', validate);
form.addEventListener('submit', validateAll);送信後に何も起きないと言われる
処理中の表示と、完了の表示を分けて出す。押した直後にボタンを無効化して二重送信を防ぐ。知らせる
btn.disabled = true;
btn.textContent = '送信中…';
// 完了後 → btn.textContent = '送信完了';項目が多くて離脱される
本当に要る項目だけ残す。減らせないなら段階に分け、いま何段目かを見せる。情報設計
<!-- 段階フォーム -->
<p>ステップ 2 / 4</p>
<progress value="2" max="4"></progress>入力の自動補完が効かない
autocomplete 属性を正しく付ける。氏名・住所・電話は決められた値がある。入力
<input name="name" autocomplete="name">
<input name="tel" autocomplete="tel">
<input name="address" autocomplete="street-address">確認画面は要るか
取り消せない操作なら要る。取り消せるなら、送ってから直せるほうが早い。情報設計
<!-- 取り消せない操作 -->
<form action="/confirm" method="post">...</form>この場面で貼れるもの#
答えを読んだら、ここから完成形を持ち帰れます。
フォーム基本レイアウトラベル上・入力下の縦積み。必須は文字で示し色だけに頼らない
エラー付き入力欄どの欄が問題かを文字で示し、aria-invalidで支援技術にも伝える
ボタン行主操作は左(LTR)、キャンセルは控えめに。1画面1つの主ボタン
確認ステップ付きフォーム入力→確認→完了の3段。確認画面は入力欄を置かず、値を文章で見せる
フォームの章分け長い問い合わせは fieldset と legend で章に分ける。必須の凡例は先頭に置く
エラーサマリー送信時の不備は先頭に一覧で出す。各項目から該当欄へ飛べるようにする
送信完了画面3段の最後の画面。受け付けた事実を h1 で明言し、次に起きることと戻り先を示す
同意チェックポリシーへのリンクは label の外に出し、チェック操作との衝突を避ける
1行の入力グループ郵便番号と住所・姓と名を1行に並べる。欄ごとに label と autocomplete を付ける