selector {
    position: static | relative | absolute | fixed | sticky
}
/* 키워드 값 */
position: static;
position: relative;
position: absolute;
position: fixed;
position: sticky;

/* 전역 값 */
position: inherit;
position: initial;
position: revert;
position: revert-layer;
position: unset;
<p>
    position: static;은 요소에 position 속성을 지정하지 않았을 때 초깃값으로
    설정되는 값입니다.
</p>
<p class="static">
    이 요소는 position: static;으로 설정되어 있습니다.
    <br>
    요소가 다른 요소와의 관계에 의해 일반적인 문서 흐름(normal flow)에 따라 배치됩니다.
</p>
<p>
    position이 static으로 설정된 요소는
    <br>
    top, bottom, left, right 속성과 z-index 속성이 효과가 없습니다.
</p>
.static {
    position: static; /* 초깃값 */
    border: 3px solid yellowgreen;
}
실제 적용된 모습
<p>
    position: relative;는 static 값처럼 다른 요소와의 관계에 따라 일반적인 문서 흐름(normal flow)에 따라 배치됩니다.
</p>
<p class="relative">
    이 요소는 position: relative;로 설정되어 있습니다.
    <br>
    요소가 다른 요소와의 관계에 의해 일반적인 문서 흐름(normal flow)에 따라 배치됩니다.
</p>
<p>
    하지만, 원래 배치된 위치를 기준으로
    <br>
    top, bottom, left, right 속성으로 상대적인 간격(offset, 오프셋)을 적용하는 방식입니다.
</p>
.relative {
    position: relative;
    left: 40px; /* 왼쪽에 40px의 간격(offset, 오프셋)을 적용 */
    border: 3px solid yellowgreen;
}
실제 적용된 모습
<div class="container">
    <p>
        이 요소는 일반적인 문서 흐름(normal flow)에 따라 배치됩니다.
    </p>
    <div class="absolute">
        이 요소는 position: absolute가 설정되어 있으며,
        <br>
        일반적인 문서 흐름에서 제거됩니다.
    </div>
    <p>
        .absolute는 containing block(예: position: relative)된 조상 요소를 기준으로 배치됩니다.
        <br>
        top, bottom, left, right 속성을 사용하여 위치를 세부적으로 조정할 수 있습니다.
    </p>
</div>
.container {
    position: relative; /* .absolute의 기준(Containing Block)이 됨 */
    padding: 1em;
    background-color: beige;
}
.absolute {
    position: absolute;
    top: 0; /* .container의 맨 위에 배치 */
    left: 40px; /* .container의 왼쪽에서 40px 이동 */
    width: 50%; /* .container 너비의 50% */
    color: #fff;
    padding: 1em;
    background-color: rgba(204, 51, 255, 0.7);
    border: 3px solid #39004d;
}
실제 적용된 모습
<body>
    <div class="outer">
        <p>
            fixed box는 뷰포트에 고정되어
            스크롤을 하더라도 그 위치에 그대로 있습니다.
        </p>
        <div class="fixed-box">fixed box</div>
    </div>
</body>
body {
    height: 5000px;
    margin: 0;
}
.outer {
    height: 100%;
    margin-left: 150px;
    background-color: gold;
    padding: 1em;
}
.fixed-box {
    position: fixed;  /* 뷰포트가 Containing Block이 됨 */
    top: 100px; /* 뷰포트 기준 아래로 100px 이동 */
    left: 25px; /* 뷰포트 기준 오른쪽으로 25px 이동 */
    width: 100px;
    height: 100px;
    background-color: red;
}
실제로 적용된 모습 확인하기
<div class="container">
    <section>
        <p>sticky positioning을 구현하는 예제입니다.</p>
        <p class="sticky">sticky 문단입니다.</p>
        <p>다른 요소와 겹칠 수도 있습니다.</p>

    </section>
    <section>
        <p>sticky positioning을 구현하는 예제입니다.</p>
        <p class="sticky">sticky 문단입니다.</p>
        <p>다른 요소와 겹칠 수도 있습니다.</p>
    </section>
    <section>
        <p>sticky positioning을 구현하는 예제입니다.</p>
        <p class="sticky">sticky 문단입니다.</p>
        <p>다른 요소와 겹칠 수도 있습니다.</p>
    </section>
    <section>
        <p>sticky positioning을 구현하는 예제입니다.</p>
        <p class="sticky">sticky 문단입니다.</p>
        <p>다른 요소와 겹칠 수도 있습니다.</p>
    </section>
</div>
.container { /* 스크롤 가능한 오버플로 영역 */
    overflow: auto;
    height: 300px;
    border: 5px solid red;
}
section { /* 가장 가까운 스크롤이 가능한 조상 요소(scrollport) */
    background-color: beige;
    height: 400px;
}
section + section {
    margin-top: 2em;
}
p {
    margin: 0;
}
.sticky {
    position: sticky;
    top: 0;
    color: #fff;
    padding: 1em;
    background-color: rgba(204, 51, 255, 0.7);
    border: 3px solid #39004d;
}
실제 적용된 모습 스크롤되는 영역을 스크롤해 보세요!

caniuse.com에서 더 자세한 정보를 확인해 보세요.