팝오버는 웹 어디에나 있습니다. 이러한 정보는 메뉴, 전환 팁, 대화상자에서 확인할 수 있으며 계정 설정, 공개 정보 위젯, 제품 카드 미리보기로 표시될 수 있습니다. 이러한 구성 요소가 얼마나 널리 사용되고 있음에도 불구하고, 이를 브라우저에서 빌드하는 것은 여전히 의외의 번거로운 일입니다. 포커스, 열기 및 닫기 상태, 구성요소에 액세스할 수 있는 후크, 환경에 들어가고 나가기 위한 키보드 바인딩을 관리하기 위한 스크립트를 추가해야 합니다. 팝오버의 유용하고 고유한 핵심 기능을 빌드하기 전에도 이 모든 작업을 수행할 수 있어야 합니다.
이 문제를 해결하기 위해 Chromium 114의 popover
API부터 팝오버 빌드를 위한 새로운 선언적 HTML API 세트가 브라우저에 도입됩니다.
팝오버 속성
브라우저 지원
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
- <ph type="x-smartling-placeholder">
모든 복잡성을 직접 관리하는 대신 브라우저에서 popover
속성 및 후속 기능 집합을 사용하여 이를 처리하도록 할 수 있습니다. HTML 팝오버 지원:
- 최상위 레이어로 승격 팝오버는 페이지의 나머지 부분 위에 있는 별도의 레이어에 표시되므로 Z-색인을 탐색하지 않아도 됩니다.
- 가볍게 닫는 기능. 팝오버 영역 외부를 클릭하면 팝오버가 닫히고 포커스가 돌아갑니다.
- 기본 포커스 관리. 팝오버를 열면 팝오버 내에서 다음 탭이 중지됩니다.
- 액세스 가능한 키보드 바인딩.
esc
키를 누르면 팝오버가 닫히고 포커스가 돌아갑니다. - 액세스 가능한 구성요소 바인딩. 팝오버 요소를 팝오버 트리거에 의미론적으로 연결
이제 자바스크립트를 사용하지 않고도 이 모든 기능을 갖춘 팝오버를 만들 수 있습니다. 기본 팝오버에는 다음 세 가지가 필요합니다.
- 팝오버가 포함된 요소의
popover
속성 - 팝오버가 포함된 요소의
id
- 팝오버를 여는 요소에서 팝오버의
id
값이 포함된popovertarget
<button popovertarget="my-popover"> Open Popover </button>
<div id="my-popover" popover>
<p>I am a popover with more information.</p>
</div>
이제 모든 기능을 갖춘 기본 팝오버가 만들어졌습니다.
이 팝오버는 추가 정보를 전달하기 위해 또는 공개 위젯으로 사용할 수 있습니다.
기본값 및 재정의
기본적으로 이전 코드 스니펫과 같이 popovertarget
로 팝오버를 설정하면 팝오버를 여는 버튼 또는 요소가 팝오버를 열고 닫습니다. 그러나 popovertargetaction
를 사용하여 명시적인 팝오버를 만들 수도 있습니다. 이렇게 하면 기본 toggle 작업이 재정의됩니다. popovertargetaction
옵션은 다음과 같습니다.
popovertargetaction="show"
: 팝오버를 표시합니다.
popovertargetaction="hide"
: 팝오버를 숨깁니다.
popovertargetaction="hide"
를 사용하면 다음 스니펫과 같이 팝오버 내에 '닫기' 버튼을 만들 수 있습니다.
<button popovertarget="my-popover" popovertargetaction="hide">
<span aria-hidden="true">❌</span>
<span class="sr-only">Close</span>
</button>
자동 팝오버와 수동 팝오버 비교
popover
속성 자체를 사용하는 것은 실제로 popover="auto"
의 바로가기입니다. 기본 popover
가 열리면 상위 팝오버를 제외한 다른 자동 팝오버를 강제 종료합니다. 닫기 또는 닫기 버튼을 사용하여 닫을 수 있습니다.
반면에 popover=manual
를 설정하면 다른 유형의 팝오버인 수동 팝오버가 생성됩니다. 다른 요소 유형이 강제로 닫히지 않으며 빛 닫기를 통해 닫히지 않습니다. 타이머 또는 명시적인 닫기 작업을 통해 종료해야 합니다. popover=manual
에 적합한 팝오버 유형은 표시되고 사라지는 요소이지만 토스트 알림과 같은 페이지의 나머지 부분에는 영향을 미치지 않습니다.
위의 데모를 살펴보면 팝오버 영역 외부를 클릭해도 팝오버가 라이트 닫히지 않는 것을 확인할 수 있습니다. 또한 다른 팝오버가 열려 있는 경우 닫히지 않습니다.
차이점을 검토하는 방법은 다음과 같습니다.
popover=auto
팝오버:
- 팝오버가 열리면 다른 팝오버를 강제 종료합니다.
- 가볍게 닫을 수 있습니다.
popover=manual
팝오버:
- 다른 요소 유형을 강제로 닫지 마세요.
- 빛을 닫지 않습니다. 전환 또는 닫기 작업을 사용하여 광고 소재를 닫습니다.
팝오버 스타일 지정
지금까지 HTML의 기본 팝오버에 대해 배웠습니다. 하지만 popover
와 함께 제공되는 몇 가지 멋진 스타일 지정 기능도 있습니다. 그중 하나는 ::backdrop
의 스타일을 지정하는 기능입니다.
auto
팝오버에서 이는 페이지의 나머지 부분 위에 위치한 상단 레이어 (팝오버가 있는 곳) 바로 아래에 있는 레이어입니다. 다음 예에서 ::backdrop
에는 반투명 색상이 지정됩니다.
#size-guide::backdrop {
background: rgb(190 190 190 / 50%);
}
popover
와 dialog
의 차이점
popover
속성은 그 자체로 시맨틱을 제공하지 않는다는 점에 유의해야 합니다. 이제 popover="auto"
를 사용하여 모달 대화상자와 같은 환경을 빌드할 수 있지만 둘 사이에는 몇 가지 주요 차이점이 있습니다.
dialog.showModal
로 열린 dialog
요소 (모달 대화상자)는 모달을 닫으려면 명시적인 사용자 상호작용이 필요한 환경입니다.
popover
는 빛 닫기를 지원합니다. 모달 dialog
는 그렇지 않습니다.
모달 대화상자는 페이지의 나머지 부분을 비활성 상태로 만듭니다. popover
는 그렇지 않습니다.
위의 데모는 팝오버 동작이 포함된 의미론적 대화상자입니다. 즉, 페이지의 나머지 부분이 비활성 상태가 아니고 대화상자 팝오버가 가볍게 닫는 동작을 취합니다. 다음 코드를 사용하여 팝오버 동작으로 이 대화상자를 빌드할 수 있습니다.
<button popovertarget="candle-01">
Quick Shop
</button>
<dialog popover id="candle-01">
<button class="close-btn" popovertarget="candle-01" popovertargetaction="hide">...</button>
<div class="product-preview-container">
...
</div>
</dialog>
출시 예정
대화형 시작 및 종료
display: none
로/에서 애니메이션 처리, 상단 레이어에서 애니메이션 처리하기, 불연속 속성에 애니메이션을 적용하는 기능은 아직 브라우저에서 사용할 수 없습니다. 그러나 이 출시 직후에 Chromium의 다음 버전을 출시할 계획입니다.
불연속 속성에 애니메이션을 적용하는 기능과 :popover-open
및 @starting-style
를 사용하면 변경 전 및 변경 후 스타일을 설정하여 팝오버를 열고 닫을 때 원활하게 전환할 수 있습니다. 이전 예를 살펴보겠습니다. 안팎으로 애니메이션을 적용하는 것이 훨씬 더 매끄러워 보이고 더 유동적인 사용자 환경을 지원합니다.
앵커 배치
팝오버는 표시 영역을 기반으로 경고, 모달 또는 알림을 배치하려는 경우에 유용합니다. 하지만 팝오버는 메뉴, 도움말 및 다른 요소를 기준으로 배치해야 하는 기타 요소에도 유용합니다. 여기에 CSS 앵커링이 사용됩니다.
다음 방사형 메뉴 데모에서는 팝오버 API를 CSS 앵커 위치 지정과 함께 사용하여 팝오버 #menu-items
가 항상 전환 트리거인 #menu-toggle
버튼에 고정되도록 합니다.
앵커 설정은 팝오버를 설정하는 방법과 비슷합니다.
<button id="menu-toggle" popovertarget="menu-items">
Open Menu
</button>
<ul id="menu-items" popover anchor="menu-toggle">
<li class="item">...</li>
<li class="item">...</li>
</ul>
앵커에 id
(이 예에서는 #menu-toggle
)를 지정하여 앵커를 설정한 후 anchor="menu-toggle"
를 사용하여 두 요소를 연결합니다. 이제 anchor()
를 사용하여 팝오버의 스타일을 지정할 수 있습니다. 앵커 토글의 기준선에 고정된 가운데 정렬한 팝오버 메뉴는 다음과 같이 스타일이 지정될 수 있습니다.
#menu-items {
bottom: anchor(bottom);
left: anchor(center);
translate: -50% 0;
}
이제 전환 버튼에 고정된 모든 기능을 갖춘 팝오버 메뉴가 생겼으며 팝오버의 모든 내장 기능이 포함되어 있습니다. 자바스크립트는 필요하지 않습니다.
결론
팝오버 API는 기본적으로 웹 애플리케이션을 더 쉽게 관리하고 액세스할 수 있도록 하는 일련의 새로운 기능 중 첫 번째 단계입니다. 팝오버를 어떻게 사용하실지 기대됩니다.