:user-valid 擬似クラスと :user-invalid 擬似クラス

:user-valid

対応ブラウザ

  • 119
  • 119
  • 88
  • 16.5

ソース

:user-invalid

対応ブラウザ

  • 119
  • 119
  • 88
  • 16.5

ソース

ユーザー入力は、どのユーザー インターフェースでも特に機密性の高い懸念事項の 1 つです。使用可能なアプリケーションは、ユーザーが入力ミスを確認、理解、修正できるようにしなければなりません。:user-valid 疑似クラス セレクタと :user-invalid 疑似クラス セレクタは、ユーザーが入力を変更した後にのみ誤りに関するフィードバックを提供することで、入力検証のユーザー エクスペリエンスを改善します。これらの新しいセレクタを使用すると、ユーザーが変更した入力を追跡するためにステートフル コードを記述する必要がなくなります。

ユーザー操作の疑似クラス セレクタ

:user-valid 疑似クラス セレクタと :user-invalid 疑似クラス セレクタは、既存の :valid 疑似クラスと :invalid 疑似クラスに似ています。どちらも、現在の値が検証の制約を満たしているかどうかに基づいて、フォーム コントロールと一致します。ただし、新しい :user-valid 疑似クラスと :user-invalid 疑似クラスには、ユーザーが入力をかなり操作した後にのみ、フォーム コントロールを照合するという利点があります。

必須の空のフォーム コントロールは、ユーザーがページを操作していない場合でも :invalid に一致します。ただし、ユーザーが入力を変更して無効な状態のままにするまで、同じフォーム コントロールは :user-invalid と一致しません。

:user-valid 疑似クラスと :user-invalid 疑似クラスを使用する

これらの疑似クラスを使用して、入力コントロール、選択コントロール、テキスト領域コントロールのスタイルを設定します。次の例をご覧ください。

input:user-valid,
select:user-valid,
textarea:user-valid {
  border-color: green;
}

input:user-invalid,
select:user-invalid,
textarea:user-invalid {
  border-color: red;
}
<input required="required" />

<select required="required">
  <option value="">Choose an option</option>
  <option value="1">One</option>
</select>

<textarea required="required"></textarea>

比較のために 3 つのスクリーンショットを並べた画像。各スクリーンショットは、同じ入力、選択、テキスト領域のコントロールがあるウェブフォームを示しています。最初のスクリーンショットは、ユーザー入力前の初期状態のフォームを示しています。コントロールの枠線はグレーで表示され、各コントロールが :invalid 疑似クラス セレクタに現在一致することを示すヘルプテキストを以下に示します。2 つ目のスクリーンショットは、ユーザーが各コントロールを入力した後の同じフォームを示しています。コントロールの枠線は緑色です。下記のヘルプテキストでは、各コントロールが現在、:valid と :user-valid の両方の疑似クラスセレクタに一致することについて説明しています。最後の 3 枚目のスクリーンショットは、ユーザーがすべての入力を削除した後の同じフォームを示しています。コントロールの枠線は赤色です。以下のヘルプテキストでは、現在、各コントロールが :invalid と :user-invalid の両方の疑似クラス セレクタに一致することについて説明しています。

セレクタは、ユーザーの操作と検証制約の組み合わせに基づいて照合されます。次のデモを操作して、実際の動作を確認してください。

少ないコードでユーザー エクスペリエンスを向上

これらの疑似クラスがない場合、:user-valid:user-invalid によって実現されるユーザー エクスペリエンスを実現するには、追加のステートフル コードを記述する必要がありました。このコードでは、初期値、入力の現在のフォーカス状態、ユーザーが値を変更した範囲を追跡し、追加の妥当性チェックを実行して、最終的にスタイル設定用に選択するクラスを追加する必要がありました。これらすべてを自動的に処理できるよう、ブラウザに依存できるようになりました。

その他のリソース

Behzad Ghaffarian 氏(Unsplash)のカバー写真