AD JB Toolbox 01

CSS / Reference / overflow

overflow는 내용이 박스의 표시 영역을 넘을 때 보이게 둘지, 자를지, 스크롤할지 정합니다. 필요한 경우에만 스크롤하려면 auto를 사용하고, hidden과 clip은 스크롤 컨테이너 동작이 서로 다르다는 점을 확인해야 합니다.

문법과 주요 값

속성 초기값 상속 주요 적용 조건
overflow visible 아니요 블록·Flex·Grid 컨테이너의 넘침

초기값은 브라우저 기본 스타일시트가 HTML 요소에 적용한 값과 같다는 뜻이 아닙니다. 실제 값은 개발자 도구의 Computed에서 확인하세요.

.panel { max-height: 12rem; overflow: auto; }
.decoration { overflow: clip; }
값 또는 구분 동작과 선택 기준
visible 넘친 내용 표시; 기본적인 스크롤 컨테이너가 아님
hidden 넘친 내용을 숨기지만 프로그램적 스크롤 가능
clip 내용을 잘라 스크롤 자체를 허용하지 않음
scroll 스크롤 동작 마련; 스크롤바 모양은 환경에 따라 다름
auto 필요할 때 스크롤할 수 있는 영역 마련

값과 적용 조건은 MDN overflow에서 확인할 수 있습니다.

실행 예제와 결과 비교

아래 전체 코드를 UTF-8 형식의 overflow-example.html 파일로 저장한 뒤 브라우저로 여세요. 예제용 CSS는 이 파일 안에만 넣고 사이트 전체 스타일시트에 그대로 붙여 넣지 않습니다.

<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>overflow 비교 예제</title>
<style>
body { margin: 0; color: #20242b; background: #fff; font: 16px/1.7 "Malgun Gothic", sans-serif; }
#demo { padding: 24px; max-width: 820px; margin: auto; }
h1 { font-size: 22px; margin: 0 0 20px; }
.samples { display: flex; flex-wrap: wrap; gap: 24px; }
.label { margin: 0 0 8px; font-weight: 700; }
.target, .reference { width: 240px; height: 120px; border: 2px solid #006c9c; }
.target { overflow: auto; }
.reference { overflow: hidden; }
.long { height: 280px; background: linear-gradient(#bfe3ff, #ffd166); }
</style>
</head>
<body>
<main id="demo">
<h1>overflow 적용 비교</h1>
<section class="samples"><div class="a"><p class="label">auto</p><div class="target"><div class="long">내용이 박스보다 깁니다.<br>박스 안을 스크롤해 확인하세요.</div></div></div><div class="b"><p class="label">hidden</p><div class="reference"><div class="long">내용이 박스보다 깁니다.<br>박스 안을 스크롤해 확인하세요.</div></div></div></section>
</main>
</body>
</html>

auto 박스는 내용이 긴 만큼 내부를 스크롤할 수 있습니다. hidden 박스는 넘친 내용이 보이지 않으며 일반적인 스크롤바를 제공하지 않습니다.

overflow의 지정값과 비교값을 같은 예제에서 보여 주는 브라우저 화면

크기 제한과 축별 설정

내용이 넘치려면 해당 축의 크기가 제한되어야 합니다. 높이를 제한하지 않은 블록은 내용에 맞춰 늘어날 수 있습니다. 값 두 개는 가로·세로 순서이며, 한 축이 visible이고 다른 축이 hidden 또는 auto이면 visible이 auto로 계산되는 등 축 사이의 조정 규칙이 있습니다.

스크롤과 내용 잘림의 선택

hidden은 스크롤 컨테이너를 만들고 포커스나 스크립트로 이동할 수 있지만 clip은 그러한 스크롤을 허용하지 않습니다. clip만으로 새 블록 서식 맥락을 만드는 것은 아니므로 필요하면 display: flow-root를 따로 검토합니다. 폼 설명이나 키보드 포커스 표시가 잘리지 않는지도 확인하세요.

hidden과 clip의 스크롤 차이

다음 전체 문서를 css-reference-10599-practice.html로 UTF-8 저장한 뒤 브라우저에서 엽니다. 다른 예제 파일에 중첩해서 붙이지 않고 별도 파일로 시험합니다.

<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>hidden과 clip의 스크롤 차이</title>
  <style>
    body { margin: 16px; color: #20242b; font: 16px/1.7 sans-serif; }
    main { max-width: 52rem; margin: auto; }
    h1 { font-size: 1.35rem; }
    .samples { display: flex; flex-wrap: wrap; gap: 24px; }
    .samples > * { max-width: 100%; min-width: 0; }
    :focus-visible { outline: 3px solid #005fcc; outline-offset: 3px; }
.box { height:100px;max-width:240px;border:2px solid #718096;background:#e6f2ff; } .tall { height:260px;background:linear-gradient(#006c9c,#ffd166); } #hidden {overflow:hidden;} #clip {overflow:clip;}
  </style>
</head>
<body>
<main>
  <h1>hidden과 clip의 스크롤 차이</h1>
<p>hidden</p><div class="box" id="hidden"><div class="tall"></div></div><p>clip</p><div class="box" id="clip"><div class="tall"></div></div><button id="test" type="button">scrollTop = 50 확인</button> <button id="reset" type="button">복구</button><p id="result" aria-live="polite"></p><script>function test(value){const h=document.getElementById("hidden"),c=document.getElementById("clip");h.scrollTop=value;c.scrollTop=value;document.getElementById("result").textContent="hidden: "+h.scrollTop+" / clip: "+c.scrollTop;}document.getElementById("test").onclick=()=>test(50);document.getElementById("reset").onclick=()=>test(0);</script>
</main>
</body>
</html>

버튼을 누르면 hidden은 50, clip은 0이 예상됩니다. 둘 다 스크롤바가 없어도 hidden은 스크롤 컨테이너이고 clip은 그렇지 않습니다. 복구 버튼으로 hidden을 0으로 되돌립니다. overflow-x/y의 다른 값 조합은 계산값을 바꿀 수 있으므로 이 실습에서는 두 축을 함께 지정했습니다.

내용이 넘치는 원인과 스크롤 영역을 함께 살펴보려면 넘치는 콘텐츠와 긴 문자열 처리하기를 참고하세요. 본문의 조건과 함께 비교할 관련 속성은 white-space입니다.

적용되지 않거나 예상과 다를 때

  • auto가 동작하지 않으면 width, height 또는 max-height가 실제로 제한되어 있는지 확인합니다.
  • flex 자식이 늘어나면 min-width: 0 또는 min-height: 0이 필요한 구조인지 확인합니다.
같은 카테고리의 다른 글
CSS / Reference / color

CSS / Reference / color

전경색과 currentColor의 연결을 같은 박스에서 확인합니다. 상속, 배경색과의 차이, 대비와 색상 이외의 정보 표시 기준을 설명합니다.

CSS / Reference / background-size

CSS / Reference / background-size

cover·contain을 같은 이미지와 영역에서 비교합니다. 비율 유지, 잘림, 빈 공간과 padding-box 기준의 크기 계산을 함께 확인합니다.

CSS / Reference / aspect-ratio

CSS / Reference / aspect-ratio

선호 가로세로 비율과 이미지의 고유 비율을 구분합니다. auto 조합, 확정 크기, cover·contain의 잘림과 빈 공간을 실행 예제로 비교합니다.

CSS / Reference / background-origin

CSS / Reference / background-origin

배경의 위치·크기 기준을 content·padding·border 영역으로 바꾸어 비교합니다. clip과의 차이 및 백분율 크기 기준을 수치로 확인합니다.

CSS / Reference / list-style-type

CSS / Reference / list-style-type

목록의 의미를 유지하면서 마커 모양과 번호 표시를 변경합니다. start 속성, 이미지 마커와 단축 속성의 영향까지 예제로 확인합니다.

CSS / Reference / background-repeat

CSS / Reference / background-repeat

repeat·no-repeat·space·round를 같은 타일로 비교합니다. 반복 방향, 타일 간격과 크기 조정, 한 축에 한 타일만 들어가는 조건을 살펴봅니다.

CSS / Reference / text-align

CSS / Reference / text-align

문단 안의 인라인 내용을 정렬하고 블록 자체의 배치와 구분합니다. start·end의 쓰기 방향과 양끝·마지막 줄 정렬을 비교합니다.

CSS / Reference / border-spacing

CSS / Reference / border-spacing

표 셀의 가로·세로 간격을 지정하고 padding과 구분합니다. separate·collapse 및 간격 0의 차이를 같은 표에서 비교합니다.

CSS / Reference / box-shadow

CSS / Reference / box-shadow

박스 그림자의 위치·흐림·확산·겹침 순서를 조정합니다. 한 값씩 바꾸는 실습으로 그림자가 레이아웃 크기와 상위 잘림에 미치는 관계를 확인합니다.

CSS / Reference / box-sizing

CSS / Reference / box-sizing

content-box·border-box의 내용과 외곽 너비를 계산합니다. 여백과 테두리보다 작은 지정 너비에서 생기는 최소 크기 예외도 실습합니다.