본문 바로가기

CSS

[CSS] position(포지션) relative, absolute, fixed

css의 position을 활용하면 일명 box라고 하는 레이아웃의 위치를 자유롭게 이동할 수 있습니다

 

position을 이용할 수 있는 프로퍼티가 몇 개 있습니다

 

 

relative

 

absolute

 

fixed

 

세 가지를 알아봅니다

 

relative

 

로얄블루색상의 박스를 만들었습니다 가로 100px, 세로 100px의 박스입니다

 

.box1 {
  width: 100px;
  height: 100px;
  background-color: royalblue;
  position: relative;
}

여기에 relative 속성을 추가하겠습니다

 

실행시키게 되면 아무 일도 일어나지 않습니다 그 이유는 position속성을 움직일 명령어를 입력하지 않았기 때문입니다

 

position 속성들을 움직일 수 있는 명령 중 대표적으로

 

top, bottom, left, right가 있습니다 그럼 box를 움직일 수 있는 속성을 추가하도록 하겠습니다

 

.box1 {
  width: 100px;
  height: 100px;
  background-color: royalblue;
  position: relative;
  top: 100px;
  left: 100px;
}

로열블루 색상의 박스가 top(위에서 100px), left(왼쪽에서 100px) 떨어진 것을 확인할 수 있습니다

 

relative는 문서의 흐름에 따라 배치시켜줘~라는 의미를 가지고 있습니다

 

 

absolute

일반적인 문서 흐름에서 제거하고 상위 요소 중 가장 가까운 position지정 요소에 대해 오프셋을 적용시킨다입니다

오프셋이란 top오프셋 top에서 몇 px 떨어뜨려라라고 이해하시면 될 거 같습니다

 

 

<body>
  <div class="box"></div>
  <div class="box">
    <div class="box2"></div>
  </div>
</body>
.box {
  width: 200px;
  height: 200px;
  background-color: royalblue;
  border: 2px solid black;
  position: relative;
}

.box2 {
  width: 100px;
  height: 100px;
  background-color: rgb(186, 163, 48);
  position: absolute;
  top: 100px;
}

저는 박스 두 개를 만들고 box와 두 번째 box안에 box2를 만들어 배치시켰습니다

그리고 거기에 top: 100px를 오프셋 시켰습니다

 

absolute는 상위 요소 부모의 요소에서의 흐름을 제거하고 이동시킵니다

box2를 두 번째 box에서 제거하고 붕 띄웠다고 생각하시면 됩니다

부모의 요소 밖에서 하늘을 날고 있는 box2라 자유롭게 이동할 수 있고

ppppp라는 텍스트를 입력하더라도 원래대로라면 문서의 흐름상 box2가 나오고 그 아래 ppppp텍스가 나오는 게 맞지만

하늘을 날고 있는 box2 때문에 ppppp가 위로 올라간 것을 확인할 수 있습니다

 

저는 relative로 상위 요소를 box로 지정해주었는데 box를 지정한 상위요소 relative가 없다면 브라우저를 기준을 상위 요소로 잡고 absolute가 이동하게 됩니다

 

fixed

.box {
  width: 200px;
  height: 200px;
  background-color: royalblue;
  border: 2px solid black;
}

.box2 {
  width: 100px;
  height: 100px;
  position: fixed;
  background-color: aqua;
}

.box3 {
  width: 150px;
  height: 150px;
  background-color: bisque;
}

fixed는 어떤 상위 요소에도 구애받지 않고 브라우저 상의 위치를 고정시킵니다

스크롤에도 영향받지 않습니다