`position: sticky`인 헤더가 실제로 상단에 "붙은 순간"을 감지해서 그림자를 넣는 것 같은 연출은, CSS만으로는 붙었는지 여부를 알 방법이 없어서 항상 IntersectionObserver로 sentinel 엘리먼트를 관찰하는 JS가 필요했습니다.
`@container scroll-state(stuck: top)`은 그 상태를 컨테이너 쿼리 문법으로 직접 물어봅니다. 부모에 `container-type: scroll-state`를 주면, 자식이 스크롤 컨테이너 안에서 stuck·snapped·scrollable 같은 상태에 따라 스타일을 바꿀 수 있습니다. scroll-driven-animation이 "스크롤 진행률"을 다룬다면, 이건 "스크롤로 인한 이산적 상태 변화"를 다룹니다 — 서로 보완적입니다.
기본 지원은 caniuse/MDN baseline을 확인하세요. 미지원 브라우저에서는 지금처럼 IntersectionObserver로 sentinel 요소의 교차 여부를 감시해 클래스를 토글하는 것이 표준 대안입니다.
언제 쓰나
sticky 헤더가 붙었을 때 그림자를 넣거나, 스크롤 스냅 상태에 따라 버튼을 활성화할 때.