키보드 내비게이션

Keyboard Navigation

마우스 없이 Tab·화살표·Enter·Space만으로 모든 기능에 닿을 수 있어야 한다는 원칙.

···
html
<div class="stage">
  <div class="toolbar">
    <button class="it i1"></button>
    <button class="it i2"></button>
    <button class="it i3"></button>
    <button class="it i4"></button>
  </div>
  <div class="key" id="key"></div>
</div>
css
.stage{position:relative;width:92%;height:80%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14%}
.toolbar{display:flex;gap:6%;padding:6%;border-radius:14px;border:1px solid var(--line);background:var(--surface)}
.it{width:15vmin;max-width:56px;aspect-ratio:1;border-radius:9px;border:1px solid var(--line);background:var(--bg)}
.ring{box-shadow:0 0 0 3px var(--accent)}
.press{background:var(--accent-3) !important}
.key{font:700 13px/1 ui-monospace,monospace;color:var(--muted);min-height:16px}
js
const items = [document.querySelector('.i1'), document.querySelector('.i2'), document.querySelector('.i3'), document.querySelector('.i4')];
const key = document.getElementById('key');
const steps = [
  { i: 0, k: '⇥ Tab' },
  { i: 1, k: '→' },
  { i: 2, k: '→' },
  { i: 2, k: '↵ Enter', press: true },
  { i: 3, k: '→' },
];
let s = 0;
function apply(step) {
  items.forEach(function (el) { el.classList.remove('ring'); });
  items[step.i].classList.add('ring');
  key.textContent = step.k;
  if (step.press) {
    items[step.i].classList.add('press');
    setTimeout(function () { items[step.i].classList.remove('press'); }, 260);
  }
}
function tick() {
  apply(steps[s % steps.length]);
  s++;
}
tick();
setInterval(tick, 750);

많은 사용자가 손 떨림, 일시적 부상, 스위치 장치, 또는 단순히 마우스가 없어서 키보드만으로 웹을 씁니다. `hover`나 `click`에만 반응하도록 만든 커스텀 컴포넌트(직접 만든 드롭다운, div로 만든 버튼)는 이 사용자들에게 완전히 막혀 있는 벽이 됩니다.

기본 규칙은 단순합니다 — Tab·Shift+Tab으로 요소 사이를 이동하고, Enter나 Space로 활성화하고, 리스트·메뉴 안에서는 화살표 키로 항목을 옮깁니다. 진짜 `<button>`·`<a>`·`<input>` 같은 네이티브 요소를 쓰면 이 동작이 브라우저에 이미 내장돼 있어서 직접 구현할 필요가 없습니다.

데모는 툴바 4개 항목을 Tab·화살표·Enter로 이동·선택하는 과정을 키 배지와 함께 보여줍니다.

언제 쓰나

새 컴포넌트를 만들 때마다 마우스를 손대지 않고 Tab만으로 끝까지 써 보세요. 막히는 지점이 있다면 그게 바로 고쳐야 할 곳입니다.