<form class="form">
  <label for="email">メールアドレス</label>
  <input type="email" id="email" name="email" placeholder="name@example.com" required>
</form>
* {
  box-sizing: border-box;
  --valid: 76, 175, 80;
  --error: 217, 4, 41;
}

body {
  font-family: "游ゴシック Medium", YuGothic, YuGothicM,
    "Hiragino Kaku Gothic ProN", Meiryo, sans-serif;
  font-size: 16px;
  display: grid;
  min-height: 100dvh;
  color: #3d424b;
  background-color: #f6f6f6;
  place-content: center;
}

.form {
  width: 340px;
  background-color: #fff;
  padding: 20px;
  border-radius: 5px;
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}

.form:has(input:valid) {
  color: rgb(var(--valid));
  background-color: rgba(var(--valid), 0.1);
}

input:valid {
  border-color: rgb(var(--valid));
}

.form:has(input:invalid:not(:placeholder-shown, :focus)) {
  color: rgb(var(--error));
  background-color: rgba(var(--error), 0.1);
}

input:invalid:not(:placeholder-shown, :focus) {
  border-color: rgb(var(--error));
}

label {
  display: block;
  margin-bottom: 10px;
  font-size: 14px;
}

input {
  width: 100%;
  padding: 10px;
  border: 2px solid #ccc;
  border-radius: 4px;
  font-size: 14px;
}

input:focus {
  outline: none;
  border: 2px solid #3b82f6;
  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);
}

input::placeholder {
  color: #999;
}

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css

External JavaScript

This Pen doesn't use any external JavaScript resources.