CSS 에서 사용되는 속성으로, HTML 문서 상에서 요소가 배치되는 방식을 결정한다. CSS 를 이용한 레이아웃에 사용되며, 일단 position 속성으로 위치의 기준을 정해준 뒤 top, bottom, left, right 속성으로 구체적인 위치를 정한다.
top: 30px 인 경우, 기존 static 위치에서 위에 30px 의 거리를 남기고 아래로 30px 이동한다. 참고로, 기존의 위치는 차지하고 있으므로 페이지의 구조가 달라지진 않는다.top: 30px 이고 기준이 body 인 경우, 화면 맨 위 모서리에서 30px 만큼 거리에 위치하게 된다.left: 30px 인 경우, 브라우저 창 왼쪽 끝에서 30px 떨어진 위치에 고정되어 사용자가 화면을 움직여도 움직이지 않는다.top: 50px 인 경우, 대상이 들어있는 부모요소 안에 브라우저 창 위에서 50px 거리의 기준점이 들어오면 그 기준점에 대상이 고정된다. 그리고 기준점이 부모요소를 영역을 벗어나면 다시 대상은 원래의 static 위치로 돌아간다.<body>
<div class="container">
<aside class="camera">
<div class="img"></div>
<p class="description">내가 찍은 사진들</p>
</aside>
<main class="pictures">
<div class="img"></div>
<div class="img"></div>
<div class="img"></div>
<div class="img"></div>
<div class="img"></div>
<div class="img"></div>
</main>
</div>
</body>
* {
box-sizing: border-box;
}
body {
margin: 0;
}
.img {
width: 100px;
height: 100px;
background-color: green;
}
.container {
display: flex;
}
.camera {
margin: 30px;
display: flex;
flex-direction: column;
align-items: center;
position: sticky;
top: 0;
}
.pictures {
display: flex;
flex-direction: column;
gap: 10px
}
https://jsfiddle.net/cksdyd324/tcnq18fy/3/
위는 jsfiddle 페이지인데, 직접 실행해보도록 하자.

참고로 jsfiddle 에서는 사진을 초록블럭으로 대체하였다. 위 css 파일에서는 왼쪽의 사진기 사진과 텍스트를 묶은 블록을 sticky 속성값을 추가해 고정시키려 했는데, 아무리 스크롤해도 고정이 안되는 모습을 볼 수 있다. 이유가 무엇일까?
그것은 전체 블록인 container가 flexbox 이기 때문이다. flexbox 의 align-items: 속성의 디폴트 값이 stretch 인데, 이 때문에 사진기와 텍스트가 담긴 박스는 container에 위 아래 전반에 걸쳐 영역을 차지하게 된다. 때문에 아무리 스크롤을 해도 부모요소인 container에 갇힌 블록은 움직일 수가 없는 것이다.
이에 대한 해결방법은 사진기와 텍스트가 담긴 블록인 .camera에 align-self: flex-start 를 추가해주면 된다. 이 속성은 블록을 flexbox 처음부분으로 블록을 위치시키기 때문에 영역이 제한되고 블록이 움직일 공간이 생기게 된다. 위 경우엔 .container에 align-items: flex-start를 추가해주어도 되지만, 이 속성은 다른 요소들까지 위치를 옮기므로 첫번째 방법을 사용하도록 하자.