내비게이션 레일

Navigation rail

화면 왼쪽에 세로로 붙어, 아이콘 중심으로 주요 화면을 오가는 좁은 내비게이션 바.

다른 이름: Side railIcon railRail navigation
···
html
<div class="nrw">
  <nav class="rail" aria-label="주요 메뉴" id="rail">
    <i class="rpill" id="rpill"></i>
    <button aria-current="page"><span>⌂</span></button>
    <button><span>⌕</span></button>
    <button><span>♡</span></button>
    <button><span>☺</span></button>
  </nav>
  <div class="rcontent"><div class="rbar" style="width:70%"></div><div class="rbar" style="width:44%"></div><div class="rbar" style="width:58%"></div></div>
</div>
css
.nrw{display:flex;width:100%;height:100%}
.rail{position:relative;width:48px;background:var(--surface);border-right:1px solid var(--line);display:grid;grid-auto-rows:40px;place-items:center;padding-top:10px;gap:6px}
.rail button{width:34px;height:34px;border-radius:10px;border:0;background:none;color:var(--muted);font-size:15px;cursor:pointer;position:relative;z-index:1}
.rail button[aria-current]{color:var(--accent)}
.rpill{position:absolute;top:10px;left:7px;width:34px;height:34px;border-radius:10px;background:color-mix(in srgb, var(--accent) 16%, transparent);transition:transform .25s ease}
.rcontent{flex:1;padding:16px;display:grid;gap:9px;align-content:start}
.rbar{height:9px;border-radius:5px;background:var(--line)}
js
const btns = [...document.querySelectorAll('.rail button')];
const pill = document.getElementById('rpill');
function select(i) {
  btns.forEach((b, idx) => idx === i ? b.setAttribute('aria-current', 'page') : b.removeAttribute('aria-current'));
  pill.style.transform = 'translateY(' + (i * 40) + 'px)';
}
let auto = true, cur = 0;
select(0);
btns.forEach((b, i) => b.addEventListener('click', () => { auto = false; cur = i; select(i); }));
setInterval(() => { if (!auto) return; cur = (cur + 1) % btns.length; select(cur); }, 1500);

nav 안에 아이콘 버튼 목록을 두고 현재 화면에 aria-current를 주는 기본 구조는 하단 내비게이션과 같습니다. 각 항목에 라벨을 아이콘 아래 작은 텍스트로 함께 두면 좋고, 아이콘만 쓴다면 접근 가능한 이름을 aria-label로 보충합니다.

하단 내비게이션과의 차이는 앞서 다룬 대로 화면 크기입니다 — 레일은 태블릿·데스크톱처럼 가로 공간이 넉넉한 화면에서 세로로 자리 잡고, 하단 내비게이션은 엄지가 닿기 쉬운 좁은 모바일 화면 아래에 가로로 눕습니다. 사이드바와의 차이는 폭과 내용입니다 — 사이드바는 텍스트 목록 위주로 넓고 하위 메뉴를 포함하기도 하지만, 레일은 아이콘 위주로 훨씬 좁고 보통 하위 메뉴 없이 최상위 목적지만 담습니다.

반응형으로 화면이 좁아지면 레일이 하단 내비게이션으로 형태를 바꾸는 구현도 흔합니다.