Create from scratch a “Responsive Login and Registration Form” using just html, css and JavaScript…
We’re also going to use @media queries to make it responsive in whatever screen you want display it.
It’s a quite simple project to do, but at the same time it will teach you a lot of cool thing on css like animation, grid and how to make it responsive.
Content Layer
.html file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"
integrity="sha512-1ycn6IcaQQ40/MKBW2W4Rhis/DbILU74C1vSrLJxCq57o941Ym01SwNsOMqvEBFlcgUa6xLiPY/NS5R+E6ztJQ=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<title>Feedback Ui Design</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="panel" class="panel-container">
<strong>How satisfied are you with our <br>
Customer Support Performace</strong>
<div class="ratings-container">
<div class="rating">
<img src="https://image.flaticon.com/icons/svg/187/187150.svg" alt="">
<small>Unhappy</small>
</div>
<div class="rating">
<img src="https://image.flaticon.com/icons/svg/187/187136.svg" alt="">
<small>Neutral</small>
</div>
<div class="rating active">
<img src="https://image.flaticon.com/icons/svg/187/187133.svg" alt="">
<small>Satisfied</small>
</div>
</div>
<button class="btn" id="send">Send Review</button>
</div>
<script src="app.js"></script>
</body>
</html>
Presentation Layer
.css file
@import url('https://fonts.googleapis.com/css2?family=Montserrat&display=swap');
* {
box-sizing: border-box;
}
body {
background-color: #f2f9f2;
font-family: 'Montserrat', sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
overflow: hidden;
margin: 0;
}
.panel-container {
background-color: #fff;
box-shadow: 0 0 10px rgba(0, 0, 0, .3);
border-radius: 4px;
font-size: 90%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 30px;
max-width: 400px;
}
.panel-container strong {
line-height: 20px;
}
.ratings-container {
display: flex;
margin: 20px 0;
}
.rating {
flex: 1;
cursor: pointer;
padding: 20px;
margin: 10px 5px;
}
.rating:hover,
.rating.active {
border-radius: 4px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
.rating small {
color: #555;
display: inline-block;
margin: 10px 0 0;
}
.rating:hover small,
.rating:active small {
color: #111;
}
.btn {
background-color: #302d2b;
color: #fff;
border: 0;
border-radius: 4px;
padding: 12px 30px;
cursor: pointer;
}
.btn:focus {
outline: none;
}
.btn:active {
transform: scale(.98);
}
.fa-heart {
color: red;
font-size: 30px;
margin-bottom: 10px;
}
Behavior Layer
.JS file
const ratings = document.querySelectorAll('.rating');
const rContainer = document.querySelector('.ratings-container');
const sendBtn = document.querySelector('#send');
const panel = document.querySelector('#panel');
let selectedRating = 'Satisfied';
rContainer.addEventListener('click', (e) => {
if (e.target.parentNode.classList.contains('rating')) {
removeActive();
e.target.parentNode.classList.add('active');
selectedRating = e.target.nextElementSibling.innerHTML;
}
});
sendBtn.addEventListener('click', (e) => {
panel.innerHTML = `
<i class='fas fa-heart'></i>
<strong>Thank You!</strong>
<br>
<strong>Feedback: ${selectedRating}</strong>
<p>We'll use your feedback to improve our customer support</p>
`;
});
function removeActive() {
for (let i = 0; i < ratings.length; i++) {
ratings[i].classList.remove('active');
}
}
Top comments (0)