ui
password strength meter / password strength indicator
パスワード欄に1文字打つたびに強度を判定し、入力欄の下のバーが「短すぎる→弱い→ふつう→強い」の4段で伸びながら赤→橙→黄→緑へ変わる演出。注意書きを読ませなくても、あと何を足せばいいかが打っている最中に伝わる。肝は段階を4つ程度に丸めることと、バーと同じ場所に言葉でも段階を書くこと。
02 — Prompt template
03 — Params
duration(伸び縮みと色の遷移 s) — 範囲 0〜0.6 / 初期 0.15
段階が変わったときにバーの長さと色が移る時間。0.12〜0.2sが打鍵の速さに追いつく(観察元は0.15s)。0.4sを超えると、速く打つ人には前の段階の色が遅れて付いてくる。0で瞬時に切り替え。style(メーターの形) — 選択: bar / segments(初期: bar)
barは1本のバーが段階ごとの長さまで伸びる(観察元。4段の長さは全体の34%・57%・71%・100%)。segmentsは4つのマスが左から点く。マスは「残りあと何段か」が数えられ、barは細い場所でも収まる。debounce(判定までの待ち ms) — 範囲 0〜600 / 初期 0
最後に打ってから判定するまでの間。0は1打ごとに即判定(観察元は keyup ごと)。判定が重い・段階が細かく行き来してチラつくなら150〜300ms。400msを超えると打ち終わってからメーターが動くので、打ちながら直す手掛かりにならない。
04 — Vocab
パスワード強度推定(zxcvbn) — 辞書の単語・キーボード配列・日付・繰り返しなどを見て、総当たりで破られるまでの推定回数から 0〜4 のスコアを返すライブラリ。「記号を1つ入れたか」だけのルールより実際の破られにくさに近い。WordPress の強度メーターもこれを使う。
段階表示(discrete levels) — 連続値をそのまま見せず、少数の段階に丸めて見せること。4段程度なら「あと1段で緑」が一目で読め、1文字ごとにバーが細かく揺れない。
インライン検証(inline validation) — 送信を待たずに、入力しているその場で結果を返すフォームの作り。直す場所と直すタイミングが一致するので、送信後のエラー一覧より手戻りが少ない。
デバウンス(debounce) — 連続するイベントのうち、最後の1回から一定時間経ってから処理すること。採点が重いときや、段階が行き来してチラつくときに入れる。
aria-describedby — 入力欄に補足説明の要素を結び付ける属性。スクリーンリーダーが欄に入ったときに強度の説明を一緒に読み上げる。
05 — NG → OK examples
NG
言い方: 「「パスワードの強さが分かるメーターを付けて」」
なぜNG: 送信時にだけ「弱いパスワードです」とエラーを出す実装や、文字数に比例してバーが伸びるだけの実装が返ってきやすい。文字数比例だと「aaaaaaaaaaaa」が満タンになる。色だけで段階を示して文字が無いことも多く、色覚によっては赤と緑の違いが読めない。width をアニメーションさせて1打ごとにリフローする実装も普通に返ってくる。
OK
言い方: 「「password strength meterを。inputのたびにzxcvbnで採点、0〜1短すぎる/2弱い/3ふつう/4強いの4段に丸める。入力欄の真下に高さ6pxのバー、長さは34/57/71/100%をscaleXとorigin leftで、赤→橙→黄→緑を0.15sで遷移。段階名を文字でも出してaria-live=polite、reduced-motionでは即時切り替え」」
なぜOK: 採点の出どころ(推定ライブラリ)と段階への丸め方・各段の長さと色・遷移時間・動かすプロパティまで指定している。「文字でも出す」が無いと色だけのメーターになり、「丸める」が無いと文字数比例の当てにならないバーになる。
