일반적으로, 블록 박스의 콘텐츠는 박스의 콘텐츠 가장자리 내에 제한됩니다. 특정 경우에는 박스가 오버플로우하여 콘텐츠가 박스 밖으로 부분적으로 또는 완전히 벗어날 수 있습니다. 예를 들어:
오버플로우가 발생할 때마다, 'overflow' 속성은 박스가 패딩 가장자리에 클리핑되는지 여부, 그리고 그렇다면 클리핑된 콘텐츠에 접근할 수 있도록 스크롤 메커니즘이 제공되는지 여부를 지정합니다.
이름: | overflow |
---|---|
값: | visible | hidden | scroll | auto | inherit |
초기값: | visible |
적용 대상: | 블록 컨테이너 및 포맷팅 컨텍스트를 생성하는 박스 |
상속됨: | 아니요 |
백분율: | N/A |
미디어: | 시각적 |
계산값: | 지정된 대로 |
이 속성은 블록 컨테이너 요소의 콘텐츠가 요소의 박스를 넘칠 때 클리핑할지 여부를 지정합니다. 이는 뷰포트 또는 요소의 조상 중 하나를 컨테이닝 블록으로 가지는 하위 요소 및 그 콘텐츠와 하위 요소를 제외한 모든 콘텐츠의 클리핑에 영향을 미칩니다. 값의 의미는 다음과 같습니다:
'overflow'가 'visible'로 설정되었더라도, 콘텐츠는 기본 운영 환경에 의해 UA의 문서 창에 클리핑될 수 있습니다.
테이블 요소('display: table')에서 'overflow'는 테이블 박스에 적용되며 (테이블 래퍼 박스가 아님), 'hidden' 이외의 모든 값은 'visible'로 처리됩니다.
UA는 루트 요소에 설정된 'overflow' 속성을 뷰포트에 적용해야 합니다. 루트 요소가 HTML "HTML" 요소 또는 XHTML "html" 요소이고, 해당 요소가 HTML "BODY" 요소 또는 XHTML "body" 요소를 자식으로 가지고 있는 경우, 루트 요소의 값이 'visible'인 경우, 사용자 에이전트는 대신 첫 번째 자식 요소의 'overflow' 속성을 뷰포트에 적용해야 합니다. 뷰포트에 사용된 'visible' 값은 'auto'로 해석되어야 합니다. 값이 전파된 요소는 'overflow'의 사용된 값이 'visible'이어야 합니다.
요소의 박스 가장자리에 스크롤바가 배치되는 경우, 스크롤바는 내부 테두리 가장자리와 외부 패딩 가장자리 사이에 삽입되어야 합니다. 스크롤바가 차지하는 공간은 스크롤바를 가진 요소가 형성하는 컨테이닝 블록의 치수에서 빼야 합니다.
다음은 컨테이닝 블록( <div>
에 의해 설정됨)에 비해 너무 큰
블록 인용(<blockquote>
)의 예입니다. 다음은 소스입니다:
<div>
<blockquote>
<p>I didn't like the play, but then I saw
it under adverse conditions - the curtain was up.</p>
<cite>- Groucho Marx</cite>
</blockquote>
</div>
다음은 생성된 박스의 크기와 스타일을 제어하는 스타일 시트입니다:
div { width : 100px; height: 100px;
border: thin solid red;
}
blockquote { width : 125px; height : 100px;
margin-top: 50px; margin-left: 50px;
border: thin dashed black
}
cite { display: block;
text-align : right;
border: none
}
'overflow'의
초기값은 'visible'이므로
<blockquote>
는 클리핑 없이 다음과 같이 포맷팅됩니다:
<div>
에 대해 'overflow'를 'hidden'으로 설정하면,
<blockquote>
는 컨테이닝 <div>
에 의해 클리핑됩니다:
'scroll' 값을 지정하면, 지원하는 사용자 에이전트는 클리핑된 콘텐츠에 액세스할 수 있도록 스크롤링 메커니즘을 표시해야 합니다.
마지막으로, 절대적으로 위치된 요소가 오버플로우 부모와 혼합된 경우를 고려해 보십시오.
스타일 시트:
container { position: relative; border: solid; }
scroller { overflow: scroll; height: 5em; margin: 5em; }
satellite { position: absolute; top: 0; }
body { height: 10em; }
문서 조각:
<container>
<scroller>
<satellite/>
<body/>
</scroller>
</container>
이 예제에서 "scroller" 요소는 "satellite" 요소를 스크롤하지 않습니다. 이는 후자의 컨테이닝 블록이 오버플로우가 클리핑되고 스크롤되는 요소 외부에 있기 때문입니다.
클리핑 영역은 요소의 테두리 박스에서 보이는 부분을 정의합니다. 기본적으로 요소는 클리핑되지 않습니다. 하지만, 'clip' 속성을 사용하여 명시적으로 클리핑 영역을 설정할 수 있습니다.
이름: | clip |
---|---|
값: | <shape> | auto | inherit |
초기값: | auto |
적용 대상: | 절대적으로 위치된 요소 |
상속됨: | 아니요 |
백분율: | N/A |
미디어: | 시각적 |
계산값: | 'auto'로 지정된 경우 'auto', 그렇지 않으면 네 개의 값을 가진 사각형으로, 각 값은 'auto'로 지정된 경우 'auto'이며, 그렇지 않으면 계산된 길이 |
'clip' 속성은 절대적으로 위치된 요소에만 적용됩니다. 값의 의미는 다음과 같습니다:
<top>, <right>, <bottom>, 및 <left>는 <length> 값을 가지거나 'auto'가 될 수 있습니다. 음수 길이는 허용됩니다. 'auto' 값은 지정된 클리핑 영역의 특정 가장자리가 요소의 생성된 테두리 박스 가장자리와 동일함을 의미합니다(즉, 'auto'는 <top> 및 <left>에 대해 '0'과 동일하며, <bottom>에 대해 사용된 높이 값에 수직 패딩 및 테두리 두께의 합을 더한 값과 동일하며, <right>에 대해 사용된 너비 값에 수평 패딩 및 테두리 두께의 합을 더한 값과 동일하며, 네 'auto' 값이 요소의 테두리 박스와 동일한 클리핑 영역을 생성합니다).
좌표가 픽셀 좌표로 반올림되는 경우, <left>와 <right> 값이 동일하거나 <top>과 <bottom> 값이 동일할 때 픽셀이 남아 보이지 않도록 주의해야 합니다. 반대로 이러한 값이 'auto'인 경우, 요소의 테두리 박스 내의 픽셀이 숨겨지지 않도록 해야 합니다.
요소의 클리핑 영역은 요소의 클리핑 영역 밖에 있는 요소(예: 콘텐츠, 자식, 배경, 테두리, 텍스트 장식, 외곽선 및 가시적 스크롤 메커니즘 등)를 모두 클리핑합니다. 클리핑된 콘텐츠는 오버플로우를 발생시키지 않습니다.
요소의 조상도 그들의 콘텐츠의 일부를 클리핑할 수 있습니다(예: 자체 'clip' 속성 및/또는 'overflow' 속성이 'visible'이 아닌 경우); 렌더링되는 내용은 누적된 교집합입니다.
클리핑 영역이 UA의 문서 창 경계를 초과하는 경우, 기본 운영 환경에 의해 콘텐츠가 해당 창에 클리핑될 수 있습니다.
예제: 다음 두 규칙:
p#one { clip: rect(5px, 40px, 45px, 5px); }
p#two { clip: rect(5px, 55px, 45px, 5px); }
그리고 두 P 요소가 각각 50 x 55 px이라고 가정하면, 이는 각각 아래 삽화에서 점선으로 구분된 사각형 클리핑 영역을 생성합니다:
참고. CSS 2.2에서 모든 클리핑 영역은 사각형입니다. 향후 확장을 통해 비사각형 클리핑이 허용될 것으로 기대됩니다. 또한, 형상이 각 가장자리에서 오프셋 되는 구문을 다시 도입할 수 있습니다.
이름: | visibility |
---|---|
값: | visible | hidden | collapse | inherit |
초기값: | visible |
적용 대상: | 모든 요소 |
상속됨: | 예 |
백분율: | N/A |
미디어: | 시각적 |
계산값: | 지정된 대로 |
'visibility' 속성은 요소가 생성한 박스가 렌더링되는지 여부를 지정합니다. 보이지 않는 박스도 레이아웃에 영향을 미칩니다 (박스 생성을 완전히 억제하려면 'display' 속성을 'none'으로 설정하십시오). 값의 의미는 다음과 같습니다:
이 속성은 스크립트와 함께 사용하여 동적 효과를 생성할 수 있습니다.
다음 예제에서, 양식 버튼을 누르면 작성자가 정의한 스크립트 함수가 호출되어 해당 박스를 보이게 하고 다른 박스를 숨깁니다. 이 박스들은 동일한 크기와 위치를 가지므로, 효과적으로 하나가 다른 하나를 대체합니다. (스크립트 코드는 가상의 스크립트 언어로 작성되었습니다. CSS를 지원하는 UA에서 효과가 있을 수도 있고 없을 수도 있습니다.)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD><TITLE>Dynamic visibility example</TITLE>
<META
http-equiv="Content-Script-Type"
content="application/x-hypothetical-scripting-language">
<STYLE type="text/css">
<!--
#container1 { position: absolute;
top: 2in; left: 2in; width: 2in }
#container2 { position: absolute;
top: 2in; left: 2in; width: 2in;
visibility: hidden; }
-->
</STYLE>
</HEAD>
<BODY>
<P>Choose a suspect:</P>
<DIV id="container1">
<IMG alt="Al Capone"
width="100" height="100"
src="suspect1.png">
<P>Name: Al Capone</P>
<P>Residence: Chicago</P>
</DIV>
<DIV id="container2">
<IMG alt="Lucky Luciano"
width="100" height="100"
src="suspect2.png">
<P>Name: Lucky Luciano</P>
<P>Residence: New York</P>
</DIV>
<FORM method="post"
action="http://www.suspect.org/process-bums">
<P>
<INPUT name="Capone" type="button"
value="Capone"
onclick='show("container1");hide("container2")'>
<INPUT name="Luciano" type="button"
value="Luciano"
onclick='show("container2");hide("container1")'>
</FORM>
</BODY>
</HTML>