`overflow: visible`(기본값)은 아무 조치도 취하지 않습니다 — 콘텐츠가 상자 경계를 그냥 넘어가서 옆·아래 요소와 겹칠 수 있습니다. `hidden`은 넘치는 부분을 잘라내고 스크롤 수단은 전혀 제공하지 않습니다 — 사용자는 잘린 내용을 볼 방법이 없습니다. `scroll`은 실제로 넘치든 안 넘치든 스크롤바를 항상 표시하고, `auto`는 콘텐츠가 실제로 넘칠 때만 스크롤바를 만듭니다 — 대부분의 "스크롤되는 영역"은 `auto`가 정답입니다.
`clip`(비교적 최근 값)은 `hidden`과 비슷하게 자르지만 스크롤을 **프로그래밍적으로도** 막습니다 — `hidden`은 `scrollTo()` 같은 JS로 몰래 스크롤시킬 수 있지만 `clip`은 그마저 안 됩니다. 또 `overflow-clip-margin`으로 "경계에서 몇 px까지는 봐준다"는 여유를 줄 수 있어 그림자 등이 살짝 걸쳐도 안 잘리게 만들 수 있습니다.
가로·세로를 따로 지정하려면 `overflow-x`·`overflow-y`를 씁니다. 흔한 실수는 `overflow: hidden`을 부모에 걸어뒀는데 그 부모가 `position: sticky` 자식을 품고 있는 경우입니다 — sticky는 스크롤 가능한 가장 가까운 조상의 `overflow`가 `visible`이 아니면 작동을 멈춥니다.
언제 쓰나
모달 안 긴 목록, 채팅창, 코드 블록처럼 "화면 크기는 고정하고 안의 내용만 스크롤되게" 만들 때 `auto`가 기본값입니다. 디자인 요소가 상자 밖으로 살짝 삐져나오는 의도된 효과라면 `visible`을 그대로 둡니다.