Multi Select
Home
Snippets
Multi Select
HTML
CSS
JS
<div class="multi-select" id="multiSelect"> <div class="selected-items" id="selectedItems"></div> <div class="dropdown-arrow">▾</div> <div class="dropdown" id="dropdown"> <div data-value="apple">Apple</div> <div data-value="banana">Banana</div> <div data-value="cherry">Cherry</div> <div data-value="grape">Grape</div> <div data-value="mango">Mango</div> </div> </div>
body { height: 100vh; margin: 0; font-family: sans-serif; background: #f7f7f7; display: flex; justify-content: center; align-items: center; } .multi-select { width: 350px; border: 1px solid #ccc; border-radius: 6px; padding: 10px 40px 10px 10px; background: white; position: relative; cursor: pointer; } .selected-items { display: flex; flex-wrap: wrap; gap: 5px; min-height: 40px; } .selected-items span { background: #007BFF; color: white; padding: 5px 10px; border-radius: 5px; font-size: 14px; display: flex; align-items: center; gap: 5px; } .selected-items span i { cursor: pointer; } .dropdown { display: none; position: absolute; top: 100%; left: 0; right: 0; background: white; border: 1px solid #ccc; max-height: 150px; overflow-y: auto; z-index: 100; } .dropdown div { padding: 10px; cursor: pointer; } .dropdown div:hover { background: #f0f0f0; } .multi-select.active .dropdown { display: block; } .dropdown-arrow { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); pointer-events: none; font-size: 18px; transition: transform 0.3s ease; } .multi-select.active .dropdown-arrow { transform: translateY(-50%) rotate(180deg); }
const multiSelect = document.getElementById('multiSelect'); const dropdown = document.getElementById('dropdown'); const selectedItems = document.getElementById('selectedItems'); const selectedValues = new Set(); multiSelect.addEventListener('click', () => { multiSelect.classList.toggle('active'); }); dropdown.addEventListener('click', (e) => { const value = e.target.getAttribute('data-value'); const label = e.target.textContent; if (!selectedValues.has(value)) { selectedValues.add(value); const tag = document.createElement('span'); tag.innerHTML = `${label} <i data-remove="${value}">×</i>`; selectedItems.appendChild(tag); } }); selectedItems.addEventListener('click', (e) => { if (e.target.dataset.remove) { const valueToRemove = e.target.dataset.remove; selectedValues.delete(valueToRemove); e.target.parentElement.remove(); } }); document.addEventListener('click', (e) => { if (!multiSelect.contains(e.target)) { multiSelect.classList.remove('active'); } });
Ad #1
Ad #2
Scroll to Top