position: absolute
position
속성의 absolute
값은
컨테이닝 블록(containing block)을 기준으로,
top
, bottom
, left
, right
속성을 사용해 절대 위치를 지정하는 방식(Absolute Positioning)입니다.
알아두세요!
position
속성은 table-column-group
(<colgroup>
) 및 table-column
(<col>
)에 적용되지 않으므로, 해당하는 요소들은 position: absolute
에 영향을 받지 않습니다.
absolute
에서 컨테이닝 블록(containing block)
position: absolute
에서 Containing Block이란
position: absolute
로 설정된 요소의 위치를 지정하는 기준이 되는 부모 요소 또는 조상 요소를 말합니다.
뷰포트(viewport)는 웹 브라우저 용어로, 현재 창(또는 전체 화면 모드로 문서를 보고 있는 경우 화면)에 표시되는 문서의 부분으로 웹 페이지가 보여지는 영역을 의미합니다.
하지만 다음과 같은 상황에서는 position: absolute
에서 containing block은 다음 중 하나를 갖는 가장 가까운 조상 요소의 Padding box
가 될 수도 있습니다.
filter
또는backdrop-filter
또는transform
또는perspective
속성이none
이 아닌 값으로 설정된 요소will-change
속성의 값이filter
또는backdrop-filter
또는transform
또는perspective
인 값으로 설정된 요소contain
속성의 값이layout
또는paint
또는strict
또는content
값으로 설정된 요소content-visibility
속성의 값이auto
값으로 설정된 요소
주의하세요!
브라우저마다 perspective
와 filter
속성이 Containing Block 형성에 기여하는 방식이 다를 수 있으므로, 특정 브라우저에서 예상과 다른 결과가 나타날 수 있습니다.
position: absolute
로 설정된 요소의 위치 지정 방식을 absolute positioning이라고 합니다.
absolute positioning은 Absolute Positioning 레이아웃 모델(Layout Model)을 참조하세요!
Absolute Positioning 레이아웃 모델(Layout Model)
position: absolute
로 설정된 요소는 다른 요소와의 관계에 따른 일반적인 문서 흐름(normal flow)에서 제거되고 페이지 레이아웃에서 요소에 대한 공간이 생성되지 않습니다. 이때 요소는 다른 요소와 겹칠 수도 있습니다.
요소에 position: absolute
를 설정하면 z-index
가 auto
값이더라도 요소는 새로운 쌓임 맥락(Stacking context)을 생성한 것처럼 구현됩니다. 즉, 일반적인 형제 요소(position: static
이 설정된 형제 요소)보다 쌓임 순서가 높습니다.
위치 지정 속성
속성 | 설명 |
---|---|
top |
요소를 containing block에서 아래로 이동시킵니다. (양수 길이 값: 아래, 음수 길이 값: 위) auto 값일 경우에는 bottom 속성 값에 따라 결정되며, bottom 속성도 auto 값이라면 요소는 이동하지 않습니다. 값을 지정하지 않으면 auto 값이 설정됩니다. |
bottom |
요소를 containing block에서 위로 이동시킵니다. (양수 길이 값: 위, 음수 길이 값: 아래) auto 값일 경우에는 top 속성 값에 따라 결정되며, top 속성도 auto 값이라면 요소는 이동하지 않습니다. 값을 지정하지 않으면 auto 값이 설정됩니다. |
left |
요소를 containing block에서 오른쪽으로 이동시킵니다. (양수 길이 값: 오른쪽, 음수 길이 값: 왼쪽) auto 값일 경우에는 right 속성 값에 따라 결정되며, right 속성도 auto 값이라면 요소는 이동하지 않습니다. 값을 지정하지 않으면 auto 값이 설정됩니다. |
right |
요소를 containing block에서 왼쪽으로 이동시킵니다. (양수 길이 값: 왼쪽, 음수 길이 값: 오른쪽) auto 값일 경우에는 left 속성 값에 따라 결정되며, left 속성도 auto 값이라면 요소는 이동하지 않습니다. 값을 지정하지 않으면 auto 값이 설정됩니다. |
absolute
에서 사용하는 위치 지정 속성에서 지정하는 길이 값에는 백분율(%)을 사용할 수 있으며, top
과 bottom
속성은 containing block의 높이를 기준으로, left
와 right
속성은 너비를 기준으로 이동시킵니다.
예제
<div class="container">
<p>
이 요소는 일반적인 문서 흐름(normal flow)에 따라 배치됩니다.
</p>
<div class="absolute">
이 요소는 position: absolute가 설정되어 있으며,
<br>
일반적인 문서 흐름에서 제거됩니다.
</div>
<p>
.absolute는 containing block(예: position: relative)된 조상 요소를 기준으로 배치됩니다.
<br>
top, bottom, left, right 속성을 사용하여 위치를 세부적으로 조정할 수 있습니다.
</p>
</div>
.container {
position: relative; /* .absolute의 기준(Containing Block)이 됨 */
padding: 1em;
background-color: beige;
}
.absolute {
position: absolute;
top: 0; /* .container의 맨 위에 배치 */
right: 0; /* .container의 맨 오른쪽에 배치 */
color: #fff;
padding: 1em;
background-color: rgba(204, 51, 255, 0.7);
border: 3px solid #39004d;
}
이 요소는 일반적인 문서 흐름(normal flow)에 따라 배치됩니다.
일반적인 문서 흐름에서 제거됩니다.
.absolute는 containing block(예: position: relative)된 조상 요소를 기준으로 배치됩니다.
top, bottom, left, right 속성을 사용하여 위치를 세부적으로 조정할 수 있습니다.
position: absolute
로 설정된 요소의 크기 계산 방식
position: absolute
로 설정된 요소의 크기를 명시적으로 설정하지 않으면 어떻게 크기가 결정되는지에 대한 방식입니다.
width
와 height
fit-content
크기는 컨테이닝 블록(containing block)의 너비나 높이 레이아웃 제약을 고려하여,
요소의 크기를 min-content
(콘텐츠의 최소 크기)와 max-content
(콘텐츠의 최대 크기) 사이의 적합한 값으로 설정합니다.
다음의 예제로 확인해 보세요.
<div class="container">
<div class="absolute">요소의 크기가 콘텐츠의 크기에 맞춰 결정</div>
</div>
.container {
position: relative; /* .absolute의 기준(Containing Block)이 됨 */
height: 200px;
background-color: beige;
}
.absolute { /* width: auto; height: auto; */
position: absolute;
top: 0;
right: 0;
color: #fff;
background-color: rgba(204, 51, 255, 0.7);
border: 3px solid #39004d;
}
다만, 다음의 두 가지 예외 상황에서는 다르게 적용됩니다.
top
, bottom
, left
, right
속성의 영향을 받을 때
left
및right
가 모두auto
값이 아닌 값으로 지정되면, 요소의 너비는 해당하는 두 위치의 너비 간격이 적용됩니다.top
및bottom
이 모두auto
값이 아닌 값으로 지정되면, 요소의 높이는 해당하는 두 위치의 높이 간격이 적용됩니다.
다음의 예제로 확인해 보세요.
<div class="container">
<div class="absolute">top, bottom, left, right 속성의 영향을 받을 때</div>
</div>
.container {
position: relative; /* .absolute의 기준(Containing Block)이 됨 */
height: 200px;
background-color: beige;
}
.absolute { /* width: auto; height: auto; */
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 100px;
color: #fff;
background-color: rgba(204, 51, 255, 0.7);
border: 3px solid #39004d;
}
aspect-ratio
이 설정된 경우
aspect-ratio
속성은 요소 박스의 가로 세로 비율( 가로 / 세로 )을 설정합니다.
- 이 속성이 설정되어 있으면, 자동 크기 결정 시 비율이 적용된 축은
max-content
(콘텐츠의 최대 크기)로 계산됩니다. - 만약 두 축 모두 자동 크기일 경우, 하나의 축이
auto
이면 그 축은 비율에 맞게max-content
(콘텐츠의 최대 크기)로 결정됩니다.
다음의 예제로 확인해 보세요.
<div class="container">
<div class="absolute">aspect-ratio이 설정된 경우</div>
</div>
.container {
position: relative; /* .absolute의 기준(Containing Block)이 됨 */
height: 200px;
background-color: beige;
}
.absolute { /* width: auto; height: auto; */
position: absolute;
top: 0;
right: 0;
aspect-ratio: 2 / 1; /* 가로 2 세로 1의 비율 */
color: #fff;
background-color: rgba(204, 51, 255, 0.7);
border: 3px solid #39004d;
}
자동 최소 크기(min-width
와 min-height
)
min-width
(요소의 최소 너비 지정 속성)나 min-height
(요소의 최소 높이 지정 속성)를 명시적으로 지정하지 않으면 초깃값인 auto
가 되는데, 이 값은 0
이 적용됩니다.
position: absolute
로 설정된 요소의 마진(바같쪽 여백) 크기 계산 방식
position: absolute
로 설정된 요소의 마진(바같쪽 여백, margin area) 크기 계산 방식입니다.
auto
값
margin-top: auto |
top 또는 bottom 또는 height 속성 값 중 하나라도 auto 가 있으면 0 값으로 적용됩니다. 그렇지 않으면 사용될 위쪽 공간은 bottom 으로 지정된 위치까지의 여백 크기로 자동으로 계산해서 설정합니다. |
---|---|
margin-bottom: auto |
top 또는 bottom 또는 height 속성 값 중 하나라도 auto 가 있으면 0 값으로 적용됩니다. 그렇지 않으면 사용될 아래쪽 공간은 top 으로 지정된 위치까지의 여백 크기로 자동으로 계산해서 설정합니다. |
margin-left: auto |
left 또는 right 또는 width 속성 값 중 하나라도 auto 가 있으면 0 값으로 적용됩니다. 그렇지 않으면 사용될 왼쪽 공간은 right 로 지정된 위치까지의 여백 크기로 자동으로 계산해서 설정합니다. |
margin-right: auto |
left 또는 right 또는 width 속성 값 중 하나라도 auto 가 있으면 0 값으로 적용됩니다. 그렇지 않으면 사용될 오른쪽 공간은 left 로 지정된 위치까지의 여백 크기로 자동으로 계산해서 설정합니다. |
다음의 예제로 확인해 보세요.
<div class="container">
<div class="absolute">margin-left: auto;가 설정된 경우</div>
</div>
.container {
position: relative; /* .absolute의 기준(Containing Block)이 됨 */
height: 200px;
background-color: beige;
}
.absolute {
position: absolute;
left: 0;
right: 100px;
width: 100px;
margin-left: auto;
color: #fff;
background-color: rgba(204, 51, 255, 0.7);
border: 3px solid #39004d;
}
이 예제는 position: absolute
로 설정된 요소에 margin-left: auto
를 설정하는 예제입니다.
position: absolute
로 설정된 요소에 margin-left: auto
를 설정하려면 left
또는 right
또는 width
속성 값 중 하나라도 auto
가 있으면0
으로 계산되기 때문에 모두 auto
가 아닌 값으로 지정했습니다. 아래의 margin-left: auto
가 실제로 적용된 모습을 보면, 사용될 왼쪽 공간은 right
로 지정한 100px
위치까지의 여백 크기로 자동으로 계산해서 설정된 것을 알 수 있습니다.
<길이>
단위 값
양수, 0
, 음수가 가능합니다.
<백분율(%)>
단위 값
컨테이닝 블록(containing block)의 너비에 대한 백분율로 정의합니다. (양수, 0
, 음수가 가능합니다.)
position: absolute
로 설정된 요소의 float
속성의 계산된 값
position: absolute
로 설정된 요소에서 float
속성의 계산된 값은 none
이 적용됩니다. 즉, float
속성이 적용되지 않습니다.
브라우저 호환성
속성과 값 |
데스크탑 Chrome
|
데스크탑데스크탑 Edge
|
데스크탑 Firefox
|
Safari
|
---|---|---|---|---|
position
|
1 | 12 | 1 | 1 |
absolute
|
1 | 12 | 1 | 1 |
position: absolute가 적용된 flex 컨테이너의 자식 요소(position: Absolutely-positioned flex children) | 52 | 12 | 52 | 11 |
명세서
명세서 사양 | |
---|---|
position
|
CSS Positioned Layout Module Level 3 #position-property |
position: absolute
|
CSS Positioned Layout Module Level 3 #valdef-position-absolute |
Absolute Positioning Layout Model |
CSS Positioned Layout Module Level 3 #abspos-layout |