position:absolute는 동작이 복잡해서 처음 css를 할 때 상당히 골칫거리다. 이 속성은 크게 3가지다.
- 1. absolute는 fixed와 더불어, 일반적인 문서의 레이아웃 맥락에서 제거되고 독립적인 맥락을 생성한다. 따라서 width처럼 부모로부터 물려받던 부분들을 새로 설정해야 한다.
- 2. absolute 요소의 최초 위치는 맥락에서 제거되기 전의 위치다. 하지만 위치 비정 속성(top, bottom, left, right)을 사용하면 가장 가까운 상위의 position:relative 요소, 만약 없다면 body를 기준으로 위치가 설정된다.
- 3. absolute 요소는 부모의 padding-area 왼쪽 모서리를 기준으로 시작한다. 이는 static 요소가 부모의 content-area 왼쪽 모서리를 기준으로 하는 것과 대비된다.
이 중 3번을 다루려고 한다. 아래 코드를 보면, absolute를 한 박스는 top:0; left:0를 할 시, 기준 컨테이너의 padding을 무시하고 테두리로 붙어버린다. 이는 기준 컨테이너의 패딩을 살리거나 레이아웃을 유지할 때 문제가 될 수 있다.
이를 해결하는 간단한 방법은 아래처럼 코드를 짜는 것이다.
<style>
.wrapper {
width: 200px;
height: 150px;
padding: 20px;
background-color: wheat;
position: relative;
}
.wrapper__relative {
position: relative;
width: 100%;
height: 100%;
}
.wrapper__absolute {
position: absolute;
top: 0;
left: 0;
width: 50px;
height: 35px;
background-color: rgb(250, 125, 103);
}
</style>
<div class="wrapper">
<div class="wrapper__relative">
<div class="wrapper__absolute">mix</div>
</div>
</div>
위 코드를 보면, 위치의 기준 컨테이너인 wrapper이 있고 절대위치 요소인 wrapper__absolute를 wrapper__relative로 감싼 것이다. wrapper__relative는 position:relative, width:100%, height:100%를 준다. 이러면, wrapper__relative가 wrapper의 content-area를 채운다. 그리고, absolute 요소는 wrapper__relative의 테두리 부분에서 시작하니, 결과적으로 wrapper의 content-area에서 시작하게 된다. (아래 예시를 보면 좀 더 이해가 될 것이다.)
See the Pen position:absolute의 padding 문제 by charchar111 (@charchar111) on CodePen.
'CSS' 카테고리의 다른 글
[css] letter-spacing 적용 시 중앙 정렬 레이아웃 틀어짐 문제 (0) | 2024.07.24 |
---|---|
[CSS] 절대 단위와 상대 단위 정리 (0) | 2024.03.30 |
[CSS] nav로 적당한 폰트 사이즈 디자인 (1) | 2024.02.28 |
[CSS] inline 박스 사용 시 height, padding 미적용 문제 (0) | 2024.02.28 |
[CSS] 다단 레이아웃과 column-count, column-width (0) | 2024.02.28 |