검색창

Search bar

돋보기 아이콘과 함께 텍스트를 입력해 콘텐츠를 찾는 입력 필드. 흔히 입력하는 즉시 아래로 제안이 나타납니다.

다른 이름: Search fieldSearch input
···
html
<form role="search" class="sbw">
  <label for="sbi" class="sr">검색</label>
  <div class="sbin"><span class="sbico">⌕</span><input id="sbi" placeholder="검색어를 입력하세요"></div>
  <ul class="sblist" id="sbl">
    <li>리퀴드 글래스</li><li>글래스모피즘</li>
  </ul>
</form>
css
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
.sbw{width:min(220px,92%)}
.sbin{display:flex;align-items:center;gap:7px;border:1px solid var(--line);border-radius:9px;padding:8px 11px;background:var(--surface)}
.sbico{color:var(--muted);font-size:13px}
#sbi{border:0;outline:none;background:none;color:var(--fg);font-size:12px;flex:1}
.sblist{list-style:none;margin:6px 0 0;padding:5px;background:var(--surface);border:1px solid var(--line);border-radius:9px;
  opacity:0;transform:translateY(-4px);transition:opacity .18s,transform .18s}
.sblist[data-open]{opacity:1;transform:translateY(0)}
.sblist li{padding:6px 8px;font-size:12px;color:var(--muted);border-radius:6px}
.sblist li:first-child{color:var(--fg)}
js
const input = document.getElementById('sbi'), list = document.getElementById('sbl');
const word = '글래스';
let auto = true;
input.addEventListener('input', () => auto = false);
function loop() {
  if (!auto) return;
  input.value = ''; list.removeAttribute('data-open');
  let i = 0;
  const type = setInterval(() => {
    if (!auto) return clearInterval(type);
    i++; input.value = word.slice(0, i);
    if (i === 2) list.setAttribute('data-open', '');
    if (i >= word.length) { clearInterval(type); setTimeout(() => { if (auto) { list.removeAttribute('data-open'); setTimeout(loop, 1000); } }, 900); }
  }, 260);
}
setTimeout(loop, 500);

<form role="search">로 감싸 이 입력이 검색용이라는 걸 알리고, 입력에는 시각적으로 숨겨도 되는 <label>을 반드시 연결합니다(placeholder만으로는 레이블을 대신할 수 없습니다 — 입력을 시작하면 사라져 버립니다). 실시간 제안 목록은 aria-live 영역이나 콤보박스 패턴으로 갱신을 알립니다.

입력하며 제안이 뜨는 검색창은 사실 콤보박스의 한 형태이지만 목적이 다릅니다. 콤보박스는 "정해진 값 하나를 고르는" 폼 컨트롤에 가깝고, 검색창은 자유 텍스트 쿼리를 던져 결과 페이지로 이동하는 데 초점이 있어 후보 목록에 없는 단어를 그대로 제출할 수도 있습니다. 커맨드 팔레트와 다른 점은 배치입니다 — 팔레트는 전역 단축키로 여는 모달이고, 검색창은 페이지에 고정된 인라인 요소입니다.