모바일 스크롤 하단 버튼 부드럽게 나타내는 방법 (CSS + JavaScript)

모바일 웹에서 유용한 ‘하단 고정 버튼’을 스크롤 시 버튼 노출이 자연스럽게 나타났다 사라지게 만드는 방법을 소개합니다. CSS와 JavaScript만으로 구현하며, 사용자 경험을 향상시킬 수 있는 깔끔한 UI 팁입니다.

스크롤 시 버튼 노출 소스코드들

데모 실행

데모 실행 결과

HTML 구조

<div class="list-top-btns">
  <button type="button">✅ 전체선택</button>
  <button type="button">❎ 전체선택해제</button>
</div>

<div class="floating-btns">
  <button type="button">✅ 전체선택</button>
  <button type="button">❎ 전체선택해제</button>
</div>
HTML
  • .list-top-btns : 목록 상단 버튼 영역
  • .floating-btns : 하단 고정 버튼 영역
  • 목록 상단 버튼 영역이 화면에서 사라지면 하단 고정 버튼 영역이 서서히 나타나게 됨

CSS : 서서히 나타났다 사라지는 효과

.floating-btns {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;
  background-color: rgb(0 0 0 / 10%);
  backdrop-filter: blur(7px);
  padding: 15px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease-in-out;
  z-index: 1000;
}

.floating-btns.visible {
  opacity: 1;
  pointer-events: auto;
}
CSS
  • background-color : 검정색 배경에 투명도 10%
  • backdrop-filter : 반투명 blur 효과
  • pointer-events : 보이지 않을 때 클릭 방지
  • opacity : 투명도 0%로 안보이게 처리
  • transition : 서서히 나타나고 사라지는 효과 주기

JavaScript : 버튼이 사라지는 걸 감지

const header = document.querySelector(".list-top-btns");
const floatingNav = document.querySelector(".floating-btns");

const observer = new IntersectionObserver(
  ([entry]) => {
    if (entry.isIntersecting) {
      // 헤더가 보일 때 → 플로팅 네비 숨기기
      floatingNav.classList.remove("visible");
    } else {
      // 헤더가 안 보일 때 → 플로팅 네비 보이기
      floatingNav.classList.add("visible");
    }
  },
  { threshold: 0 } // 헤더가 한 픽셀이라도 보이면 isIntersecting = true
);

observer.observe(header);
JavaScript
  • .list-top-btns 영역이 화면에 사라지고 나타나는지 감지
  • 상단 버튼 영역이 사라지면, .floating-btns에 .visible 추가
  • 상단 버튼 영역에 나타나면, .floating-btns에 .visible 제거

마무리

모바일에서 스크롤 시 버튼 노출을 자연스럽게 처리하기 위해 CSS + JavaScript를 활용한 예제 코드를 확인해 봤습니다. 해당 페이지에서 데모도 구현해 봤습니다. 조금 어수선하네요 ^^; 기본 기능이 어떤지 이해하시면 커스텀은 얼마든지 가능해 보입니다.

LG전자 27US550 68.4cm IPS 4K UHD 60Hz 피벗 틸트 스위블 엘리베이션
LG전자 WFHD 울트라와이드 모니터, 86.7cm, 34WP550
LG전자 FHD IPS 모니터, 80.4cm, LG_32MN500MW 화이트
한성컴퓨터 FHD IPS 144Hz 게이밍 모니터, 68.6cm, TFG27F14P2(일반)
아즈텍 모니터 240Hz 게이밍 AZT324G 80~81cm(32인치) 무결점, 무결점(AZT324G), 80.1cm
[깜짝세일] 뷰싱크 FHD 광시야각 리얼 100Hz 올화이트 모니터, VSO321F 일반, 80cm

“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”

위로 스크롤