FE4902
article thumbnail

dialog 요소를 이용해서 접근성 좋은 대화 상자를 간단하게 만들 수 있습니다.

  • 대화상자를 닫거나 값을 전송하기 위한 모든 키보드 이벤트와 모바일 OS의 네이티브 이벤트가 구현되어 있습니다. 네이티브 이벤트가 구현되어있다는 것은 iOS에서 VoiceOver로 두 손가락 문지르기를 통해 대화상자를 닫거나 하는 행위가 가능함을 말합니다.
  • 모달로 열린 대화상자는 닫기 전까지는 대화상자 내부에서만 탐색이 가능합니다. 키보드 초점뿐만 아니라, 스크린리더의 가상커서 또한 마찬가지입니다.
  • 모달로 열린 대화상자는 닫기버튼 외에 ESC 키를 눌러도 닫을 수 있습니다.

기본 속성

dialog 요소는 기본적으로 숨겨져 있으며, 표시여부는 open 속성에 따라 달라집니다.

/* 브라우저들은 유저 에이전트 스타일에 다음의 CSS를 포함하고 있습니다. */
dialog:not([open]) {
  display: none;
}

See the Pen dialog - 1 by FE4902 (@fe4902) on CodePen.

비모달 대화상자

dialog 요소는 show(), close()를 이용해서 열고 닫을 수 있습니다.

const dialog = document.querySelector('dialog');
// 비모달 대화상자 열기
dialog.show();

// 닫기
dialog.close();

See the Pen dialog - 2 by FE4902 (@fe4902) on CodePen.

모달 대화상자

showModal()을 이용하면 backdrop이 깔리고 가운데 정렬이 된 대중적인 모습의 모달을 사용할 수 있습니다.

const dialog = document.querySelector('dialog');
// 모달 대화상자 열기
dialog.showModal();

// 닫기
dialog.close();

See the Pen dialog - 3 by FE4902 (@fe4902) on CodePen.

backdrop 클릭 이벤트

backdrop을 클릭했을때 모달이 닫히는 건, 기본적으로 구현되어 있지는 않지만 이벤트 버블링을 이용해서 구현할 수 있습니다.

dialog.addEventListener('click', (event) => {
  if (event.target.nodeName === 'DIALOG') {
    dialog.close();
  }
});

See the Pen dialog - 4 by FE4902 (@fe4902) on CodePen.

스타일 수정

스타일 수정이 제한되지 않아, dialog, :modal, ::backdrop 선택자로 커스터마이징이 가능합니다.

/* 비모달 대화상자, show() */
dialog {
    ...
}

/* 모달 대화상자, showModal() */
:modal {
    ...
}

/* 모달 대화상자의 dim */
::backdrop {
    ...
}

See the Pen dialog - 5 by FE4902 (@fe4902) on CodePen.

 

 

해당 포스팅은 이 을 참고하여 작성했습니다.

'HTML·CSS' 카테고리의 다른 글

[CSS] 텍스트 세로 나열  (0) 2023.04.10
[CSS] :is()와 :where()  (0) 2023.04.06
[HTML] 모바일 크롬 브라우저 Toolbar 색상 변경  (0) 2023.01.13
[CSS] 블렌드 모드  (0) 2023.01.04
[CSS] 체크박스  (0) 2022.12.26
profile

FE4902

@FE4902

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!