DEV Community

Robson Muniz
Robson Muniz

Posted on

8 1

🎬Feedback UI Design | HTML, CSS & JavaScript✨

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>
Enter fullscreen mode Exit fullscreen mode

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;
}
Enter fullscreen mode Exit fullscreen mode

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');
    }
}

Enter fullscreen mode Exit fullscreen mode

Sentry blog image

How to reduce TTFB

In the past few years in the web dev world, we’ve seen a significant push towards rendering our websites on the server. Doing so is better for SEO and performs better on low-powered devices, but one thing we had to sacrifice is TTFB.

In this article, we’ll see how we can identify what makes our TTFB high so we can fix it.

Read more

Top comments (0)

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

đź‘‹ Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay