このページの中身

入力

入力欄で伝えるべきことは3つあります。何の欄か、どう書くか、どこを間違えたか。消えてよいのは例だけです。

プレースホルダーでラベルを代用した悪い例と、ラベルとヘルプテキストを常時表示した良い例の比較図
図を大きく見る
図の中身を文字で読む
  • ✕ プレースホルダーでラベルを代用 入力前 ○ ラベルとヘルプは常時表示
  • メールアドレス(必須)
  • メールアドレス
  • kohara@
  • 入力を始めた瞬間
  • ご連絡先としてお使いのものをご入力ください。
  • kohara@ 形式の例だけをプレースホルダーに入れるのは可。
  • 何の欄か分からなくなる。見直したいときも手がかりがない。 薄い色なのでコントラスト比も基準を下回りやすい。 090-1234-5678
  • ラベルと入力欄は詰める(6px)。
  • 入力欄の幅も情報になる。
  • 郵便番号の欄が本文と同じ幅だと、長い入力を期待されていると誤解される。
  • 項目と項目は空ける(32px)。
  • この差がないと、どのラベルがどの欄か読めない。

ひと目で#

ラベル
項目名。省略できない。常に表示する
ヘルプテキスト
形式の制約や目的の説明。入力の前に見えている必要がある
プレースホルダー
入力を始めると消える。形式の例にだけ使う
テキストフィールド
1行。type の選び方で、モバイルのキーボードが変わる
テキストエリア
複数行。初期の高さが、期待する分量を伝える

使い分け#

ラベル・ヘルプテキスト・プレースホルダー・エラーの置き場所と、入力を始めたときに消えるものを示した図
図を大きく見る
図の中身を文字で読む
  • 4つの文字を、どこに置くか
  • 電話番号 (必須) ラベル 項目名。消さない
  • 例: 09012345678 プレースホルダー 形式の例だけ
  • ハイフンなしでご入力ください ヘルプ 制約の説明。常に見せる
  • 数字だけでご入力ください エラー ヘルプの下に足す
  • 入力を始めると
  • 電話番号 消えるのはプレースホルダーだけ。
  • 項目名も制約の説明も、打っている最中こそ要る。
  • 09012345 プレースホルダーでラベルを代用すると、この瞬間に手掛かりが消える。
伝えたいこと置く場所
項目名ラベル。常に表示
「8文字以上、数字を1つ以上」ヘルプテキスト。常に表示
「例: 090-1234-5678」プレースホルダー。消えてよい
入力が誤っているエラーメッセージ。ヘルプは残したまま足す
入力する内容指定する type
メールアドレスtype="email"
電話番号type="tel"
数値type="number" または inputmode
検索type="search"

間違えやすいところ#

直す例#

架空の案件を1つ例にとります。どこを見て、何をどう直すかを書きます。

通販の会員登録フォームです。電話番号の欄はプレースホルダーに「ハイフンなしで入力」とだけ書いてあり、入力を始めた瞬間に消えます。書き終えた利用者は、ハイフンを入れたかどうかを画面上で確かめられず、いったん全部消して打ち直していました。

直し方は文字の置き場所の整理です。項目名「電話番号」はラベルとして欄の上に、「ハイフンなしでご入力ください」はヘルプテキストとして常時表示へ移し、プレースホルダーには消えてもよい例(09012345678)だけを残します。type="tel" と autocomplete="tel" を添えると、モバイルでは数字キーボードが開き、多くの環境では自動入力が働いて打つ手間そのものが消えます。

確認する#

使えるパターン#

この話が要る場面#

このページが答えになる、現場の困り事です。困り事の側から探すと、同じ場所に着きます。

入力欄のラベルをプレースホルダで代用してよいか

代用しない。入力を始めた瞬間に消えて、何を入れる欄か分からなくなる。ラベルは欄の外に置く。

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

必須と任意のどちらを明示するか

少ないほうを明示する。ほとんど必須なら任意にだけ印を付ける。

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

入力欄の幅をどう決めるか

入る内容の長さに合わせる。郵便番号の欄が氏名と同じ幅だと、何を入れるか伝わらない。

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

入力の自動補完が効かない

autocomplete 属性を正しく付ける。氏名・住所・電話は決められた値がある。

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

この場面のほかの困り事と、そのまま貼れる部品はフォームを作るにまとめてある。逆引きには全188件。

フィールドを組む#

ラベルや必須の設定を切り替えると、下の実物のフィールドがその場で変わります。生成すると、label の結び付け・autocomplete・aria-describedby まで済ませた HTML になって出てきます。

ご連絡先としてお使いのものをご入力ください。

<div class="field">
  <label for="email">メールアドレス<span>(必須)</span></label>
  <input type="email" id="email" name="email" required
         autocomplete="email" aria-describedby="email-help email-error">
  <p id="email-help" class="help">ご連絡先としてお使いのものをご入力ください。</p>
  <p id="email-error" class="error" role="alert"></p>
</div>

<style>
.field { display: grid; gap: var(--space-2); justify-items: start; }
.field input { font: inherit; padding: var(--space-2) var(--space-3);
  border: 1px solid var(--color-border); inline-size: min(100%, 22rem); }
.field .help { margin: 0; font-size: var(--text-sm); color: var(--color-text-muted); }
.field .error { margin: 0; font-size: var(--text-sm); color: var(--color-danger); }
.field input[aria-invalid="true"] { border-color: var(--color-danger); }
</style>

この道具は JavaScript で動きます。無効の場合は、上の使い分けの表に沿って label と aria-describedby を手で結び付けてください。

出典#

関連#

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