CSS의 position 속성은 HTML 요소들의 위치를 설정하는 데 사용됩니다.
position 속성의 값으로는 static
, relative
, absolute
, fixed
, sticky
이렇게 다섯 가지가 있습니다.
요소를 배치하는 방법의 유형이며, 각 유형에 따라 top
, bottom
, left
, right
속성으로 위치를 조절할 수 있습니다.
HTML 요소의 기본 position
값은 static
입니다. position
속성을 주지 않으면 디폴트로 static
이라는 속성값이 적용되는 것입니다. (기본적으로 static이라 따로 써주지 않아도 됩니다.) element
가 차례대로 왼쪽에서 오른쪽, 위에서 아래로 쌓입니다.
static
과 마찬가지로 element
가 문서의 일반적인 흐름에 따라 배치가 됩니다. static
과의 차이점은 element
가 자신의 static
위치에서 top
, bottom
, left
, right
와 같은 속성에 의한 상대적인(relative) 위치에 배치된다는 점입니다.
relative
를 사용시 element
가 겹쳐지게도 보일 수 있으므로 주의가 필요합니다.absolute
는 element
가 문서의 일반적인 흐름을 따르지 않습니다. 대신 가장 가까운 위치에 있는 조상 element
에 대해 상대적 위치로 배치됩니다. 조상 element
가 없으면 문서 본문(body)을 기준으로 삼고 페이지 스크롤에 따라 움직입니다.
fixed
역시 absolute
와 마찬가지로 element
가 문서의 일반적인 흐름에서 제거됩니다. 대신, 스크린의 뷰포트(viewport)를 기준으로 한 위치에 배치됩니다. 즉, 스크롤되어도 움직이지 않는 고정된 자리를 갖게 됩니다.
웹 페이지를 방문해보면 로고나 선택박스들이 스크롤을 아래로 내려도 따라다니는 것을 보신적이 있으실 겁니다. 이러한 기능을 fixed
를 통해 구현할 수 있습니다.
sticky
는 element
가 문서의 일반적인 흐름에 따라 배치되며 top
, bottom
, left
, right
속성들의 값을 기준으로 flow root 및 해당 element
를 포함하는 containing block에 대한 상대적(relative) 위치에 배치됩니다.
그래서 sticky
로 position을 지정했는데 top
, bottom
, left
, right
속성이 주어지지 않으면 static
으로 배치되는 위치와 같습니다.
sticky
는 relative
와 마찬가지로 다른 요소들에 영향을 주지 않는 특징을 가집니다.
fixed
와 sticky
둘 다 스크롤을 하더라도 보여지는 공통점을 가지고 있는데요. 이 두 position의 차이점은 fixed
는 문서의 흐름을 따르지 않고 뷰포트를 기준으로 배치가 되는 반면 sticky
는 문서의 흐름을 따르면서 containing box를 기준으로 상대적인 위치에 배치됩니다.
즉, fixed
를 쓰면 요소들이 겹쳐보일 수 있는 상황이 나올 수 있는 반면 sticky
를 쓰면 그러한 상황을 예방할 수 있습니다.