HTML Code
<div class="wrapper">
<div class="dropdown">
<input type="text" placeholder="Select option" readonly />
<ul class="options">
<li class="option">UI Design</li>
<li class="option">HTML</li>
<li class="option">CSS</li>
<li class="option">JS</li>
</ul>
</div>
</div>
CSS Code
@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;800&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Urbanist:wght@500&display=swap");
*,
::before,
::after {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Poppins", sans-serif;
}
.wrapper {
position: relative;
}
.dropdown {
width: 300px;
height: 60px;
background: #FFF;
border-radius: 7px;
position: relative;
top: -80px;
@media (max-width: 480px) {
width: 100%;
}
&::before {
content: "";
position: absolute;
right: 16px;
top: calc(50% - 6px);
z-index: 9999;
width: 12px;
height: 12px;
border: 2px solid #999;
border-top: transparent;
border-right: transparent;
transform: rotate(-45deg) translateY(-50%);
transform-origin: center;
pointer-events: none;
transition: all 0.25s;
}
input {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: 30px 16px;
font-size: 18px;
color: #333;
user-select: none;
border: 1px solid #CCC;
border-radius: 9px;
outline: 0;
}
.options {
list-style: none;
position: absolute;
overflow: hidden;
width: 100%;
top: 70px;
font-size: 16px;
background: #FFF;
border: 1px solid #DDD;
border-radius: 9px;
outline: none;
opacity: 0;
transform: translateY(-50px);
transition: all 0.35s;
visibility: hidden;
}
}
.dropdown {
.options {
.option {
padding: 14px 14px;
transition: all 0.25s ease;
color: #292d34;
&:not(:last-of-type) {
margin-bottom: 5px;
}
&:hover {
color: #FFF;
background: #488AF5;
}
}
}
&.opened {
&::before {
top: 50%;
transform: rotate(135deg) translateY(50%);
border-color: #488AF5;
}
input {
border-color: #488AF5;
color: #488AF5;
}
.options {
opacity: 1;
visibility: visible;
transform: translateY(0);
border: 1px solid #EEE;
}
}
}
JS Code
// Variables
const dropdown = document.querySelector('.dropdown');
const input = document.querySelector('input');
const listOfOptions = document.querySelectorAll('.option');
const body = document.body;
// Functions
const toggleDropdown = (event) => {
event.stopPropagation();
dropdown.classList.toggle('opened');
};
const selectOption = (event) => {
input.value = event.currentTarget.textContent;
};
const closeDropdownFromOutside = () => {
if (dropdown.classList.contains('opened')) {
dropdown.classList.remove('opened');
}
};
// Event Listeners
body.addEventListener('click', closeDropdownFromOutside);
listOfOptions.forEach((option) => {
option.addEventListener('click', selectOption);
});
dropdown.addEventListener('click', toggleDropdown);