【CSS】疑似クラス:user-valid と :user-invalid について

どうも、くまだです。

疑似クラス:user-valid と :user-invalid についてのメモ。

:user-valid と :user-invalid について

:user-vaildと:user-invalidは、フォーム要素のバリデーション状態をユーザーフレンドリーに表示するためのCSS疑似クラスです。

コードは以下になります。

    <div class="container">

        <form class="demo-form">
            <div class="form-group">
                <label>
                    メールアドレス(必須)
                    <input type="email" name="email" required placeholder="foo@example.com" class="demo-input">
                </label>
                <p class="hint">有効なメールアドレスを入力すると緑色の枠線、無効な場合は赤色の枠線が表示されます。</p>
            </div>

            <div class="form-group">
                <label>
                    パスワード(8文字以上)
                    <input type="password" name="password" required minlength="8" placeholder="8文字以上"
                        class="demo-input">
                </label>
                <p class="hint">8文字以上入力すると緑色、8文字未満でフォーカスを外すと赤色になります。</p>
            </div>

            <div class="form-group">
                <label>
                    URL
                    <input type="url" name="url" placeholder="https://example.com" class="demo-input">
                </label>
                <p class="hint">有効なURLを入力すると緑色になります。</p>
            </div>
        </form>
    </div>
.container {
  padding: 40px;
  max-width: 900px;
  margin: 0 auto;
}


/* デモフォーム */
.demo-form {
  background-color: #f9f9f9;
  padding: 2em;
  border-radius: 8px;
  border: 1px solid #e0e0e0;
  margin: 2em 0;
}

.form-group {
  margin-bottom: 2em;
}

.form-group label {
  display: block;
  font-weight: 600;
  margin-bottom: 0.5em;
  color: #2a2a2a;
}

.demo-input {
  width: 100%;
  padding: 0.75em;
  font-size: 1em;
  border: 2px solid #000;
  border-radius: 4px;
  transition: border-color 0.3s ease;
  box-sizing: border-box;
}

.demo-input:focus {
  outline: none;
  border-color: #3b82f6;
}

.hint {
  font-size: 0.9em;
  color: #666;
  margin-top: 0.5em;
  font-style: italic;
}



/* :user-valid と :user-invalid のスタイル */
.demo-input:user-valid {
  border: 2px solid #16a34a; /* 緑 */
}

.demo-input:user-invalid {
  border: 2px solid #dc2626; /* 赤 */
}

/* デフォルトのスタイル */
input {
  border: 2px solid #000;
}

See the Pen user-valid,user-invalid by kuma0605 (@kuma0605) on CodePen.

:validや:invalidはページ読み込み時に適用されてしまいますが、:user-validや:user-invalidはユーザーがフォームに入力した後、検証の結果有効か無効か判定します。

:user-validはフォーム入力後の検証で有効だったら適用されます。対して、user-invalidは無効だったら適用されます。

ここまで読んでくださりありがとうございました。

この記事を書いた人