브레드크럼

Breadcrumb

지금 보고 있는 페이지가 사이트 계층 구조 어디에 있는지 ">"로 이어 보여주는 내비게이션.

다른 이름: Breadcrumb trailPath indicator
···
html
<nav aria-label="breadcrumb" class="bc">
  <ol id="bcl">
    <li><a href="#">홈</a></li>
    <li><a href="#">도서</a></li>
    <li><a href="#">소설</a></li>
    <li aria-current="page">82년생 김지영</li>
  </ol>
</nav>
css
.bc ol{list-style:none;display:flex;flex-wrap:wrap;gap:0;margin:0;padding:0;font-size:12px;max-width:min(280px,90%)}
.bc li{display:flex;align-items:center;color:var(--muted);opacity:.25;transition:opacity .3s}
.bc li[data-lit]{opacity:1}
.bc li:not(:first-child)::before{content:"›";margin:0 6px;color:var(--line)}
.bc a{color:var(--muted);text-decoration:none}
.bc li[aria-current] {color:var(--fg);font-weight:600}
js
const items = [...document.querySelectorAll('.bc li')];
let n = 1;
function paint() { items.forEach((li, i) => li.toggleAttribute('data-lit', i < n)); }
paint();
setInterval(() => { n = n >= items.length ? 1 : n + 1; paint(); }, 900);

<nav aria-label="breadcrumb"> 안에 순서가 있는 목록(<ol>)을 두고, 마지막(현재 페이지) 항목에는 링크를 걸지 않고 aria-current="page"만 줍니다. 각 구분자(">")는 CSS ::before 같은 장식으로 넣어 스크린리더가 읽지 않게 합니다.

스테퍼와의 차이는 방향성입니다 — 위에서 다룬 대로 브레드크럼은 이미 지나온 계층 경로이고 언제든 상위 항목을 눌러 되돌아갈 수 있지만, 스테퍼는 정해진 순서로 앞으로만 나아가는 프로세스입니다. 탭과의 차이는 관계입니다 — 탭은 같은 레벨의 형제 콘텐츠를 오가고, 브레드크럼은 부모-자식 계층을 보여줍니다.

깊이가 아주 깊어지면(5단계 이상) 중간 항목을 "…"으로 접어 보여주는 방식도 흔합니다.