<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<title>Document</title>
<link rel="stylesheet" href="/javascript-select.e31bb0bc.css"></head>
<body>
<div class="app">
<div class="wrap">
<div class="select">
<label class="select__label">
<input type="text" disabled="" placeholder="Введите имя">
<i class="fa fa-chevron-down select__arrow"></i>
</label>
<div class="select__dropdown">
<ul class="select__list">
<li class="select__item">1</li>
<li class="select__item">2</li>
<li class="select__item">3</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">1</li>
</ul>
</div>
</div>
<div class="select">
<label class="select__label">
<input type="text" disabled="" placeholder="Введите имя">
<i class="fa fa-chevron-down select__arrow"></i>
</label>
<div class="select__dropdown">
<ul class="select__list">
<li class="select__item">1</li>
<li class="select__item">2</li>
<li class="select__item">3</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">4</li>
<li class="select__item">1</li>
</ul>
</div>
</div>
</div>
</div>
<script src="/javascript-select.e31bb0bc.js"></script>
</body>
</html>
.app {
padding-top: 5rem;
display: flex;
justify-content: center;
}
.wrap {
width: 500px;
display:flex;
}
.select {
width: 100%;
position: relative;
/* when select open add class OPEN */
}
.select.open .select__dropdown {
display: block;
}
.select.open .select__label {
border-bottom: none;
}
.select.open .select__arrow {
transition: 0.3s ease;
transform: rotate(180deg);
}
.select__label {
display: flex;
align-items: center;
justify-content: space-between;
height: 46px;
padding: 0 15px;
border: 1px solid #797979;
border-radius: 5px;
cursor: pointer;
}
.select__label > input {
position: relative;
z-index: -1;
height: 100%;
min-height: 100%;
background-color: transparent;
border: none;
width: 100%;
margin: 0 20px 0 0;
cursor: pointer;
}
.select__arrow {
transition: 0.3s ease;
position: relative;
z-index: -1;
}
.select__dropdown {
display: none;
position: absolute;
border: 1px solid #797979;
border-radius: 5px;
top: 46px;
left: 0;
right: 0;
max-height: 200px;
overflow-y: auto;
}
.select__list {
padding: 0;
margin: 0;
list-style: 0;
}
.select__item {
padding: 1rem;
border-bottom: 1px solid #797979;
cursor: pointer;
}
.select__item:hover {
background-color: #eee;
transition: 0.3s ease;
}
/*# sourceMappingURL=/javascript-select.e31bb0bc.css.map */
class Select {
constructor(selector) {
this.$select = document.querySelectorAll(selector)[0];
this.$inputField = this.$select.querySelector("input");
this.$label = this.$select.querySelector(".select__label");
this.$body = document.querySelector("body");
this.handleClick();
this.hanldeClickWindow();
}
openState() {
this.$select.classList.add("open");
}
closeState() {
this.$select.classList.remove("open");
}
/* open/close dropdown list */
toggleState() {
if (this.$select.classList.contains("open")) {
this.closeState();
} else {
this.openState();
}
}
handleClick() {
this.$select.addEventListener("mouseup", () => {
this.toggleState();
this.handleValue();
});
}
/* change value of input */
handleValue() {
if (event.target != this.$label) {
this.$inputField.value = event.target.innerText;
}
}
hanldeClickWindow() {
window.addEventListener("click", () => {
if (event.target != this.$label) {
this.closeState();
}
});
}
}
const select = new Select(".select")
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.