Custom Select box Dropdown Menu

HTML
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>

<div class="wrapper">
  <div class="select_wrap">
    <ul class="default_option">
      <li>
        <div class="option">
          <p>
            <span class="count"> 0
            </span>
            <span class="text"> Select
            </span>
          </p>
          <span class="icon">
            <ion-icon class="i" name="chevron-down-outline"></ion-icon>
          </span>
        </div>
      </li>
    </ul>
    <ul class="select_ul">
      <li>
        <div class="option">
          <input type="checkbox" class="input" id="cb1">
          <span class="checkmark"></span>
          <span class="text">Travel</span>
        </div>
      </li>
      <li>
        <div class="option">
          <input type="checkbox" class="input" id="cb2">
          <span class="checkmark"></span>
          <span class="text">Food</span>
        </div>
      </li>
      <li>
        <div class="option">
          <input type="checkbox" class="input" id="cb3">
          <span class="checkmark"></span>
          <span class="text">Network</span>
        </div>
      </li>
      <li>
        <div class="option">
          <input type="checkbox" class="input" id="cb4">
          <span class="checkmark"></span>
          <span class="text">Education</span>
        </div>
      </li>
      <li>
        <div class="option">
          <input type="checkbox" class="input" id="cb5">
          <span class="checkmark"></span>
          <span class="text">Private</span>
        </div>
      </li>
      <li>
        <div class="option">
          <input type="checkbox" class="input" id="cb6">
          <span class="checkmark"></span>
          <span class="text">Government</span>
        </div>
      </li>
      <li>
        <div class="option">
          <input type="checkbox" class="input" id="cb7">
          <span class="checkmark"></span>
          <span class="text">Others</span>
        </div>
      </li>
    </ul>
  </div>
</div>
CSS
@import url("https://fonts.googleapis.com/css2?family=Roboto&display=swap");

:root {
  --bg-clr: #7e6ee1;
  --text-clr: #000;
  --primary-clr: #63d36b;
  --secondary-clr: #e4fee7;
  --white: #fff;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  list-style: none;
  font-family: "Roboto", sans-serif;
  user-select: none;
}

body {
  background: var(--bg-clr);
  color: var(--text-clr);
  font-size: 14px;
  display: flex;
  justify-content: center;
  margin-top: 30px;
}

.select_wrap .default_option li .option {
  display: flex;
  align-items: center;
  padding: 10px 20px;
  background: var(--white);
  width: 200px;
  height: 45px;
  border-radius: 3px;
  position: relative;
  cursor: pointer;
  margin-bottom: 15px;
  transition: 0.5s ease;
}

.select_wrap .default_option li .option .count {
  font-weight: bold;
  font-size: 15px;
  display: none;
}

.select_wrap .default_option li .option .icon {
  position: absolute;
  top: 10px;
  right: 20px;
  color: var(--primary-clr);
  font-size: 14px;
  width: 25px;
  height: 25px;
  background: var(--secondary-clr);
  border-radius: 50%;
  line-height: 30px;
  text-align: center;
  transition: 0.5s ease;
}

.select_wrap .select_ul {
  background: var(--white);
  border-radius: 3px;
  width: 200px;
  display: none;
}

.select_wrap .select_ul li .option {
  display: flex;
  align-items: center;
  padding: 10px 20px;
  padding-left: 50px;
  width: 100%;
  height: 40px;
  position: relative;
  cursor: pointer;
  transition: 0.5s ease;
}

.select_wrap .select_ul li:last-child .option {
  margin-bottom: 0;
}

.select_wrap .select_ul li .option:hover {
  background: var(--secondary-clr);
}

.select_wrap .select_ul li:first-child .option {
  border-top-left-radius: 3px;
  border-top-right-radius: 3px;
}

.select_wrap .select_ul li:last-child .option {
  border-bottom-left-radius: 3px;
  border-bottom-right-radius: 3px;
}

.select_wrap .select_ul li .option .input {
  opacity: 0;
  position: absolute;
  top: 0;
  left: 0;
}

.select_wrap .select_ul li .option .checkmark {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  left: 20px;
  width: 20px;
  height: 20px;
  border: 1px solid var(--primary-clr);
  border-radius: 3px;
  transition: 0.5s ease;
}

.select_wrap .select_ul li .option .checkmark:before {
  content: "";
  position: absolute;
  top: -1px;
  left: -1px;
  width: 21px;
  height: 21px;
  background: var(--primary-clr);
  border-radius: 3px;
  display: none;
}

.select_wrap .select_ul li .option .checkmark:after {
  content: "";
  position: absolute;
  top: 5px;
  left: 4px;
  width: 7px;
  height: 2px;
  border: 2px solid;
  border-color: transparent transparent var(--white) var(--white);
  transform: rotate(-45deg);
  display: none;
}

.select_wrap .default_option.active + .select_ul {
  display: block;
}

.select_wrap .default_option.active .option,
.select_wrap .default_option .option:hover{
 background: var(--primary-clr);
  color: var(--white);
}

.select_wrap .default_option.active .option .icon{
  transform: rotate(180deg);
}


.select_wrap .select_ul li .option .input:checked ~ .checkmark:before,
.select_wrap .select_ul li .option .input:checked ~ .checkmark:after {
  display: block;
}

.select_wrap .select_ul li .option.active .text{
  color: var(--primary-clr);
}
JS
var default_option_item = document.querySelector(".default_option .option");

var default_option_text = document.querySelector(".default_option .text");
var default_option_count = document.querySelector(".default_option .count");

var select_ul_item = document.querySelectorAll(".select_ul .option");

var input_items = document.querySelectorAll(".select_ul .input");

default_option_item.addEventListener("click", function () {
  this.closest(".default_option").classList.toggle("active");
});

select_ul_item.forEach(function (item) {
  item.addEventListener("click", function (event) {
    item.classList.toggle("active");

    if (item.classList.contains("active")) {
      item.children[0].checked = true;
    } else {
      item.children[0].checked = false;
    }

    var count = 0;
    input_items.forEach(function (input_item) {
      if (input_item.checked === true) {
        count++;
        default_option_count.style.display = "inline-block";
        default_option_count.textContent = count;
        default_option_text.textContent = "Items Selected";
      } else if (input_item.checked === false && count === 0) {
        default_option_count.style.display = "none";
        default_option_count.textContent = "";
        default_option_text.textContent = "Select";
      }
    });
  });
});

/* All credits to: https://www.youtube.com/watch?v=1cRMxbE5ZFE */

Autor: Compositu

Publicado: 23/04/2023

Compartir Elemento Web

Donar a Compositu
Otras formas de ayudar
  • Compártelo en tus redes sociales.
  • Recomienda los elementos.
  • Regístrate Aquí
  • Deja tu comentario agradeciendo el aporte.

Descarga el código completo del Elemento Web y archivos necesarios (imágenes, librerias, plugins, frameword, etc)

Deja tu comentario