드로어

Drawer

화면 가장자리에서 옆으로 미끄러져 들어오는 패널. 모바일에서 아래에서 올라오면 "바텀시트"라고 부릅니다.

다른 이름: Side panelOff-canvas menuSheetSlide-over
···
html
<div class="app-bg"><div class="bar" style="width:70%"></div><div class="bar" style="width:50%"></div><div class="bar" style="width:82%"></div></div>
<div class="scrim" id="sc"></div>
<aside class="drawer" id="dr" role="dialog" aria-modal="true" aria-label="설정">
  <h2>설정</h2>
  <nav><a href="#" tabindex="-1">알림</a><a href="#" tabindex="-1">개인정보</a><a href="#" tabindex="-1">계정</a></nav>
</aside>
css
.app-bg{position:absolute;inset:0;padding:16px;display:grid;gap:10px;align-content:start}
.bar{height:10px;border-radius:5px;background:var(--line)}
.scrim{position:absolute;inset:0;background:rgba(10,10,16,.42);opacity:0;pointer-events:none;transition:opacity .25s}
.scrim[data-open]{opacity:1}
.drawer{position:absolute;top:0;right:0;bottom:0;width:min(190px,64%);background:var(--surface);box-shadow:-14px 0 30px rgba(0,0,0,.22);padding:18px 16px;transform:translateX(100%);transition:transform .28s ease;display:grid;gap:12px;align-content:start}
.drawer[data-open]{transform:translateX(0)}
.drawer h2{margin:0;font-size:14px}
.drawer nav{display:grid;gap:8px}
.drawer a{color:var(--fg);font-size:12px;text-decoration:none;padding:6px 8px;border-radius:6px;background:var(--bg)}
js
const dr = document.getElementById('dr'), sc = document.getElementById('sc');
let auto = true;
function open(v) { dr.toggleAttribute('data-open', v); sc.toggleAttribute('data-open', v); }
sc.addEventListener('click', () => { auto = false; open(false); });
function loop() { if (!auto) return; open(true); setTimeout(() => { if (auto) { open(false); setTimeout(loop, 1000); } }, 2200); }
open(true);
setTimeout(loop, 2200);

모달의 사촌이지만 무게감이 다릅니다. 배경을 어둡게 덮고 뒤 콘텐츠를 막는 "모달 드로어"로도, 뒤 콘텐츠와 나란히 두고 계속 조작 가능한 "비모달 드로어"로도 만들 수 있습니다. 설정 패널, 필터, 알림함처럼 메인 작업을 완전히 멈추지 않아도 되는 보조 작업에 잘 맞습니다.

모달로 쓸 경우의 접근성 요구사항은 모달과 같습니다 — role="dialog" aria-modal="true", 포커스 트랩, Esc로 닫기. 비모달로 쓸 경우엔 aria-modal을 생략하고, 열려 있는 동안에도 페이지의 다른 부분에 포커스가 자유롭게 오갈 수 있게 둡니다.

트리거는 보통 햄버거 메뉴 아이콘이나 "필터", "설정" 같은 텍스트 버튼이며, aria-expanded로 열림 상태를 알립니다.