실무에 바로 적용할 수 있는 웹 제작 꿀팁 및 유용한 자료실 공간입니다.
나눔웹이 제공하는 핵심 노하우와 마케팅 인사이트를 자유롭게 활용해 보십시오.

나눔웹 UI/UX 꿀팁

드롭다운 메뉴가 금방 닫힐 때, 틈 메우기와 transition-delay로 잡는 법

상단 드롭다운 메뉴에 마우스를 올려 하위 메뉴로 내려가는 순간 메뉴가 닫혀 버려 클릭을 못 한다는 이야기, 리뉴얼 상담에서 생각보다 자주 듣습니다.
원인은 대부분 상위 메뉴와 하위 메뉴 사이의 작은 틈, 그리고 닫힐 때 여유가 전혀 없는 CSS입니다. 스크립트 없이 CSS만으로 정리하는 방법을 순서대로 적었습니다.

💡 왜 내려가는 도중에 닫힐까요?

:hover는 포인터가 그 요소 위에 있는 동안에만 유지됩니다. 하위 메뉴를 margin-top으로 몇 px 띄워 두면 마우스가 그 빈 공간을 지나는 순간 어느 요소에도 올라가 있지 않게 되고, 메뉴는 바로 닫힙니다. 사람 손은 메뉴를 향해 비스듬히 움직이기 때문에 옆 메뉴를 살짝 스치기만 해도 같은 일이 생깁니다.

1. 상위 메뉴와 하위 메뉴 사이의 틈부터 메우기

간격은 margin이 아니라 하위 메뉴 안쪽의 padding-top으로 만듭니다. 눈에 보이는 간격은 같지만 그 공간도 하위 메뉴의 일부라서 hover가 끊기지 않습니다. 배경색 때문에 padding을 쓸 수 없다면 ::before로 투명한 다리를 하나 놓아 주면 됩니다.

.gnb > li { position: relative; }

.gnb .sub {
  position: absolute;
  top: 100%;
  left: 0;
  /* margin-top 대신 padding-top으로 간격 */
  padding-top: 12px;
}

/* 디자인상 padding을 못 쓴다면 투명 다리 */
.gnb .sub::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: -12px;
  height: 12px;
}

2. 닫힐 때만 transition-delay로 여유 주기

틈을 메워도 대각선으로 움직이다 잠깐 벗어나는 경우는 남습니다. 그래서 열릴 때는 바로, 닫힐 때는 0.2~0.3초 뒤에 사라지도록 지연을 겁니다. display: none은 전환 효과가 걸리지 않으니 opacity와 visibility 조합을 씁니다.

.gnb .sub {
  opacity: 0;
  visibility: hidden;
  /* 닫힐 때: 0.25초 기다렸다가 사라짐 */
  transition: opacity .2s ease .25s,
              visibility 0s linear .45s;
}

.gnb > li:hover > .sub,
.gnb > li:focus-within > .sub {
  opacity: 1;
  visibility: visible;
  z-index: 10;
  /* 열릴 때: 지연 없이 바로 */
  transition-delay: 0s;
}

지연을 0.5초 넘게 주면 옆 메뉴로 옮겼을 때 이전 하위 메뉴가 겹쳐 보입니다. 위 코드처럼 현재 열린 메뉴에 z-index를 올려 두면 새 메뉴가 항상 위에 뜨고, 지연은 0.3초 안팎이면 충분합니다.

3. 키보드와 터치 기기도 같이 챙기기

위 선택자에 :focus-within을 함께 넣은 이유는 마우스 없이 Tab 키로 이동하는 방문자도 하위 메뉴를 열 수 있게 하기 위해서입니다. 휴대폰과 태블릿에는 hover가 없어서 첫 탭이 메뉴 열기와 링크 이동 중 어느 쪽으로 동작할지 브라우저마다 다르게 느껴질 수 있습니다. 모바일에서는 드롭다운 대신 탭으로 펼치는 전체 메뉴를 따로 두는 편이 결과적으로 문의가 적었습니다.

증상 먼저 볼 곳
내려가자마자 닫힘 하위 메뉴의 margin-top, top 값
비스듬히 가면 닫힘 닫힘 지연(transition-delay)
메뉴끼리 겹쳐 보임 지연 시간, z-index
Tab 키로 안 열림 :focus-within 누락

"메뉴는 원하는 곳까지 무사히 데려다줄 때 제 역할을 합니다."

나눔웹은 메뉴를 만들 때 마우스 동선과 키보드 이동까지 직접 확인한 뒤에 오픈합니다.


List of Articles
번호 분류 제목 글쓴이
» UI/UX 드롭다운 메뉴가 금방 닫힐 때, 틈 메우기와 transition-delay로 잡는 법 new 나눔웹
89 퍼블리싱 다크 모드 CSS 대응법, 폰을 어둡게 했더니 입력창만 하얗게 뜰 때 new 나눔웹
88 웹 성능 뒤로 가기 하면 페이지가 처음부터 다시 뜰 때, bfcache 막는 원인 찾는 법 나눔웹
87 마케팅 LocalBusiness 구조화 데이터 작성법, 구글에 상호·주소·영업시간 정확히 알리기 나눔웹
86 UI/UX 링크 밑줄이 글자에 붙어 답답할 때, text-underline-offset으로 다듬는 법 나눔웹
85 모바일 모바일 키보드가 입력창을 가릴 때, visualViewport로 화면 맞추는 법 나눔웹
84 웹 성능 사용하지 않는 CSS 줄이기, 크롬 Coverage 탭으로 안 쓰는 코드 찾는 법 나눔웹
83 마케팅 GA4 문의 전환 설정법, 감사 페이지 도달로 실제 문의 수 세는 순서 나눔웹
82 UI/UX 고정 헤더에 제목이 가려질 때, scroll-margin-top으로 앵커 맞추는 법 나눔웹
81 퍼블리싱 CSS 컨테이너 쿼리 쓰는 법, 화면이 아니라 카드 폭에 맞춰 반응하기 나눔웹
80 UI/UX 폼 에러가 입력 전에 뜨는 문제, :user-invalid로 고치는 법 나눔웹
79 모바일 모바일 브라우저 상단바 색 맞추기, theme-color 메타 태그 쓰는 법 나눔웹
78 마케팅 문의 완료 페이지 noindex 설정법, 검색에 잡히지 않게 막는 순서 나눔웹
77 UI/UX 문의란이 내용만큼 늘어나게, CSS field-sizing으로 맞추는 법 나눔웹
76 웹 성능 긴 페이지 스크롤이 무거울 때, content-visibility로 렌더링 줄이는 법 나눔웹
75 모바일 모바일 100vh 잘림, dvh·svh로 주소창 높이까지 맞추는 법 나눔웹
74 마케팅 구글 서치 콘솔 등록 방법, 새 홈페이지 소유권 확인부터 색인 요청까지 나눔웹
73 퍼블리싱 CSS :has() 선택자 활용법, 자식 상태에 따라 부모 박스 스타일 바꾸기 나눔웹
72 웹 성능 반응형 이미지 srcset 쓰는 법, 모바일에 PC용 큰 사진을 보내지 않으려면 나눔웹
71 퍼블리싱 제목 줄바꿈이 어색할 때, text-wrap: balance로 한 단어만 남는 문제 정리 나눔웹
Board Pagination Prev 1 2 3 4 5 Next
/ 5
rhwlsghkcocndgus XE2.1.39 STAGE1.5.4