버튼을 문서 흐름 밖으로 빼서 화면(뷰포트) 기준으로 고정한다. 네이티브에서는 스크롤 컨테이너 밖, 화면 레이아웃에 직접 얹고, 웹에서는 `position: fixed`(또는 앱 내부 스크롤 컨테이너 기준 `sticky`)를 쓴다. 스크롤이 아무리 내려가도 버튼의 화면 좌표는 바뀌지 않는다.
여기서 가장 흔히 빠지는 함정은 콘텐츠 쪽이다 — CTA가 콘텐츠 위에 떠 있는 별도 레이어이기 때문에, 스크롤 영역 맨 아래에 CTA 높이만큼 `padding-bottom`을 더해주지 않으면 마지막 문단이나 버튼이 CTA 뒤에 가려 영영 눌리지 않는다.
또 하나는 세이프 에어리어다. 홈 인디케이터가 있는 기기에서 CTA를 화면 맨 밑에 딱 붙이면 제스처 영역과 겹치므로, `padding-bottom: max(16px, env(safe-area-inset-bottom))`처럼 인셋을 더해 버튼을 살짝 띄워야 한다.
언제 쓰나
상품 상세, 결제, 지원서처럼 스크롤 길이는 예측할 수 없지만 핵심 행동 하나는 항상 손에 닿아야 하는 화면에 씁니다. 스티키 CTA를 여러 개 겹쳐 쌓지 않습니다.