본문 바로가기
웹/CSS

[코딩 공부_53] (**중요) position 속성에 대하여

by BEE_0o0 2021. 4. 15.

1. position이란?

- 위치를 뜻한다! magin과 다르게 다른 친구들에게 아무런 영향을 끼치지 않고 자리이동을 한다 

- position을 사용하려면 공간, 기준, 자리(위치)가 필요하다 

공간 html
기준 top/bottom, left/right
자리(위치) px, %

Q. transform의 translate와 position의 차이는?

A. transforem은 animation에 주로 사용한다(motion)

 

2. position 속성

속성 공간 기준 위치 공간 배정
static(default) html 본인 위치 X O
absolute(절대적인) html/relative(부모) html, relative(부모) property : top, right, bottom, left
value: px, %
X
(공중으로 뜬다)
relative(상대적인) html 본인(현재) 위치 property : top, right, bottom, left
value: px, %
O
fixed(고정된) html html property : top, right, bottom, left
value: px, %
X
(공중으로 뜬다)

- 이번 내용은 정말정말 중요하기 때문에 하나하나씩 속성을 보도록 하겠다

 

 ① static(default값)

<style>
    .container {
        border: 1px solid #000;
        padding: 1rem;
        color: #fff;
        font-size: 1.5rem;
    }
    .static {
        background: gold;
        /* 
        default value 값이다
        top left가 안된다
         */
        position: static;
        top: 100%;
        left: 100%;
        bottom: 100%;
        right: 20%;
    }
</style>
    <div class="container">
		<div class="box static">
			static
		</div>
    </div>

- top / left / bottom / right 적용이 안된다 (위에도 top / left / bottom / right 값을 줬지만 적용 되지 않는다!)

- default 값이기 때문에 위치를 변경하고 싶다면 다른 속성으로 변경해야한다 ! 

 

relative : 자기 자신을 기준으로!

<style>
    .container {
        border: 1px solid #000;
        padding: 1rem;
        color: #fff;
        font-size: 1.5rem;
    }
	.relative {
        /* 
        본인의 최초 위치가 기준이 된다 relative라는 녀석이!
        position은 타인에게 아무런 영향을 미치지 않음 
        (margin은 다른 얘들에게 영향을 끼침) 
        */
        /* 
        transform의 translate과 position은 똑같지만 용도가 다르다
        transform은 animation에 주로 사용한다(motion)
         */
        position: relative;
        top: 50px;
        right: -100px;
        background: crimson;
    }
  </style>
        <div class="container">
            <div class="box relative">relative</div>
        </div>

- 본인의 최초 위치가 기준이 된다 

 

absolute : 부모 요소를 기준으로!

 <style>
    .container {
        border: 1px solid #000;
        padding: 1rem;
        color: #fff;
        font-size: 1.5rem;
    }
 .absolute {
        /* 
            특징
            1. 공중에 뜬다
            2. inline-block 속성이 된다 - 완전 중요***
            (컨텐츠값이 기본값, 크기가 작아졌다)
        */
        position: absolute;
        top: 0;
        left: 0;
        background: purple;
        opacity: 0.5;
    }
    </style>
        <div class="container">
            <div class="box absolute">absolute</div>
        </div>

- 공중에 뜬다! 천사의 날개를 달고 다니는 녀석이다 

** inline-block 요소가 된다! 

 

 

fixed : html 기준으로

<style>
    .container {
        border: 1px solid #000;
        padding: 1rem;
        color: #fff;
        font-size: 1.5rem;
    }
	.fixed {
        background: coral;
        left: 0;
        position: fixed;
        /* 
            특징 : absolute와 같다
            1. 공중에 뜬다 (겹쳐졌다, 공간이 없어졌다)
            2. inline-block 속성이 된다 (컨텐츠 값이 기본값,)
            3. scroll이 되어도 사라지지 않는다 
            (숨길 때 사용)
         */
    }
    </style>
        <div class="container">
            <div class="box fixed">fixed</div>
                </div>

- absolute와 같다(공중에 뜬다, inline-block이 된다)

- scroll이 되어도 사라지지 않는다(숨길때 사용한다)

 

 

<실습1>

 

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>position</title>
<style>
    * {
        box-sizing: border-box;
    }
    .box {
        background: skyblue;
        width: 500px;
        height: 500px;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }
    .gold {
        background: gold;
        width: 100px;
        height: 100px;
        border: 1px solid #000;
        font-size: 2rem;
        font-weight: bold;
        text-align: center;
        line-height: 90px;
        border-radius: 50%;
        position: absolute;

    }
    .center {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }
    .box1 {
        left: 50%;
        bottom: 100%;
        transform: translate(-50%, 50%);
        
    }
    .box2 {
        right: 0;
        top: 50%;
        transform:translate(50%, -50%);
    }
    .box3 {
        bottom: 0;
        left: 50%;
        transform: translate(-50%, 50%);
    }
    .box4 {
        left: 0;
        top: 50%;
        transform: translate(-50%, -50%);
    }
</style>
</head>
<body>
    <div class="box">
        <div class="gold center">
            center
        </div>
        <div class="gold box1">
            1
        </div>
        <div class="gold box2">
            2
        </div>
        <div class="gold box3">
            3
        </div>
        <div class="gold box4">
            4
        </div>
    </div>
</body>
</html>

 

 

<실습2>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>pos prac</title>
<style>
    * {
        margin: 0;
    }
    img {
        max-width: 100%;
    }
    .contanier {
        border: 1px solid #000;
        height: 400px;
        text-align: center;
    }
    .item {
        border: 1px solid #000;
        display: inline-block;
        /* width: 30%; */
        height: 300px;
        position: relative;
        cursor: pointer;
    }
    .item img {
        height: 100%;
    }
    .item .detail {
        position: absolute;
        top: 0;
        left: 0;
        /* border: 1px solid #000; */
        width: 100%;
        height: 100%;
        opacity: 0;
        transition: all .5s;
        background: rgba(0,0,0,0.5);
    }
    .item:hover .detail {
        opacity: 1;
        color: #fff;
    }
    .item .detail h1 {
        margin-top: 4rem;
    }
    .item .detail p {
        padding: 1rem 1rem;
    }
    .item .detail a {
        color: #fff;
        text-decoration: none;
        font-size: 1rem;
        display: inline-block;
        width: 100px;
        height: 50px;
        background: dodgerblue;
        border-radius: 10px;
        line-height: 50px;
    }
</style>
</head>
<body>
    <div class="contanier">
        <div class="item">
            <img src="./image/de1580bad1f0149379af6e24e12fe07d.png" alt="">
            <!-- hover -->
            <div class="detail">
                <h1>스와로브 스키</h1>
                <p>price 19,000원</p>
                <a href="#">buy</a>
            </div>
        </div>
    </div>
</body>
</html>

아직 복잡미묘해서 정확하게 이건 이거다! 이런느낌은 안들지만 absolute와 relative에대한개념은정확하게이해했다!!

내일 열심히 실습하면서 개념을 머릿 속에 심어놔야겠다 ^_^ !

댓글