다이얼로그는 본 화면 위에 뜨는 창을 넓게 부르는 말이고, 모달은 그중 응답하기 전까지 뒤의 화면을 쓸 수 없게 막는 다이얼로그다. 막지 않는 것은 논모달(non-modal) 다이얼로그라고 한다.
| 모달 | 논모달 다이얼로그 | |
|---|---|---|
| 뒤 화면 | 어둡게 덮고 조작 불가 | 계속 조작 가능 |
| 사용자 흐름 | 끊는다 | 유지한다 |
| 어울리는 곳 | 삭제 확인, 결제 확인, 반드시 거쳐야 하는 로그인·약관 | 검색 창, 설정 패널, 도움말, 채팅 창 |
흐름을 끊는 만큼 비용이 크니, 꼭 확인이 필요할 때만 모달을 쓴다. 파괴적인 작업의 확인 버튼은 눈에 띄는 색과 경고로 구분하는 것이 좋다 → 『UX/UI의 10가지 심리학 법칙』
HTML dialog 요소
HTML의 dialog 요소가 둘을 모두 지원한다.
dialog.showModal(): 모달로 연다. 뒤 화면을 비활성화하고(inert), 최상위 레이어에 띄워 z-index 싸움이 없으며,::backdrop으로 배경을 꾸미고,Esc로 닫힌다dialog.show(): 논모달로 연다form method="dialog"안의 버튼을 누르면 닫히면서 어떤 버튼이었는지returnValue로 알려 준다
직접 만들 때는 포커스를 다이얼로그 안에 가두고(Focus Trap), 닫으면 연 버튼으로 돌려주고, role="dialog"와 aria-modal을 붙이는 접근성(Accessibility) 처리가 필요하다. React에서는 DOM을 body 아래로 옮기는 포털이나 헤드리스 UI 라이브러리를 많이 쓴다. 반응형으로 모바일에서는 전체 화면, 데스크톱에서는 가운데 상자로 바꿀 때의 CSS 함정은 inset 속성 참고.
출처: MDN — The Dialog element · Nielsen Norman Group — Modal & Nonmodal Dialogs