본문 바로가기
HTML/CSS

[HTML/CSS] Position 속성에 대한 가이드

by teamnova 2024. 7. 1.
728x90



CSS의 `position` 속성은 웹 페이지에서 요소의 위치를 지정하는 데 매우 중요한 역할을 합니다. 이 속성은 다양한 값들과 함께 사용되어 요소를 화면에 배치하는 방법을 제어합니다. 오늘은 이 속성의 다양한 값들과 그 특징에 대해 알아보고, 실행 가능한 예제를 통해 실습해 보겠습니다.

Position 속성의 기본 원칙

`position` 속성은 요소의 위치를 결정하며, 다음과 같은 네 가지 주요 값을 가집니다:

1. static: 모든 요소의 기본값으로, 문서의 기본 배치 방식에 따라 배치됩니다.
2. relative: 요소를 원래 자리에서 상대적으로 이동시킵니다.
3. absolute: 요소를 문서 흐름에서 제거하고, 가장 가까운 부모 요소를 기준으로 배치합니다.
4. fixed: 요소를 뷰포트를 기준으로 고정하여 스크롤해도 항상 같은 위치에 유지됩니다.
5. sticky: 요소가 스크롤 위치에 따라 상대적(`relative`) 또는 고정적(`fixed`)으로 변합니다.

이제 각 속성의 예제를 통해 더 자세히 살펴보겠습니다.

1. Static Positioning

`position: static`은 모든 요소의 기본값입니다. 요소는 문서의 기본 배치 방식에 따라 배치되며, `top`, `right`, `bottom`, `left`와 같은 다른 위치 속성은 사용할 수 없습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Static Position</title>
    <style>
        .static-box {
            width: 100px;
            height: 100px;
            background-color: lightcoral;
            position: static;
        }
    </style>
</head>
<body>
    <div class="static-box">Static Box</div>
</body>
</html>



2. Relative Positioning

`position: relative`는 요소를 원래 자리에서 이동시킬 수 있게 합니다. 요소는 원래 자리에서 `top`, `right`, `bottom`, `left` 속성으로 지정한 만큼 이동되지만, 이동 전의 공간은 그대로 유지됩니다. 이로 인해 요소가 이동되더라도 다른 요소들의 배치는 변경되지 않습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Relative Position</title>
    <style>
        .relative-box {
            width: 100px;
            height: 100px;
            background-color: lightblue;
            position: relative;
            top: 20px;
            left: 30px;
        }
    </style>
</head>
<body>
    <div class="relative-box">Relative Box</div>
</body>
</html>



3. Absolute Positioning

`position: absolute`는 요소를 일반적인 흐름에서 제거하고, 가장 가까운 조상 요소 중 `position`이 `relative`, `absolute`, `fixed`, `sticky`인 요소를 기준으로 배치합니다. 만약 그런 조상 요소가 없다면, `body`를 기준으로 배치됩니다.


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Absolute Position</title>
    <style>
        .container {
            position: relative;
            width: 300px;
            height: 300px;
            background-color: lightgrey;
        }
        .absolute-box {
            width: 100px;
            height: 100px;
            background-color: lightgreen;
            position: absolute;
            top: 50px;
            left: 50px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="absolute-box">Absolute Box</div>
    </div>
</body>
</html>



4. Fixed Positioning

`position: fixed`는 요소를 뷰포트를 기준으로 배치합니다. 스크롤을 해도 요소는 항상 같은 위치에 고정되어 있습니다.


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Fixed Position</title>
    <style>
        .fixed-box {
            width: 100px;
            height: 100px;
            background-color: lightpink;
            position: fixed;
            bottom: 20px;
            right: 20px;
        }
    </style>
</head>
<body>
    <div class="fixed-box">Fixed Box</div>
    <div style="height: 2000px;"></div> <!-- 스크롤을 테스트하기 위한 요소 -->
</body>
</html>




5. Sticky Positioning

`position: sticky`는 스크롤 위치에 따라 상대적(`relative`) 또는 고정적(`fixed`)으로 변하는 요소를 만듭니다. 요소는 지정된 오프셋에 도달할 때까지는 일반적인 문서 흐름에 따라 배치되다가, 그 이후에는 뷰포트에 고정됩니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sticky Position</title>
    <style>
        .sticky-box {
            width: 100%;
            height: 50px;
            background-color: lightgoldenrodyellow;
            position: -webkit-sticky; /* Safari */
            position: sticky;
            top: 0;
        }
        .content {
            height: 2000px;
            background: linear-gradient(lightblue, lightcoral);
        }
    </style>
</head>
<body>
    <div class="sticky-box">Sticky Box</div>
    <div class="content"></div> <!-- 스크롤을 테스트하기 위한 요소 -->
</body>
</html>



이 예제들을 통해 `position` 속성의 각 값을 직접 실험해보고, 요소의 배치 방식이 어떻게 달라지는지 확인해보세요. `position` 속성을 이해하면 레이아웃을 더 유연하고 창의적으로 디자인할 수 있습니다.