HTML 내부 목차 클릭 시 부드러운 스크롤 이동 방법
HTML 문서 내 목차 링크를 클릭했을 때, 해당 콘텐츠 위치로 페이지가 부드럽게 스크롤되도록 하는 CSS와 JavaScript 활용법을 설명하고, 각 방법에 대한 HTML 예시를 제공합니다.
개요
웹사이트에서 긴 페이지의 내용을 구조화하기 위해 목차(TOC)를 사용합니다. 목차 링크를 클릭했을 때 해당 섹션으로 즉시 이동하는 것보다 부드러운 스크롤 효과를 적용하면 사용자 경험을 향상시킬 수 있습니다. 이 효과는 CSS 또는 JavaScript를 통해 간단하게 구현할 수 있습니다.
두 방법 모두 HTML 링크의 # 앵커(&<a href="#id값"&>)를 사용하여 콘텐츠 섹션의 id 속성으로 이동하는 원리를 기반으로 합니다.
CSS를 활용한 방법
가장 간단하고 성능이 좋은 방법으로, CSS 속성 하나만으로 문서 전체에 부드러운 스크롤 효과를 적용할 수 있습니다. 대부분의 최신 브라우저에서 지원되므로 특별한 이유가 없다면 이 방법을 사용하는 것이 권장됩니다.
아래와 같은 HTML 구조와 CSS 코드를 함께 사용하면 부드러운 스크롤 효과를 구현할 수 있습니다.
<div class="toc"> <ul> <li><a href="#section1">섹션 1</a></li> <li><a href="#section2">섹션 2</a></li> </ul> </div> <section id="section1"> <h2>첫 번째 섹션 제목</h2> <p>여기에 섹션 1의 내용이 들어갑니다.</p> </section> <section id="section2"> <h2>두 번째 섹션 제목</h2> <p>여기에 섹션 2의 내용이 들어갑니다.</p> </section>
html { scroll-behavior: smooth; }
이 속성을 html 요소에 적용하면, # 앵커 링크 클릭 시 모든 스크롤 동작이 부드러운 애니메이션으로 처리됩니다.
JavaScript를 활용한 방법
CSS scroll-behavior를 지원하지 않는 구형 브라우저를 지원해야 하거나, 스크롤 동작을 더 세밀하게 제어하고 싶을 때 사용합니다. element.scrollIntoView() 메서드를 활용하여 부드러운 스크롤 효과를 구현합니다.
위와 동일한 HTML 구조를 사용하되, CSS 대신 아래 JavaScript 코드를 추가하여 부드러운 스크롤 효과를 구현할 수 있습니다.
<div class="toc"> <ul> <li><a href="#section1">섹션 1</a></li> <li><a href="#section2">섹션 2</a></li> </ul> </div> <section id="section1"> <h2>첫 번째 섹션 제목</h2> <p>여기에 섹션 1의 내용이 들어갑니다.</p> </section> <section id="section2"> <h2>두 번째 섹션 제목</h2> <p>여기에 섹션 2의 내용이 들어갑니다.</p> </section>
document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const targetId = this.getAttribute('href'); const targetElement = document.querySelector(targetId); if (targetElement) { targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); });
이 스크립트는 모든 앵커 링크에 클릭 이벤트를 추가하여, 기본 이동 동작을 막고 scrollIntoView() 메서드를 이용해 부드러운 스크롤을 실행합니다.
주의사항 및 팁
- CSS 방식의 장점: 코드가 간결하고 브라우저의 기본 기능을 활용하여 성능이 매우 뛰어납니다.
- JavaScript 방식의 장점: 스크롤 동작을 더 세밀하게 제어하거나, 스크롤 전후에 추가적인 로직을 실행할 수 있습니다.
- scrollIntoView() 메서드는 하드웨어 가속을 활용하여 성능이 좋으므로, jQuery의 animate()와 같은 라이브러리 기반의 애니메이션보다 효율적입니다.
CSS scroll-behavior와 JavaScript scrollIntoView({behavior: 'smooth'})는 IE(Internet Explorer)에서는 지원되지 않습니다. IE 지원이 필요하다면 별도의 스크롤 라이브러리를 사용해야 합니다.
'스크립트' 카테고리의 다른 글
티스토리 북클럽 스킨 목차 자동 생성 스크립트 (0) | 2025.08.05 |
---|
댓글