칩

Chip

작은 알약 모양의 독립된 라벨. 필터를 켜고 끄거나, 눌러서 스스로 삭제되는 용도로 흔히 씁니다.

다른 이름: TagFilter chipPill
···
html
<div class="chw">
  <div class="chips" id="chips">
    <button class="chip" aria-pressed="true">전체</button>
    <button class="chip" aria-pressed="false">디자인</button>
    <button class="chip" aria-pressed="false">개발</button>
    <button class="chip" aria-pressed="false">마케팅</button>
  </div>
  <div class="chip removable" id="rmc"><span>정경훈</span><button aria-label="정경훈 삭제">×</button></div>
</div>
css
.chw{display:grid;gap:16px;width:min(240px,90%)}
.chips{display:flex;flex-wrap:wrap;gap:7px}
.chip{border:1px solid var(--line);background:var(--surface);color:var(--fg);border-radius:999px;padding:6px 13px;font-size:12px;font-weight:600;cursor:pointer}
.chip[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}
.removable{display:inline-flex;align-items:center;gap:7px;width:fit-content;transition:opacity .25s,transform .25s}
.removable[data-gone]{opacity:0;transform:scale(.8)}
.removable button{border:0;background:none;color:var(--muted);font-size:14px;cursor:pointer;line-height:1;padding:0}
js
const chips = [...document.querySelectorAll('.chips .chip')];
let auto = true;
chips.forEach((c) => c.addEventListener('click', () => { auto = false; chips.forEach(x => x.setAttribute('aria-pressed', String(x === c))); }));
let i = 0;
setInterval(() => { if (!auto) return; chips.forEach((c, idx) => c.setAttribute('aria-pressed', String(idx === i))); i = (i + 1) % chips.length; }, 1300);

const rmc = document.getElementById('rmc');
let rmAuto = true;
rmc.querySelector('button').addEventListener('click', () => { rmAuto = false; rmc.setAttribute('data-gone', ''); });
function rmLoop() {
  if (!rmAuto) return;
  rmc.removeAttribute('data-gone');
  setTimeout(() => { if (!rmAuto) return; rmc.setAttribute('data-gone', ''); setTimeout(rmLoop, 900); }, 2200);
}
rmLoop();

필터로 쓸 때는 버튼에 aria-pressed로 켜짐/꺼짐을 알리고, 삭제 가능한 칩(예: 이메일 수신자 목록)은 "x" 아이콘 버튼에 "김철수 삭제"처럼 구체적인 라벨을 줘야 아이콘만으론 뭘 지우는지 알 수 없는 문제를 피합니다.

배지와의 차이는 앞서 다룬 대로 독립성입니다 — 배지는 다른 요소에 얹혀서만 존재하고 클릭되지 않지만, 칩은 그 자체로 완결된 상호작용 단위입니다. 태그 입력 필드(이메일 수신자를 칩으로 쌓아가는 입력)도 칩 패턴의 한 변형입니다.

여러 개를 나열할 때는 flex-wrap으로 줄바꿈을 허용해 화면 폭에 따라 자연스럽게 흐르게 합니다.