CSS

[CSS] position

출근침대 2020. 5. 19. 16:41

 

참고

https://opentutorials.org/course/2418/13414

https://ofcourse.kr/css-course/position-%EC%86%8D%EC%84%B1

 

 

 

 

- position

: eliment(tag)가 화면의 어디에 위치하는지를 알려주는 속성

 

- offset

:부모 박스의 좌측 상단으로부터 자식까지의 x, y 거리

- bottom vs top : 두 값이 동시에 있을 때 순서 상관없이 top 값만 씀.

- left vs right : 두 값이 동시에 있을 때 순서 상관없이 left 값만 씀.

 

 

 

1. position: static

position의 기본값, offset 값은 설정할 수 없으며

다른 태그와 상호작용하여 원래 위치해야 하는 곳에 있게 됨.

 

position설정한 걸 보다보면 알겠지만

html은 모든 것을 감싸줄 것 같은데

position: static;속성값을 벗어나게 된 요소에 대해서는 더 이상 감싸주지 않고

원래 요소들을 감쌌던 범위 그대로인 채로 네 알아서 살라고 하는 것 같다.

 

 

2. Position: relative;

원래 있던 위치를 기준으로 해서

offset 적용한 자리로 요소를 이동하는 속성값.

<body>

    <div id="other_parent">
        other parent
    </div>

    <div id="parent">
        parent
        <div id="me">
            me
        </div>
    </div>

</body>
<style>

    html {
        border: 3px solid gray;
    }
    div {
        border: 5px solid hotpink;
        margin: 10px;
    }
    #me {
        position: relative;
        right: 100px;
        left: 100px;
        top: 100px;
        bottom: 100px;
    }

</style>

예제1. position: relative;를 자식속성에 적용시켰을 때

 

- left, right 값이 함께 있으니까

  두 값을 상쇄해서 0px;이 되는 것이 아니라

  우선순위인 left값을 적용하고 right값은 무시한다.

- 자식 요소의 offset값이 (postion: relative; 이면서 top=0, left=0)이면

  부모요소 바로 아래의 원래 위치에 자리를 잡는다

- 부모요소가 차지하는 가로폭만큼 자식태그도 자리를 차지한다.

- 부모요소의 영역은 처음 자식요소까지의 영역만큼은 그대로 가지고 있지만

  자식 요소가 그 자리를 더 벗어난다고 해서 그만큼 영역이 넓어지진 않는다.

(마치.. 부모와의 연이 끊어지진 않았지만 독립을 하러 떠난 자식같다..)

 

 

 

3. Position: absolute;

absolute 속성을 띄는 자식 요소는

relative 속성인 상위 요소 자리를 기준으로 offset을 적용한다.

relative인 상위 요소가 없으면 가장 상위 태그(html eliment)의 한 점을 기준으로

offset 적용을 한다.

 

<body>

    <div id="other_parent">
        other parent
    </div>

    <div id="parent">
        parent
        <div id="me">
            me
        </div>
    </div>

</body>
<style>

    html {
        border: 3px solid gray;
    }
    #other_parent, #parent {
        border: 5px solid hotpink;
        margin: 10px;
    }
    #me {
        position: absolute;
        background-color: red;
        color: white;
        left: 0;
        top: 0;
    }

</style>

 

예제2. position: absolute;를 자식속성에 적용시켰을 때

 

- 자식요소의 offset을 설정하지 않으면 부모태그의 바로 아래에 위치한다.

  (postion: relative;하고 offset 설정 안할 때와 같다)

 

- absolute로 자식요소에 offset을 설정하면 부모-자식요소 간 링크가 끊겨

  부모 요소는 이전에 자식이었던 요소를 더 이상 자신의 영역에 집어 넣지 않는다.

 

- 부모 요소와 상관 없어진 자식 요소는 block요소의 특징인 가로 길이 100%가 풀리고

  자기 자신의 content 크기까지만 영역(background-color참조)으로 가진다.

 

- 부모요소의 속성이 relative이고 자식 요소의 offset값이 (postion: absolute; 이면서 top=0, left=0)이면

  자식 요소는 가장 상위태그인 html가 아닌 부모요소의 위치에 놓이게 된다.

 

- 만일 부모 요소의 속성이 static이고 부모 요소보다 상위인 요소가 relative,

  그리고 자식 요소의 offset값이(postion: absolute; 이면서 top=0, left=0)이면

  자식 요소는 몇 단계 위까지의 상위 요소이건 간에 relative인 상위 요소 자리까지 올라가 그 자리에 놓인다.

 

(마치.. 부모와의 연을 끊고 독립을 하러 떠난 자식같다..)

 

 

 

 

 

4. Position: fixed;

fixed를 속성으로 갖는 요소는 스크롤을 움직여도 offset 설정한 그 자리 위에 그대로 떠있다.

<body>

    <div id="other_parent">
        other parent
    </div>

    <div id="parent">
        parent
        <div id="me">
            me
        </div>
    </div>

    <div id="other_person">
        just person
    </div>

</body>
<style>

    html {
        border: 3px solid gray;
    }
    #other_parent, #parent {
        border: 5px solid hotpink;
        margin: 10px;
    }
    #me {
        position: fixed;
        background-color: red;
        color: white;
        left: 0;
        top: 0;
    }
    #other_person {
       height: 1000px;
       background-color: pink;
    }

</style>

 

- fixed된 요소는 block요소의 특징인 가로 길이 100%가 풀리고콘텐츠 크기만큼만 영역으로 갖는다.

 

- 부모 요소는 자식이었던 요소를 자신의 영역 안에 포함하지 않는다.

 

- 자식요소의 offset값을 설정하지 않으면 부모요소의 바로 아래 위치에 놓이게 된다. (absolute와 동일)

  만일 형제 요소가 있다면 한 자리에 겹쳐 있는 것이 아니라

  코드에 쓰인 순서대로 display 속성에 맞게 배치된다.

 

- offset값을 설정하면 absolute의 규칙을 따라 자리가 결정된다.

  다만 부모요소를 relative로 설정해도 그 아래 자리에 놓이지 않고

  가장 상위 태그인 html를 기준으로 자리를 잡는다.