Astro 블로그 사이드바 position: sticky 점핑 현상 해결기

#Astro #Tailwind CSS #Troubleshooting #Frontend

블로그 레이아웃을 다듬던 중, 사이드바에 position: sticky 를 적용했을 때 스크롤 시 화면이 덜컥거리며 밀리는 점핑 현상 을 겪었다. 이번 포스팅에서는 이 문제를 어떻게 파악하고 해결했는지 정리해 본다.

문제 상황

사이드바 컴포넌트(Sidebar.astro)에 카테고리 목록을 두고, 스크롤을 내릴 때 화면 상단에 고정되도록 Tailwind CSS의 sticky, top-28 클래스를 주었다. 그런데 스크롤이 sticky 가 시작되는 지점에 도달하는 순간, 사이드바가 위로 찔끔 올라갔다가 멈추는 듯한 어색한 움직임 이 발생했다.

원인 파악: 픽셀 계산의 엇갈림

처음에는 부모 컨테이너의 Flexbox 렌더링 충돌이나 transform 속성을 의심했지만, 진짜 원인은 초기 렌더링 위치sticky가 작동하는 기준 위치(top) 간의 픽셀(px) 오차에 있었다.

상단에 고정된 헤더(Header.tsx)의 높이와 메인 영역의 상단 여백을 계산해 보면 다음과 같다.

  • 헤더 높이: 패딩과 내부 요소를 합쳐 약 73px
  • 메인 영역 상단 여백(mt-12): 48px
  • 즉, 화면 맨 위에서 사이드바 최상단까지의 실제 물리적 거리는 121px 이다.

하지만 기존 사이드바는 top-28 (112px)로 설정되어 있었다. 스크롤을 내릴 때 사이드바가 원래 자리(121px)에서 112px 위치까지 위로 엇갈려 올라간 뒤에 고정되기 때문에, 레이아웃이 덜컥거리는 시각적 착시 가 발생한 것이다.

해결 방법: 정확한 픽셀 값 매칭

원인을 알았으니 해결책은 간단하다. 사이드바의 top 위치를 실제 여백과 정확히 맞춰주면 된다. Tailwind의 Arbitrary values(임의 값) 문법을 사용해 오차를 메워줄 top-[121px] 을 적용했다.


{/* 수정 전 */}
<aside class="sticky top-28 ...">
  ...
</aside>

{/* 수정 후 */}
<aside class="sticky top-[121px] ml-auto ...">
  ...
</aside>

이렇게 수정하니 사이드바가 스크롤을 시작하자마자 어긋남 없이 원래 있던 그 자리에서 아주 부드럽게 화면에 고정되었다.

이 포스팅은 AI의 도움을 받아 초안을 작성하고, 직접 검수 및 편집한 글입니다.