Forms & inputs
Search Bar with Clear Button
A pill-shaped search input with a leading icon and a clear button that appears once text has been typed.
<div class="searchbar-wrap">
<svg class="searchbar-icon" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="#9ca3af" stroke-width="2"><circle cx="11" cy="11" r="7"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
<input class="searchbar-input" type="text" placeholder="Search lessons">
<button class="searchbar-clear" type="button" aria-label="Clear search">
<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="#6b7280" stroke-width="2.5"><line x1="6" y1="6" x2="18" y2="18"></line><line x1="6" y1="18" x2="18" y2="6"></line></svg>
</button>
</div>
.searchbar-wrap {
box-sizing: border-box;
width: 280px;
display: flex;
align-items: center;
gap: 8px;
background-color: #f9fafb;
border: 1.5px solid #e5e7eb;
border-radius: 999px;
padding: 10px 14px;
transition: border-color 0.2s ease, background-color 0.2s ease;
font-family: system-ui, -apple-system, sans-serif;
}
.searchbar-wrap:focus-within {
border-color: #3b82f6;
background-color: #ffffff;
}
.searchbar-icon {
flex-shrink: 0;
}
.searchbar-input {
flex: 1;
border: none;
outline: none;
background: transparent;
font-size: 14px;
color: #111827;
}
.searchbar-clear {
display: none;
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
border-radius: 50%;
border: none;
background-color: #e5e7eb;
cursor: pointer;
flex-shrink: 0;
}
.searchbar-clear-visible {
display: flex;
}
var searchbarInput = document.querySelector('.searchbar-input');
var searchbarClear = document.querySelector('.searchbar-clear');
searchbarInput.addEventListener('input', function () {
if (searchbarInput.value.length > 0) {
searchbarClear.classList.add('searchbar-clear-visible');
} else {
searchbarClear.classList.remove('searchbar-clear-visible');
}
});
searchbarClear.addEventListener('click', function () {
searchbarInput.value = '';
searchbarClear.classList.remove('searchbar-clear-visible');
searchbarInput.focus();
});