스티키 요소가 스티키 상태가 되는 시점을 감지하는 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
프론트엔드 개발자, UI/UX 설계자 (중급 이상)
핵심 요약
position: sticky
로 스티키 효과를 적용한 요소의 상태 변화를 감지하기 위해IntersectionObserver
API를 활용해야 함- CSS/JavaScript에 내장된 감지 기능 없음 →
IntersectionObserver
로 해결 container queries
는 현재 Chrome만 지원 (향후 표준화 예정)
섹션별 세부 요약
1. 문제 상황
- 스티키 헤더가 스크롤 시 스타일이 변화하는 효과 구현 (예: Luma 사이트의 이벤트 날짜 헤딩)
position: sticky
는 스티키 상태 적용만 가능, 상태 변화 감지 기능 없음- CSS 선택자/JavaScript 이벤트로 상태 감지 불가
2. 해결 방법
IntersectionObserver
API 사용:
- 스티키 요소가 viewport에 진입/이탈 시 콜백 함수 실행
- rootMargin
과 threshold
설정으로 감지 정확도 조정
- 예시 코드:
```javascript
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('sticky');
}
});
}, { threshold: [0.5] });
```
3. 미래 기술
container queries
로 스티키 상태 감지 가능 (현재 Chrome만 지원)- 기존
IntersectionObserver
대체 가능성 있지만, 브라우저 호환성 문제 존재
결론
IntersectionObserver
를 사용해 스티키 요소의 상태 변화를 감지하는 것이 실무에서 효과적container queries
는 향후 표준화되면 더 간단한 구현이 가능하나, 현재는 호환성 검토 필요- 스티키 상태에 따른 UI 변화는 UX 품질 향상에 기여하며,
IntersectionObserver
의 가벼운 처리량이 장점