네이티브 <dialog showModal()>을 쓰면 포커스 트랩과 최상위 레이어링을 브라우저가 대신 해줍니다. 직접 만든다면 role="dialog" aria-modal="true"를 주고, 열릴 때 포커스를 모달 안(보통 제목이나 첫 입력 요소)으로 옮기고, Tab이 모달 밖으로 나가지 않게 가두고, 닫히면 모달을 연 버튼으로 포커스를 되돌려야 합니다.
드로어와 자주 비교됩니다. 모달은 화면 중앙에 뜨고 "지금 이것부터 처리하라"는 압박이 강한 반면, 드로어는 가장자리에서 슬라이드해 들어오고 필터·설정처럼 좀 더 가벼운 보조 작업에 쓰이며 때로는 뒤 콘텐츠와 함께 조작 가능한 비모달로도 만듭니다.
Esc로 닫히고, 배경(backdrop) 클릭으로도 닫히게 하는 게 관례지만 데이터를 잃을 수 있는 폼이라면 확인을 한 번 더 받아야 합니다.
언제 쓰나
삭제 확인처럼 사용자의 결정 없이는 진행할 수 없는 순간에만 씁니다. 알림성 메시지에는 모달 대신 토스트가 낫습니다.