메뉴, 다이얼로그, 모달, 등에서 자주 사용되지만 브라우저에서 이런 컴포넌트를 구축하는것은 생각보다 복잡함
-> 포커스
-> 열기 및 닫기 상태
-> 컴포넌트에 접근 가능한 hook
모든 복잡성을 직접 관리하지 않고 브라우저에서 popover 속성과 관련된 기능으로 처리가능합니다
popover 속성
최상위 레이어로 끌어올려줌
- popover는 페이지의 다른 레이어 위에 별도의 레이어로 표시되므로 z-index를 찾느라 애쓸 필요가 없습니다.
외부 클릭 닫힘 기능이 포함
- popover 영역 외부를 클릭하면 popover가 닫히고 다시 focus됨
기본적인 포커스 관리를 지원
- popover창을 열면 다음 탭이 popover창 안에서 멈춤(?)
접근 가능한 키보드 바인딩을 지원
- esc키를 누르면 popover 창이 닫히고 focus 복구
접근 가능한 컴포넌트 바인딩을 지원
- popover 요소를 trigger에 의미적으로 연결
popover를 만들기 위해 필요한 3가지
- popover가 포함된 요소의 popover 속성
- popover를 포함하는 요소의 id
- popver의 id값과 동일한 값을 가진 popver를 여는 요소에 있는 popovertarget 필요
<button popovertarget="my-popover">Open Popover</button>
<div id="my-popover" popover>
<button popovertarget="my-popover" popovertargetaction="hide">
<span aria-hidden="”true”">X</span>
</button>
<p>I am a popover with more information.</p>
<p></p>
</div>
추가 속성
popovertargetaction
- "hide": 해당 popover 숨김
- "show": 해당 popover 표시
popover
- "auto"(default)
- 생략되어있고 열릴때 상위 popover를 제외한 다른 자동 popover를 강제로 닫음
- 외부클릭시 닫힘
- "manual"
- 다른 유형의 popover를 강제로 닫지않음
- 외부클릭으로 닫히지 않음
- 보통 toast같이 타이머 또는 명시적으로 닫히는 경우 사용
popover 스타일
::backdrop
#my-popover::backdrop {
background: rgba(190, 190, 190, 0.5);
}
해당 선택자는 auto popover를 사용할때 popover의 바로 아래 레이어에 위치하여 배경색을 투명하게 만드는데 활용
popover와 dialog의 차이점
모달(modal) 방식: 팝오버가 표시되는 동안 페이지의 나머지 부분이 상호작용이 불가능하며, 팝오버가 특정 방식으로 처리되기 전까지 페이지가 비활성화됩니다.
비모달(non-modal) 방식: 팝오버가 표시되는 동안 페이지의 나머지 부분은 상호작용할 수 있습니다.
popover(비모달 방식) | dialog(모달 방식) |
외부 클릭 닫기 지원 | 명시 해야만 닫기가능 |
하위 레이어 활성화 상태(상호작용 가능) | 하위 레이어 비활성화 |
최상위 레이어에 배치 | 최상위 레이어에 배치되지 않음 |
<dialog> 에 popover속성을 추가하여 popover제어와 최상위 배치및 element semantic하게 사용 가능
지원 브라우저 현황
firefox - 사용자가 명시적으로 활성화 시켜야 사용가능
opera - 지원안함
현재의 Modal보다는 Toast, Navigation, topbar 컴포넌트에 해당하는 기술로 보임
현재 Modal을 대신 하는것은 컨셉상은 dialog가 맞음
참고자료: https://ykss.netlify.app/translation/introducing_the_popover_api/
(번역) 팝오버(popover) API를 소개합니다
원문: Introducing the popover API 팝오버는 웹의 모든 곳에 있습니다. 메뉴, 토글 팁, 대화 상자(dialog…
ykss.netlify.app
https://developer.mozilla.org/en-US/docs/Web/API/Popover_API
Popover API - Web APIs | MDN
The Popover API provides developers with a standard, consistent, flexible mechanism for displaying popover content on top of other page content. Popover content can be controlled either declaratively using HTML attributes, or via JavaScript.
developer.mozilla.org
https://developer.chrome.com/blog/introducing-popover-api/
Introducing the popover API - Chrome Developers
Learn how to build tooltips, menus, and more with the new popover API.
developer.chrome.com
'Front-end' 카테고리의 다른 글
turborepo (0) | 2024.07.18 |
---|---|
Intersection Observer API (0) | 2023.07.18 |
testing (0) | 2022.12.12 |
컴포넌트 디자인 패턴 (2) | 2022.11.23 |