Hello dev,
Today I have code Form Validation using HTML CSS and JavaScript share with you.
Code HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login Form validation in HTML & CSS</title>
<link rel="stylesheet" href="styles.css">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"/>
</head>
<body>
<div class="wrapper">
<header>Login Form</header>
<form action="#">
<div class="field email">
<div class="input-area">
<input type="text" placeholder="Email Address">
<i class="icon fas fa-envelope"></i>
<i class="error error-icon fas fa-exclamation-circle"></i>
</div>
<div class="error error-txt">Email can't be blank</div>
</div>
<div class="field password">
<div class="input-area">
<input type="password" placeholder="Password">
<i class="icon fas fa-lock"></i>
<i class="error error-icon fas fa-exclamation-circle"></i>
</div>
<div class="error error-txt">Password can't be blank</div>
</div>
<div class="pass-txt"><a href="#">Forgot password?</a></div>
<input type="submit" value="Login">
</form>
<div class="sign-txt">Not yet member? <a href="#">Signup now</a></div>
</div>
<script src="script.js"></script>
</body>
</html>
Code CSS (make file name styles.css)
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Poppins", sans-serif;
}
body {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: #e0e4f7;
}
::selection {
color: #fff;
background: #5372F0;
}
.wrapper {
width: 380px;
padding: 40px 30px 50px 30px;
background: #fff;
border-radius: 5px;
text-align: center;
box-shadow: 10px 10px 15px rgba(0, 0, 0, 0.1);
}
.wrapper header {
font-size: 35px;
font-weight: 600;
}
.wrapper form {
margin: 40px 0;
}
form .field {
width: 100%;
margin-bottom: 20px;
}
form .field.shake {
animation: shake 0.3s ease-in-out;
}
@keyframes shake {
0%,
100% {
margin-left: 0px;
}
20%,
80% {
margin-left: -12px;
}
40%,
60% {
margin-left: 12px;
}
}
form .field .input-area {
height: 50px;
width: 100%;
position: relative;
}
form input {
width: 100%;
height: 100%;
outline: none;
padding: 0 45px;
font-size: 18px;
background: none;
caret-color: #5372F0;
border-radius: 5px;
border: 1px solid #bfbfbf;
border-bottom-width: 2px;
transition: all 0.2s ease;
}
form .field input:focus,
form .field.valid input {
border-color: #5372F0;
}
form .field.shake input,
form .field.error input {
border-color: #dc3545;
}
.field .input-area i {
position: absolute;
top: 50%;
font-size: 18px;
pointer-events: none;
transform: translateY(-50%);
}
.input-area .icon {
left: 15px;
color: #bfbfbf;
transition: color 0.2s ease;
}
.input-area .error-icon {
right: 15px;
color: #dc3545;
}
form input:focus~.icon,
form .field.valid .icon {
color: #5372F0;
}
form .field.shake input:focus~.icon,
form .field.error input:focus~.icon {
color: #bfbfbf;
}
form input::placeholder {
color: #bfbfbf;
font-size: 17px;
}
form .field .error-txt {
color: #dc3545;
text-align: left;
margin-top: 5px;
}
form .field .error {
display: none;
}
form .field.shake .error,
form .field.error .error {
display: block;
}
form .pass-txt {
text-align: left;
margin-top: -10px;
}
.wrapper a {
color: #5372F0;
text-decoration: none;
}
.wrapper a:hover {
text-decoration: underline;
}
form input[type="submit"] {
height: 50px;
margin-top: 30px;
color: #fff;
padding: 0;
border: none;
background: #5372F0;
cursor: pointer;
border-bottom: 2px solid rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
form input[type="submit"]:hover {
background: #2c52ed;
}
Code JavaScript ( Make file name script.js)
const form = document.querySelector("form");
eField = form.querySelector(".email"),
eInput = eField.querySelector("input"),
pField = form.querySelector(".password"),
pInput = pField.querySelector("input");
form.onsubmit = (e) => {
e.preventDefault(); //preventing from form submitting
//if email and password is blank then add shake class in it else call specified function
(eInput.value == "") ? eField.classList.add("shake", "error") : checkEmail();
(pInput.value == "") ? pField.classList.add("shake", "error") : checkPass();
setTimeout(() => { //remove shake class after 500ms
eField.classList.remove("shake");
pField.classList.remove("shake");
}, 500);
eInput.onkeyup = () => { checkEmail(); } //calling checkEmail function on email input keyup
pInput.onkeyup = () => { checkPass(); } //calling checkPassword function on pass input keyup
function checkEmail() { //checkEmail function
let pattern = /^[^ ]+@[^ ]+\.[a-z]{2,3}$/; //pattern for validate email
if (!eInput.value.match(pattern)) { //if pattern not matched then add error and remove valid class
eField.classList.add("error");
eField.classList.remove("valid");
let errorTxt = eField.querySelector(".error-txt");
//if email value is not empty then show please enter valid email else show Email can't be blank
(eInput.value != "") ? errorTxt.innerText = "Enter a valid email address" : errorTxt.innerText = "Email can't be blank";
} else { //if pattern matched then remove error and add valid class
eField.classList.remove("error");
eField.classList.add("valid");
}
}
function checkPass() { //checkPass function
if (pInput.value == "") { //if pass is empty then add error and remove valid class
pField.classList.add("error");
pField.classList.remove("valid");
} else { //if pass is empty then remove error and add valid class
pField.classList.remove("error");
pField.classList.add("valid");
}
}
//if eField and pField doesn't contains error class that mean user filled details properly
if (!eField.classList.contains("error") && !pField.classList.contains("error")) {
window.location.href = form.getAttribute("action"); //redirecting user to the specified url which is inside action attribute of form tag
}
}
I hop this code can help you.