1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
---
title: contain
slug: Web/CSS/contain
tags:
- CSS
- CSS Containment
- CSS Property
- Reference
- Web
- 'recipe:css-property'
translation_of: Web/CSS/contain
---
<div>{{CSSRef}}</div>
<p><a href="/ko/docs/Web/CSS">CSS</a> <strong><code>contain</code></strong> 속성은 특정 요소와 콘텐츠가 문서 트리의 다른 부위와 독립되어있음을 나타낼 때 사용합니다. 브라우저는 이 정보를 사용해 레이아웃, 스타일, 페인트, 크기, 또는 그 조합의 계산을 전체 페이지 DOM 대신 일부에서만 수행할 수 있으므로 뚜렷한 성능 상 이점을 얻을 수 있습니다.</p>
<p><code>contain</code> 속성은 위젯 내부 콘텐츠가 외부에 부작용을 끼치는 것을 방지할 수 있으므로 서로 독립된 많은 양의 위젯이 존재하는 페이지에서 유용합니다.</p>
<div class="blockIndicator note">
<p><strong>참고:</strong> <code>paint</code>, <code>strict</code>, <code>content</code> 값을 설정할 경우 다음을 생성합니다.</p>
<ol>
<li>새로운 <a href="/ko/docs/Web/CSS/All_About_The_Containing_Block">컨테이닝 블록</a> ({{cssxref("position")}} 속성이 <code>absolute</code> 또는 <code>fixed</code>인 자손을 위함).</li>
<li>새로운 <a href="/ko/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context">쌓임 맥락</a>.</li>
<li>새로운 <a href="/ko/docs/Web/Guide/CSS/Block_formatting_context">블록 서식 맥락</a>.</li>
</ol>
</div>
<h2 id="구문">구문</h2>
<pre class="brush: css no-line-numbers notranslate">/* 키워드 값 */
contain: none;
contain: strict;
contain: content;
contain: size;
contain: layout;
contain: style;
contain: paint;
/* 다중 값 */
contain: size paint;
contain: size layout paint;
/* 전역 값 */
contain: inherit;
contain: initial;
contain: unset;</pre>
<p><code>contain</code> 속성은 다음 방법 중 하나를 사용해 지정합니다.</p>
<ul>
<li><code>none</code>, <code>strict</code>, <code>content</code> 키워드 중 하나를 사용.</li>
<li><code>size</code>, <code>layout</code>, <code>style</code>, <code>paint</code> 키워드를 임의 순서로 하나 이상 사용.</li>
</ul>
<h3 id="값">값</h3>
<dl>
<dt><code>none</code></dt>
<dd>아무것도 격리하지 않고 요소를 평범하게 렌더링합니다.</dd>
<dt><code>strict</code></dt>
<dd><code>style</code>을 제외한 모든 격리 규칙을 적용합니다. <code>contain: size layout paint</code>와 같습니다.</dd>
<dt><code>content</code></dt>
<dd><code>size</code>와 <code>style</code>을 제외한 모든 격리 규칙을 적용합니다. <code>contain: layout paint</code>와 같습니다.</dd>
<dt><code>size</code></dt>
<dd>요소의 크기를 계산할 때 자손의 크기는 고려하지 않아도 됨을 나타냅니다.</dd>
<dt><code>layout</code></dt>
<dd>요소 외부의 어느 것도 내부 레이아웃에 영향을 주지 않고, 그 반대도 성립함을 나타냅니다.</dd>
<dt><code>style</code></dt>
<dd>요소 자신과 자손 외에도 영향을 주는 속성이라도 그 영향 범위가 자신을 벗어나지 않음을 나타냅니다. 이 값은 명세에서 "제외 고려" 대상이므로 모든 브라우저가 지원하지 않을 수도 있음을 참고하세요.</dd>
<dt><code>paint</code></dt>
<dd>요소의 자손이 자신의 범위 바깥에 그려지지 않음을 나타냅니다. 이 값을 지정한 요소의 경우, 요소가 화면 밖에 위치할 경우 당연히 그 안의 자손도 화면 안에 들어오지 않을 것이므로 브라우저는 그 안의 요소를 고려하지 않아도 됩니다. 그러나 만약 자손이 범위 밖으로 넘칠 경우에는 요소의 테두리 상자에서 잘라냅니다.</dd>
</dl>
<h2 id="형식_정의">형식 정의</h2>
<p>{{cssinfo}}</p>
<h2 id="형식_구문">형식 구문</h2>
{{csssyntax}}
<h2 id="예제">예제</h2>
<h3 id="간단한_레이아웃">간단한 레이아웃</h3>
<p>다음 마크업은 각각의 콘텐츠를 가진 여러 개의 글을 가정합니다.</p>
<pre class="brush: html notranslate"><h1>My blog</h1>
<article>
<h2>Heading of a nice article</h2>
<p>Content here.</p>
</article>
<article>
<h2>Another heading of another article</h2>
<img src="graphic.jpg" alt="photo">
<p>More content here.</p>
</article></pre>
<p>각 <code><article></code>과 <code><img></code>엔 테두리를 부여하고, 이미지는 모두 좌측으로 플로팅합니다.</p>
<pre class="brush: css notranslate">img {
float: left;
border: 3px solid black;
}
article {
border: 1px solid black;
}</pre>
<p>{{EmbedLiveSample('간단한_레이아웃', '100%', '300')}}</p>
<h3 id="플로팅_간섭">플로팅 간섭</h3>
<p>첫 번째 글의 마지막에 다른 이미지를 넣게 되면 많은 양의 DOM 트리가 다시 레이아웃이나 페인트 과정을 거쳐야 하며, 두 번째 글의 레이아웃에도 간섭하게 됩니다.</p>
<pre class="brush: html notranslate"><h1>My blog</h1>
<article>
<h2>Heading of a nice article</h2>
<p>Content here.</p>
<img src="i-just-showed-up.jpg" alt="social">
</article>
<article>
<h2>Another heading of another article</h2>
<img src="graphic.jpg" alt="photo">
<p>More content here.</p>
</article></pre>
<div class="hidden">
<pre class="brush: css notranslate">img {
float: left;
border: 3px solid black;
}
article {
border: 1px solid black;
}</pre>
</div>
<p>아래의 라이브 샘플에서, 플로팅 작동 방식으로 인해 첫 번째 이미지가 두 번째 글 안으로 들어가버린 모습을 볼 수 있습니다.</p>
<p>{{EmbedLiveSample('플로팅_간섭', '100%', '300')}}</p>
<h3 id="contain으로_수정하기"><code>contain</code>으로 수정하기</h3>
<p>각각의 <code>article</code>에 <code>contain: content</code>를 지정해주면, 새로운 요소를 추가할 때 그 하위 트리만 계산하고 바깥은 고려하지 않아도 된다는 것을 브라우저가 인식합니다.</p>
<div class="hidden">
<pre class="brush: html notranslate"><h1>My blog</h1>
<article>
<h2>Heading of a nice article</h2>
<p>Content here.</p>
<img src="i-just-showed-up.jpg" alt="social">
</article>
<article>
<h2>Another heading of another article</h2>
<img src="graphic.jpg" alt="photo">
<p>More content here.</p>
</article></pre>
</div>
<pre class="brush: css notranslate">img {
float: left;
border: 3px solid black;
}
article {
border: 1px solid black;
contain: content;
}</pre>
<p>또한 첫 번째 이미지가 플로팅으로 인해 아래로 넘어가지 않고, 컨테이너 요소의 범위 안에 머무르는 것도 확인할 수 있습니다.</p>
<p>{{EmbedLiveSample('contain으로_수정하기', '100%', '330')}}</p>
<h2 id="명세">명세</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('CSS Containment', '#contain-property', 'contain')}}</td>
<td>{{Spec2('CSS Containment')}}</td>
<td>Initial definition</td>
</tr>
</tbody>
</table>
<h2 id="브라우저_호환성">브라우저 호환성</h2>
<p>{{Compat("css.properties.contain")}}</p>
<h2 id="같이_보기">같이 보기</h2>
<ul>
<li><a href="/ko/docs/Web/CSS/CSS_Containment">CSS Containment</a></li>
<li>CSS {{cssxref("position")}} 속성</li>
</ul>
|