🎬Feedback UI Design | HTML, CSS & JavaScript✨
Tags: html, css, javascript, feedback
Published: 2021-09-25 10:19:35

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.

---
{% youtube IbNju2-eSHg %}

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

```HTML
<!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

```CSS
@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
```JavaScript
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');
	}
}

```