본문 바로가기
Frontend/CSS

CSS 위치지정(상대, 절대, 고정, float, clear, z-index)

by code2772 2022. 10. 31.

[ 목차 ]

    728x90
    반응형

    ✔ CSS 위치 

    CSS Position
    요소의 위치를 결정하는 방식을 설정
    1. 정적(stataic)위치 지정방식
    - 기본값
    - HTML 요소의 위치를 결정하는 기본적인 방식
    - 단순히 웹 페이지의 흐름을 따라 요소들이 위치를 결정하는 방식

    ✔ CSS 상대위치

    2. 상대(relative)위치 지정방식
    - HTML 요소의 기본위치(정적 위치 지정방식)를 기준으로 위치를 재설정 하는 방식
    - top, left, right, bottom 속성 값을 사용할 수 있음

    ✔ CSS 상대위치 코드

    <!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>상대위치지정방식</title>
        <style>
            .relative1 {
                width: 200px;
                background-color: deeppink;
                padding: 20px;
            }
            .relative2 {
                position: relative;
                width: 200px;
                background-color: deepskyblue;
                padding: 20px;
                left: 200px;
                top: 100px;
               
            }
            .relative3 {  /*relative를 사용하면 겹침 현상이 발생한다. 기존 static은 겹침현상은 발생하지 않는다.
                */
                width: 200px;
                background-color: gold;
                padding: 20px;
            }
        </style>
    </head>
    <body>
        <h2>상대 위치 지정방식</h2>
        <div class="relative1">상대위치지정방식1</div>
        <div class="relative2">상대위치지정방식2</div>
        <div class="relative3">상대위치지정방식3</div>
    </body>
    </html>

    ✔ CSS 상대위치 결과

    ✔ CSS 고정위치

    3. 고정(fixed)위치 지정방식
    - 웹 페이지가 스크롤 되어도 고정위치로 지정된 요소는 항상 같은 곳에 위치
    - 뷰포트를 기준으로 위치를 설정하는 방식
    - top, left, right, bottom 속성값을 사용할 수 있음
    

    ✔ CSS 고정위치 코드

    <!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>고정위치 지정 방식</title>
        <style>
            #fx {
                position: fixed;
                width: 100px;
                height: 200px;
                background-color: gold;
                right: 10px;
                bottom: 10px;
            }
        </style>
    </head>
    <body>
        <h2>고정위치 지정 방식</h2>
        <div id="fx"></div>
        <div id="content"></div>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
        <p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem placeat eum ipsa perferendis, minus, temporibus beatae, nobis animi necessitatibus vel facilis illo magnam ducimus ea pariatur quasi similique rem a.</p>
    </body>
    </html>

    ✔ CSS 고정위치 결과

    ✔ CSS 고정위치2

    4. 부모태그를 이용한 고정(sticky)위치 지정방식
    - fixed가 브라우저 화면의 절대 위치를 사용하는 방면 sticky는 부모 태그의 절대뒤치값을 사용하는 방식
    - top, left, right, bottom 속성값을 사용할 수 있음
    - 익스플로러에서 작동하지 않음

    ✔ CSS 고정위치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>sticky</title>
        <style>
            html, body{margin: 0; padding: 0;}

            .header {
                height: 80px;
                background-color: gold;
            }

            .container{/*8:2와 같이 한 줄로 구역 나눠서 사용하는 부분*/
                display: flex;
                flex-flow: row nowrap;/*사이즈가 넘처도 밑으로 내려가지 마라*/
            }

            .content{
                box-sizing: border-box;
                width: 80%;
                height: 800px;
                background-color: gray;
            }

            .sidebar {
                position: sticky;
                box-sizing: border-box;
                width: 20%;
                background-color: deepskyblue;
                height: 400px;
                top: 0;/*top :0 상위 부모 컨테이너의 가장 상단에서 부터 적용*/
            }

            .footer {
                background-color: yellowgreen;
                height: 200px;
            }
        </style>
    </head>
    <body>
        <header class="header">헤더</header>
        <main class="container">
            <section class="content">메인 컨텐츠</section>
            <aside class="sidebar">Sticky</aside>
        </main>

        <footer class="footer">푸터</footer>
    </body>
    </html>

    ✔ CSS 고정위치2 결과

    ✔ CSS 절대위치

    5. 절대(absolute)위치 지정방식
    - 뷰포트를 기준으로 위치를 설정하는 방식
    - 조상요소를 기준으로 위치를 지정할 수 있음
    - 조상요소를 가지지 않으면 body 요소를 기준으로 위치를 결정
    - 조상요소를 기준으로 위치를 지정하려면 조상요소는 반드시 static위치 지정방식이 아니여야 함
    - top, left, right, bottom 속성값을 사용할 수 있음

    ✔ CSS 절대위치 코드

    <!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>절대위치지정방식</title>
        <style>
            #wrap{
                position: relative;/*static이면 wrap부분이 아닌 그 위인 body를 기준으로 한다.*/
                width: 500px;
                height: 500px;
                border: 3px solid red;
            }

            .box {/*absolute가 있으면 부모를 먼저 봐야(부모영역)하며 따로 위치 선정 */
                position: absolute;
                width: 50px;
                height: 50px;
                background-color: deeppink;
            }
            #ab1 {top: 0;right: 0;}
            #ab2 {bottom: 0;left : 0}
            #ab3 {bottom: 0;right: 0;}
            #ab4 {top: 100px;left: 150px;}
           



        </style>
    </head>
    <body>
         <h2>절대위치지정방식</h2>
         <div id="wrap">
            <div class="box" id="ab1"></div>
            <div class="box" id="ab2"></div>
            <div class="box" id="ab3"></div>
            <div class="box" id="ab4"></div>
            <div class="box" id="ab5"></div>
         </div>
    </body>
    </html>

    ✔ CSS 절대위치 결과

    ✔ CSS z-index

    z-index
    - HTML 요소의 위치를 설정(상대, 고정, 절대)하게 되면 위치 및 방식에 따라 요소가 겹칠 수 있음
    - 겹처지는 요소들이 쌓이는 순서를 결정할 때 z-index를 사용
    - 순서는 숫자의 크기가 클수록 위에 위치하고 작을 수록 아래 위치하게 됨
    

    ✔ CSS z-index 코드

    <!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>z-index</title>
        <style>
            div#wrpper {position: relative;}
            div.box {
                position: absolute;
                width: 200px;
                height: 200px;
                border: 1px solid black;
                font-size: 25px;
            }
            #b1 {
                left: 50px;
                top: 50px;
                background-color: deeppink;
                z-index: 10;
            }
            #b2 {
                left: 120;
                top: 70px;
                background-color: gold;
                z-index: 100;
            }
            #b3 {
                left: 70px;
                top: 110px;
                background-color: greenyellow;
                z-index: 1;
            }
           
        </style>
    </head>
    <body>
        <h2>z-index</h2>
        <div id="wrapper">
            <div id="b1" class="box">첫번째 div</div>
            <div id="b2" class="box">두전째 div</div>
            <div id="b3" class="box">세번째 div</div>
        </div>
       
    </body>
    </html>

    ✔ CSS z-index 결과

    ✔ CSS float

    float
    - HTML 요소가 주변(수평으로 나열된)의 다른 요소들과 자연스럽게 어울리도록 만들기 위해 사용
    - float를 적용받은 요소의 다음에 나오는 모든 요소들이 끌어올려짐
    - float를 적용받은 요소의 방향을 결정(left, center, right)
    - 컨텐츠의(내가 쓴 부분) 크기 만큼만 영역울 설정(블록)
    - float를 적용받은 요소는 다른 요소보다 위쪽에 위치

    ✔ CSS float 코드

    <!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>float</title>
        <style>
            img{
                float:left;
                margin-right: 20px;
            }
        </style>
    </head>
    <body>
        <img src="./배경.jpg" alt="별">
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Laudantium, laboriosam. Nihil quaerat nemo voluptates voluptatem earum? Rerum amet aliquid explicabo quibusdam dolor atque eius, laudantium laborum? Dicta cum animi mollitia.
    </body>
    </html>
     
    ✔ CSS float 결과
     
     
    ✔ CSS float2
     
    <!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>float2</title>
        <style>
            #box1 {
                padding: 20px;
                background-color: gold;
                float: left;
                margin-right: 20px;
            }
            #box2 {
                padding: 20px;
                background-color: deeppink;
                float: left;
                margin-right: 20px;
            }
            #box3 {
                padding: 20px;
                background-color: deepskyblue;
                float: left;
               
            }
            #box4 {
                padding: 20px;
                background-color: rgb(18, 224, 128);
                float: right;
           
            }
        </style>
    </head>
    <body>
        <h2>float2</h2>
        <div id="box1">박스 - 1</div>
        <div id="box2">박스 - 2</div>
        <div id="box3">박스 - 3</div>
        <div id="box4">박스 - 4</div>
    </body>
    </html>

    ✔ CSS float2 결과

    ✔ CSS clear

    clear
    - float 속성이 적용된 이후 나타나는 요소들의 동작을 조절
    - float 속성이 적용되면 그 이후에 등장하는 모든 요소들은 정확한 위치를 설정하기 어려움
    - clear 속성을 이용하여 이후에 등장하는 요소들이
      더이상 float속성에 영향을 받지 않도록 설정(left, right, both)

    ✔ CSS clear 코드

    <!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>clear</title>
        <style>
            body {margin: 20px 30px; max-width: 800px;}
            p{
                padding: 10px;
                text-align: center;
                font-size: 18px;
            }
            #p1 {
                float: left;
                width: 38%;
                background-color: gold;
                margin-bottom: 20px;
            }

            #p2 {
                float: right;
                width: 54%;
                background-color: deepskyblue;
            }

            #p3 {
                clear: both;
                background-color: deeppink;
               
            }

        </style>
    </head>
    <body>
        <h2>clear</h2>
        <div id="p1">
            <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. In, inventore? Reiciendis optio, distinctio eius quidem, voluptatem dignissimos possimus eum hic qui cupiditate labore error cumque corrupti quasi quis. Exercitationem, totam?</p></div>
            <div id="p2">
                <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. In, inventore? Reiciendis optio, distinctio eius quidem, voluptatem dignissimos possimus eum hic qui cupiditate labore error cumque corrupti quasi quis. Exercitationem, totam?</p></div>
                <div id="p3">
                    <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. In, inventore? Reiciendis optio, distinctio eius quidem, voluptatem dignissimos possimus eum hic qui cupiditate labore error cumque corrupti quasi quis. Exercitationem, totam?</p>
        </div>
    </body>
    </html>

    ✔ CSS clear 결과

     

    ✔ CSS 이단레이어 코드

     

     

    <!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>이단 레이아웃</title>
        <link rel="stylesheet" href="./css/layout.css">
        <style>

        </style>
    </head>
    <body>
        <div id="container">
            <header id="header">
                <h1>사이트 제목</h1>
            </header>
            <div id="contents">
                <h2>본문</h2>
                <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Harum tenetur vel, reiciendis repudiandae esse quasi voluptate at necessitatibus neque ducimus maiores natus doloribus maxime odio qui reprehenderit sunt iste? Itaque!</p></div>
            <div id="sidebar">
                <h2>사이드바</h2>
                <ul>
                    <li>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores, accusamus repudiandae a eum, beatae magni eius magnam ullam voluptates, laborum eaque expedita ab iure! Magnam mollitia repellendus explicabo sint distinctio.</li>
                </ul>
            </div>
            <footer id="footer">
                <h2>푸터</h2>
                <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Nobis, et. Tempora ipsa eveniet fuga quisquam? Deserunt cumque porro adipisci iste maxime ipsa doloremque ut omnis, non velit impedit dolorum deleniti!</p>
            </footer>
        </div>
    </body>
    </html>

    ✔ CSS 이단레이어 결과

    반응형