scrollIntoView()는 JavaScript에서 특정 DOM 요소가 사용자 화면(Viewport) 안에 보이도록 자동으로 스크롤을 이동시켜주는 메서드입니다.
사용자 경험(UX)을 향상시키는 데 아주 유용하며, 클릭하면 부드럽게 특정 영역으로 이동하는 UI를 구현할 때 자주 사용됩니다.
element.scrollIntoView();
element는 스크롤 대상으로 사용할 DOM 요소입니다.
이 기본 호출은 해당 요소가 화면의 상단(start) 에 위치하도록 스크롤합니다.
scrollIntoView()는 옵션 객체를 인자로 받을 수 있으며, 이 옵션을 통해 스크롤 방식과 위치를 더 정교하게 제어할 수 있습니다.
element.scrollIntoView({
behavior: "smooth", // 스크롤 애니메이션: "auto" 또는 "smooth"
block: "center", // 수직 정렬: "start", "center", "end", "nearest"
inline: "nearest" // 수평 정렬
});
behavior
"auto": 기본 스크롤 (애니메이션 없음)"smooth": 부드러운 스크롤 애니메이션block (수직 위치)
"start": 요소의 상단이 뷰포트 상단에 정렬"center": 요소가 뷰포트 중앙에 정렬"end": 요소의 하단이 뷰포트 하단에 정렬"nearest": 현재 위치에서 가장 가까운 쪽으로 스크롤inline
버튼을 클릭하면 댓글 영역으로 부드럽게 스크롤되는 예제입니다.
부모 요소가 overflow: hidden 이거나, 스크롤이 막혀 있으면 동작하지 않습니다.
→ scrollIntoView()는 스크롤 가능한 가장 가까운 조상 요소를 기준으로 동작합니다.
고정 헤더가 있는 경우 요소가 가려질 수 있습니다.
→ CSS에서 scroll-margin-top 속성으로 여백을 추가하면 해결할 수 있습니다.
.section {
scroll-margin-top: 80px; /* 고정 헤더 높이만큼 여백 추가 */
}
고정 네비게이션 바가 요소를 가리지 않도록 하려면 아래 방법을 사용할 수 있습니다.
scroll-margin-top 사용 (추천).section {
scroll-margin-top: 100px;
}
const target = document.getElementById("commentSection");
const yOffset = -100; // 여백 조정
const y = target.getBoundingClientRect().top + window.pageYOffset + yOffset;
window.scrollTo({ top: y, behavior: "smooth" });
| 기능 | 설명 |
|---|---|
| 자동 스크롤 이동 | 원하는 요소로 스크롤 |
| 옵션 제어 | 부드러운 이동, 위치 정렬 등 설정 가능 |
| 유지보수 편리 | 복잡한 계산 없이 간결한 구현 가능 |
scrollIntoView()는 자바스크립트에서 제공하는 매우 유용한 기능으로,
사용자에게 자연스러운 스크롤 경험을 제공하면서도 코드 유지보수성을 높여줍니다.
특히 단일 페이지 애플리케이션(SPA)에서 내부 이동을 구현할 때 유용하게 사용할 수 있습니다.