<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;
}
This Pen doesn't use any external JavaScript resources.