드롭다운 및 팝오버 패턴
CSS 위치 지정과 Popover API를 사용해 접근성 높은 드롭다운 메뉴와 팝오버를 만듭니다.
드롭다운 및 팝오버 패턴은(는) CoddyKit의 무료 CSS Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 CSS Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. CSS Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
팝오버 응용 프로그래밍 인터페이스
HTML 팝오버 응용 프로그래밍 인터페이스는 선언적인 표시 및 숨기기 동작을 제공합니다(크롬 114 이상, 폭넓게 지원됨). 대상에는 popover 속성을, 트리거 버튼에는 popovertarget을 사용합니다. 기본적인 열기 및 닫기에는 JavaScript가 필요하지 않으며, 바깥쪽 클릭으로 닫기와 Escape 키 처리도 기본으로 제공합니다.
팝오버 스타일 지정
[popover] 또는 :popover-open을 사용하여 팝오버 요소를 선택합니다. ::backdrop 의사 요소를 사용하여 배경을 어둡게 만들 수 있습니다. 팝오버는 대화 상자처럼 최상위 레이어에 렌더링되므로 쌓임 순서 문제가 발생하지 않습니다.
앵커 위치 지정을 사용한 드롭다운 배치
CSS 앵커 위치 지정은 JavaScript 없이 팝오버를 트리거에 상대적으로 배치합니다(크롬 125 이상). 트리거에 anchor-name: --btn을, 팝오버에 position-anchor: --btn을 지정한 다음 top: anchor(bottom); left: anchor(left)를 사용하여 트리거 아래에 맞춥니다.
절대 위치 지정을 사용한 대체 방법
앵커 위치 지정을 사용할 수 없다면 위치가 지정된 부모 래퍼를 사용합니다. 컨테이너에는 position: relative를, 드롭다운에는 position: absolute; top: 100%; left: 0을 지정합니다. 이 방법은 브라우저 전반에서 작동하지만 트리거와 드롭다운이 위치가 지정된 컨테이너 안에서 형제 요소여야 합니다.
드롭다운 메뉴 CSS
드롭다운 목록의 스타일을 다음과 같이 지정합니다: position: absolute; background: var(--color-surface); box-shadow: var(--shadow-md); border-radius: var(--radius-md); padding: var(--spacing-1) 0; min-width: 200px. 메뉴 항목에는 패딩, 마우스 오버 배경, 전체 너비 표시를 적용합니다.
애니메이션
진입에는 @starting-style을 사용하고, display 속성 변경을 애니메이션으로 처리하려면 transition-behavior: allow-discrete를 사용하여 팝오버의 열기 및 닫기를 애니메이션으로 구현합니다. 이를 통해 팝오버의 열림 및 닫힘 상태에 연결된 CSS 전용 진입 및 종료 애니메이션을 사용할 수 있습니다.
키보드 접근성
드롭다운 메뉴는 키보드를 지원해야 합니다. 화살표 키로 메뉴 항목을 탐색하고, Enter 또는 스페이스 키로 포커스된 항목을 활성화하며, Escape 키로 메뉴를 닫고 포커스를 트리거로 돌려보냅니다. 팝오버 응용 프로그래밍 인터페이스는 Escape 키를 자동으로 처리하지만, 화살표 키 탐색에는 JavaScript 이벤트 처리가 필요합니다.
사용자 지정 드롭다운의 ARIA
팝오버 응용 프로그래밍 인터페이스를 사용하지 않는 사용자 지정 드롭다운에는 트리거에 aria-haspopup="listbox"와 aria-expanded를, 목록에 role="listbox"를, 각 항목에 role="option"과 aria-selected를 추가합니다. 화면 낭독기는 펼침 상태와 항목 수를 알려 줍니다.
오버플로 및 뷰포트 충돌
트리거 아래에 배치된 드롭다운은 뷰포트 하단에서 넘칠 수 있습니다. IntersectionObserver 또는 getBoundingClientRect로 이를 감지하고 드롭다운을 트리거 위로 뒤집어 배치합니다. CSS 앵커 위치 지정은 position-try-fallbacks를 사용하여 이 문제를 처리합니다.
다단계 드롭다운
중첩된 드롭다운(하위 메뉴)은 복잡성을 높입니다. 하위 메뉴를 부모 항목의 오른쪽에 배치합니다. 마우스가 대각선으로 이동하는 동안 하위 메뉴가 닫히지 않도록 마우스가 벗어난 후 숨기기 전에 지연 시간을 추가합니다. 이때 CSS transition-delay 또는 JS 시간 초과를 사용할 수 있습니다.
터치 기기 고려 사항
마우스 오버로 작동하는 드롭다운은 터치 기기에서 동작하지 않습니다. 터치 기기에는 마우스 오버 상태가 없기 때문입니다. 모든 환경에서 클릭 또는 탭 트리거를 사용합니다. 팝오버 응용 프로그래밍 인터페이스의 바깥쪽 클릭 닫기 기능이나 열린 드롭다운을 닫는 문서 클릭 수신기로 바깥쪽을 탭하여 닫는 동작을 구현할 수 있습니다.
지식 확인
팝오버 응용 프로그래밍 인터페이스는 이전에 사용자 지정 JavaScript가 필요했던 어떤 기능을 자동으로 제공합니까?
요약
팝오버 응용 프로그래밍 인터페이스와 CSS 앵커 위치 지정을 함께 사용하면 선언적이고 JavaScript 사용을 최소화한 드롭다운 및 팝오버 패턴을 구현할 수 있습니다. 더 폭넓은 브라우저 지원이 필요하다면 위치가 지정된 컨테이너 패턴을 안정적으로 사용할 수 있습니다. 키보드 접근성, ARIA 속성, 뷰포트 충돌 처리, 터치 기기 지원을 더하면 실제 서비스에 사용할 수 있는 드롭다운 구성 요소가 완성됩니다.
자주 묻는 질문
“드롭다운 및 팝오버 패턴” 강의는 무료인가요?
네 — “드롭다운 및 팝오버 패턴” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 CSS Academy 강의 전체를 잠금 해제할 수 있습니다. CSS Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“드롭다운 및 팝오버 패턴”에서 뭘 배우나요?
CSS 위치 지정과 Popover API를 사용해 접근성 높은 드롭다운 메뉴와 팝오버를 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 CSS Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
CSS Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 CSS Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“드롭다운 및 팝오버 패턴” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 CSS Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 CSS Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.