mjeongriver
article thumbnail
Published 2022. 12. 22. 16:39
day51-css TIL/HTML&CSS

1. position(매우 중요)

- absolute: 절대적 위치 좌표를 설정합니다.

- fixed: 화면을 기준으로 절대적 위치 좌표를 설정합니다.

- position 속성은 반드시 다음 스타일 속성(top, bottom, left, right)과 함께 사용한다.

 

* position법칙

1. absolute를 사용하면 부모의 relative요소 기반으로 박스가 올라온다. 그렇기 때문에 일반적으로

2. 자식요소에 absolute를 사용하면 부모요소의 relative를 넣어준다.

3. top, bottom중 하나, left, right중에 하나로 위치를 조정한다.

 

* z-index 속성

- HTML 태그는 사실 3D형태를 나타내고 있다. 이러한 순서를 변경할 때에 z-index 속성을 사용한다. 큰 값을 입력할 수록 위로 올라온다.

 

* 예제 1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        * {margin: 0; padding: 0;}
        .list {
            width: 50%; /* 바디 영역 기준 50% */
            margin: 0 auto;
            border: 1px solid #777;
        }

        p {height: 100px;}

        .content {
            position: relative;
        }

        .item1 {background-color: aqua;}
        .item2 {
            background-color: red;
            /* 포지션 absolute를 적용하면 부모에 relative가 들어갑니다. (들어가지 않으면 위치가 body 기준이 됨) */
            /* 포지션을 적용하면 top, bottom 중 1개, left, right 중 1개 */
            position: absolute; 
            top: 10px; /* 위치 조정*/
            left: 30px;
            width: 50px; /* 크기 조정*/
            height: 50px;
        }
        .item3 {background-color: yellow;}

    </style>


</head>
<body>
    
    <div class = "list">
        <div class = "content">
            <p class ="item1">포지션</p>
            <p class ="item2">포지션</p>
            <p class ="item3">포지션</p>
        </div>
    </div>

</body>
</html>

1) position: absolute 적용 및 top, left 적용 전
2) top, left 적용 후
3) relative 적용 후

 

* 예제 2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
     section {
        width: 500px;
        overflow: hidden;
        margin: 0 auto;
     }

     section .box {
        float: left;
        width: 25%;
        background-color: aqua;
        height: 100px;
     }

     .pos {
        background-color: red;
        /* 상대 위치 (박스의 원래 위치) 기준으로 z축 올림 */
        /* position: relative; */
        position: absolute;
        top: 20px;
        left: 10px;
    }
    </style>

</head>
<body>

    <!-- position: relative; 가 있는 위치 기준으로 올라가게 됩니다. -->
    
    <section style = "position: relative;">
        <div class = "box">박스1</div>
        <div class = "box">박스1</div>
        <div class = "box">박스1</div>
        <div class = "box">
            박스1
            <div class = "pos">포지션</div>
        </div>
    </section>

</body>
</html>

 

* 예제 3

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>

        * {margin: 0; padding: 0; list-style: none;}
        section{
            height: 2000px;
            background-color: aqua;
            margin-top: 150px;
        }

        header{
            background-color: #fff;
            position: fixed; /* 스크롤을 따라다님 */
            left: 0;
            top: 0;
            width: 100%;
            text-align: center;
            z-index: 5; /* 포지션이 겹칠 때 우선순위를 주는 속성 */
        }

        .menu ul{background-color: #000;}
        .menu ul li {display: inline;}
        .menu ul li a {
            display: inline-block;
            color: #777;
            text-decoration: none;
            width: 50px;
            height: 50px;
            line-height: 50px;
        }

        .side{
            position: fixed;
            right: 0;
            top: 200px; 

            /* 포지션이 겹치는 경우 z축의 우선순위 지정 보통 1~10 사이 값(숫자가 올라갈 수록 올라옴) */
            z-index: 10;
            background-color: #282828;
            text-align: center;
        }

        .side ul li a {
            color: #fff;
            text-decoration: none;
            font-size: 14px;

            display: block; /* a가 인라인이라 height가 안들어감 block으로 변경 */
            height: 50px;
            line-height: 50px;
            width: 100px;
            border-top: 1px solid #777;
        }



    </style>

</head>
<body>
    
    <header>
        <div>
        <img src="img/bgimg.png" alt="로고">
        </div>
        <nav class = "menu">
            <ul>
                <li><a href="#">메뉴</a></li>
                <li><a href="#">메뉴</a></li>
                <li><a href="#">메뉴</a></li>
                <li><a href="#">메뉴</a></li>
            </ul>
        </nav>
    </header>

    <aside class="side">
        <ul>
            <li><a href="#">카톡</a></li>
            <li><a href="#">전화번호</a></li>
            <li><a href="#">메뉴1</a></li>
            <li><a href="#">메뉴2</a></li>
        </ul>
    </aside>

    <section>
        내용.....
    </section>

</body>
</html>

 

* 예제 4(sticky)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        .inner1 {height: 200px; background-color: yellow;}
        .inner2 {
            background-color: red;

            /*
            1. sticky는 top, bottom, left, right 중 필수적으로 하나를 설정해야 합니다.
            2. 부모 태그에 overflow 속성이 있다면 동작이 안됩니다. 
            3. top 속성에 fixed 되는 지점을 기록하면 됩니다.
            */
            position: sticky;
            top: 0px;
            left: 0;
        }
        .inner3 {height: 2000px; background-color: green;}
    </style>

</head>
<body>

    <section>
        <div class="inner1">
            내용...
        </div>
        <aside class = "inner2">
            sticky는 특정 높이 전까지는 고정으로 있다가, 특정 높이 도달하면 fixed 되는 속성
        </aside>
        <div class = "inner3">
            내용...
        </div>
    </section>

</body>
</html>

 

* 예제 5

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        *{margin: 0; padding: 0;}
       .wrap{
            border: 1px solid #999;
            width: 800px;
            margin: 0 auto;
            position: relative;
            padding: 10px;
       }

       .wrap-img {
            position: absolute;
            top: 10px;
            left: 10px;
       }

       .wrap-img img {
            width: 50px;
       }

       .wrap-content {
            padding-left: 60px;
            overflow: hidden;
       }

       .wrap-content textarea{
            width: 100%;
            box-sizing: border-box;
            height: 150px;
            resize: vertical;
       }

       .wrap-content .left {
            float: left;
       }

       .wrap-content .right {
            float: right;
       }

       .left input {display: block;}

    </style>

</head>
<body>
    
    <div class = "wrap"> <!-- margin: 0 auto -->
        <div class = "wrap-img"><!-- 포지션-->
            <img src ="img/bgimg.png" alt = "물고기">
        </div>

        <div class = "wrap-content"> <!-- 패딩 left -->
            <textarea>힌트: 이미지 영역을 position absolute를 사용합니다. </textarea> 
            <div class = "left"> <!-- float: left-->
                <input type="text"> 
                <input type="text">
            </div>
            <button type="button" class = "right">등록하기</button> <!-- float: right -->
            
        </div>

    </div>

    <div class ="wrap">
        <div class = "wrap-img">
            <img src = "img/bgimg.png" alt="물고기">
        </div>

        <div class = "wrap-content">

        <div class = "left">
            <p style="margin: 0;"><strong>제목</strong></p>
            <p style="margin: 0;"><small>내용</small></p>
        </div>

            <button type = "button" class = "right">삭제</button>
            <button type = "button" class = "right">수정</button>
        </div>

    </div>

</body>
</html>

 

'TIL > HTML&CSS' 카테고리의 다른 글

day53-css  (0) 2022.12.26
day52-css  (1) 2022.12.23
day50-css  (0) 2022.12.21
day49-css  (0) 2022.12.20
day48-css(visual studio code)  (0) 2022.12.13
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그