position

레이아웃을 배치하거나, 객체를 위치시킬 때 사용하는 css 속성

상속되지 않으며 위, 오른쪽, 아래, 왼쪽의 위치를 같이 설정할 수 있음

 

static (기본값)

위치를 지정하지 않을 때 사용함

 

relative

위치를 계산할 때 static의 원래 위치부터 계산

일반적인 흐름에 따라 상하좌우 offset 적용가능

다른 요소에 영향을 주지 않음

 

absolute

원래 위치와 상관없이 위치를 지정할 수 있음. 단, 가장 가까운 상위 요소를 기준으로 위치가 결정된다.

일반적인 문서 흐름에서 배제됨

! relative 배치 요소는 문서 흐름 속에 남아 있지만 absolute 배치 요소는 전체적 문서 흐름에서 제외된다.

 

fixed

원래 위치와 상관없이 위치를 지정할 수 있음. 하지만 상위 요소에 영향을 받지 않기 때문에 화면이 바뀌더라도 고정된 위치를 설정할 수 있음. 브라우저 화면의 상대 위치를 기준으로 결정. 예) 네비게이션 바

 

sticky

일반적 문서 흐름에서 배제되고, 스크롤되는 가장 가까운 요소에 offset 적용

 

 

 

 

static, relative, absolute 차이

참고 포스팅

CSS position, relative 와 absolute 차이

 

CSS position, relative 와 absolute 차이

포지션(position) Html 문서에서 각 요소를 배치하는 방법에 대해 정의하는 속성이다. 즉 요소의 배치 방법을 결정하는 것이 포지션(position) 속성이다. 포지션(position) 속성이 각 요소의 배치 방법을

nonipc.com

참고한 포스트에서 소개한 코드를 직접 쳐봤다.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    div.relative {
      position: relative;
      width: 500px;
      height: 300px;
      border: 5px solid blue;
    }
    div.absolute {
      /* position: relative; */
      /* position: absolute; */
      top: 0;
      left:100px;
      width: 150px;
      height: 150px;
      border: 6px solid red;
      color: red;
    }
  </style>

</head>
<body>
  <h2>position: absolute;</h2>
  <p>가장 가까운 조상:</p>
  <div class="relative">relative;
    <div class="absolute">absolute;</div>
    <p>일반 문단 텍스트</p>
  </div>
</body>
</html>

div.absolute 스타일을 1) static, 2) relative, 3) absolute 로 바꿨을시 어떻게 변화하는지 확인해보자.

 

1) static

<코드>

div.absolute {
      /* position: relative; */
      /* position: absolute; */
      top: 0;
      left:100px;
      width: 150px;
      height: 150px;
      border: 6px solid red;
      color: red;
    }

<결과>

 

2) relative

<코드>

div.absolute {
      position: relative;
      /* position: absolute; */
      top: 0;
      left:100px;
      width: 150px;
      height: 150px;
      border: 6px solid red;
      color: red;
    }

<결과>

 

3) absolute

<코드>

div.absolute {
      /* position: relative; */
      position: absolute;
      top: 0;
      left:100px;
      width: 150px;
      height: 150px;
      border: 6px solid red;
      color: red;
    }

<결과>

 

비교

 

static, relative, absolute 차이 (2번째 예시)

wrapper div 아래

input + img 묶여있음

1) static

<코드>

.wrapper {
  position: relative;
  width: 300px;
}

input {
  width: 100%;
  border: 1px solid #bbb;
  border-radius: 8px;
  padding: 10px 12px 10px 12px;
  font-size: 14px;
}

img {
/*   position: absolute; */
  width: 17px;
  top: 10px;
  right: 12px;
  margin: 0px;
}

<결과>

 

2) relative

<코드>

img {
  position: relative;
  width: 17px;
  top: 10px;
  right: 12px;
  margin: 0px;
}

<결과>

 

input 의 width가 100% 라서 img는 그 밑에 위치하게 되고

right offset 값으로 인해 옆으로 숨어버림

 

3) absolute

<코드>

img {
  position: absolute;
  width: 17px;
  top: 10px;
  right: 12px;
  margin: 0px;
}

<결과>

 

absolute 는 부모 요소인 wrapper (position: relative) 에 대해서 offset 값을 적용하고

다른 문서 요소의 흐름에 방해받지 않음

이때 right 대신 left offset 값을 주면?

 

<코드>

img {
  position: absolute;
  width: 17px;
  top: 10px;
  left: 12px;
  margin: 0px;
}

<결과>

 

결론

relative는 일반적인 문서 흐름상 자신이 위치해야 할 곳에서 시작하고
absolute는 부모 요소 위치에서 시작한다.

relative는 문서 흐름에 남아있으나
absolute는 전체적인 문서 흐름에서 제외된다.

 

+ Recent posts