position

๋ฐ•์ข…ํ˜ธยท2024๋…„ 1์›” 9์ผ
0

FrontEnd

๋ชฉ๋ก ๋ณด๊ธฐ
8/17

๐Ÿ”ด position์ด๋ž€?

์ด๋ฆ„์—์„œ์ฒ˜๋Ÿผ, position์ด๋ž€ HTML ํƒœ๊ทธ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด์ฃผ๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. position ์†์„ฑ์„ ์ด์šฉํ•ด ์šฐ๋ฆฌ๋Š” ํŽ˜์ด์ง€์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŸ  position์˜ ์ข…๋ฅ˜

position : static

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํƒœ๊ทธ๋“ค์€ ๋”ฐ๋กœ position ์†์„ฑ๊ฐ’์„ ์ฃผ์ง€ ์•Š์•˜๋‹ค๋ฉด static ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ฆ‰ html์— ์“ด ํƒœ๊ทธ ์ˆœ์œผ๋กœ ์ •์ƒ์ ์ธ ํ๋ฆ„(normal flow)์— ๋”ฐ๋ผ ์œ„์น˜๊ฐ€ ์ง€์ •๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>static</title>
  <style>
  .box1{
    position:static;
    background-color: green;
    color:white;
    width: 100px;
    height: 100px;
  }

  .box2{
    position:static;
    background-color: red;
    color:white;
    width: 100px;
    height: 100px;
  }

  .box3{
    position:static;
    background-color: blue;
    color:white;
    width: 100px;
    height: 100px;
  }
  </style>
</head>
<body>
    <div class="box1">box1</div>
    <div class="box2">box2</div>
    <div class="box3">box3</div>
</body>
</html>

์ด๋ ‡๊ฒŒ static์€ ์ฐจ๋ก€๋Œ€๋กœ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋†“์Šต๋‹ˆ๋‹ค!

position : relative

๋‹จ์–ด ์ž์ฒด์˜ ๋œป์ฒ˜๋Ÿผ '์ƒ๋Œ€์ '์ธ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋Œ€์ฒด '๋ฌด์—‡'์— ์ƒ๋Œ€์ ์ธ์ง€ ๊ถ๊ธˆํ•ดํ•˜์‹ค ํ…๋ฐ์š”. ๋ฐ”๋กœ static, ์ฆ‰ ์›๋ž˜ ์ž์‹ ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ์œ„์น˜์— ์ƒ๋Œ€์ ์ž…๋‹ˆ๋‹ค. relative๋Š” ์ž์‹ ์ด ์›๋ž˜ ์žˆ๋˜ ์ž๋ฆฌ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ position: relative;๋ผ๋Š” ๊ฐ’์„ ์ฃผ๊ณ  left : 50px; ์ด๋ผ๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ์ ์–ด ์ฃผ๋ฉด, ๋ณธ์ธ์˜ static ์ž๋ฆฌ์—์„œ ์™ผ์ชฝ์œผ๋กœ 50px๋งŒํผ ๋–จ์–ด์ง„ ์ž๋ฆฌ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • relative ์†์„ฑ์€ ์›๋ž˜์˜ ์ž๋ฆฌ๋ฅผ ์ธ์‹ํ•˜์ง€๋งŒ left, right, top, bottom ์†์„ฑ์„ ์ด์šฉํ•ด์„œ ์›€์ง์ผ๋•Œ๋Š” ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ ๋“ค์˜ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>relative</title>
  <style>
  .box1{
    position: static;
    background-color: green;
    color: white;
    width: 100px;
    height: 100px;
  }
  .box2{
    position:relative;
    left: 40px;
    background-color: red;
    color:white;
    width: 100px;
    height: 100px;
  }
  </style>
</head>
<body>
  <div class="box1">box1</div>
  <div class="box2">box2</div>
</body>
</html>

relative ์†์„ฑ์„ ์ฃผ์–ด box2๊ฐ€ ์›๋ž˜ ์žˆ์–ด์•ผ ํ•  ์ž๋ฆฌ์—์„œ ์™ผ์ชฝ์œผ๋กœ 40px ๋–จ์–ด๋œจ๋ฆฐ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

position : absolute

absolute์˜ ํŠน์ง•์„ ๊ตณ์ด ํ•œ ๋‹จ์–ด๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด 'my way'๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. position: absolute;๋ผ๊ณ  ํ•œ ๋’ค top : 20px; right: 30px;์ด๋ผ๊ณ  ์ถ”๊ฐ€์  ๊ฐ’์„ ์ฃผ๋ฉด, ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ๋™๋–จ์–ด์ง„ ๋ฐ•์Šค๊ฐ€ ํ•˜๋‚˜ ๋†“์—ฌ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์ด absolute๋„ ๋ˆˆ์น˜๋ฅผ ๋ณด๋Š” ๋…€์„์ด ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ๋ถ€๋ชจ ์š”์†Œ์ž…๋‹ˆ๋‹ค. absolute๋Š” static์„ ์ œ์™ธํ•œ position ์†์„ฑ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ถ€๋ชจ์˜ ๋ฐ•์Šค ๋‚ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ relative๊ฐ€ static ์†์„ฑ๊ฐ’์ด์—ˆ์„ ๋•Œ์˜ ์ž๋ฆฌ๋ฅผ ์œ ๋…ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”.

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>relative-absolute</title>
  <style>

  .box1{
    position:relative;
    top:40px;
    background-color: green;
    color:white;
    width: 100px;
    height: 100px;
  }
  .box2{
    position:absolute;
    top: 40px;
    background-color: red;
    color:white;
    width: 100px;
    height: 100px;
  }
  .box3{
    position: absolute;
		top: 30px;
    left: 30px;
    background-color: blue;
    color:white;
    width: 100px;
    height: 100px;
  }
  </style>
</head>
<body>
  <div class="box3">box3</div>
  <div class="box1">box1
    <div class="box2">
      box2
    </div>

  </div>
</body>
</html>

์ƒ๋‹จ์˜ ์ฝ”๋“œ๋ฅผ ์›นํŽ˜์ด์ง€์— ๊ตฌํ˜„ํ•œ ์‚ฌ์ง„์ž…๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ relative ์†์„ฑ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” box3์€ left์™€ top์— ์–ด๋Š ์ •๋„ px์„ ๋‘์–ด ๋–จ์–ดํŠธ๋ ธ์„ ๋•Œ ์ƒ๋‹จ ์ œ์ผ ์™ผ์ชฝ์„ ๊ธฐ์ค€์ ์œผ๋กœ ์›€์ง์˜€๋‹ค๋ฉด, relative ์†์„ฑ์ธ box1 ๋‚ด์— ๊ตฌ์†๋ฐ›๋Š” box2๋Š” top: 40px; ๊ฐ’์„ ์ฃผ์—ˆ์„ ๋•Œ, box1์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์›€์ง์˜€์Œ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ box2์™€ 3์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ ๋˜‘๊ฐ™์ด position: absolute; ์˜ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด๋„, ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ position ์†์„ฑ๊ฐ’์„ ๊ฐ€์กŒ๋Š”์ง€ ์•„๋‹Œ์ง€์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ํ•˜๋‹จ์— ๋กœ๋ ˜์ž…์ˆจ์„ ๋„ฃ์–ด ์ฝ˜ํ…์ธ ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ธ์‹๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
  • ์•„๋ž˜ ์ฝ”๋“œ์—์„œ one:nth-child(2)์— position: absolute;๋ฅผ relative๋กœ ๋ฐ”๊ฟ”๋ณด์„ธ์š”.
  • container์— position: relative;๋ฅผ ์ฃผ์„์ฒ˜๋ฆฌ ํ•ด๋ณด์„ธ์š”.
<!DOCTYPE html>
<html lang="ko">
<head>
    <style>
        .container {
            position: relative;
            width: 500px;
            height: 500px;
            margin-left: 100px;
            border: 5px solid black;
        }

        .one {
            width: 100px;
            height: 100px;
            border: 1px solid black;
            color: white;
        }

        .one:nth-child(1) {
            position: static;
            background-color: red;
        }

        .one:nth-child(2) {
            position: absolute;
            top: 10px;
            left: 10px;
            background-color: green;
        }

        .one:nth-child(3) {
            position: static;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="one">box1</div>
        <div class="one">box2</div>
        <div class="one">box3</div>
    </div>
</body>
</html>

์ด๋ ‡๋“ฏ ์‚ฌ๋ฌผ์ด ๋†“์ด๋Š” ๊ณต๊ฐ„์€ 2์ฐจ์›์ด ์•„๋‹Œ 3์ฐจ์›์ด๊ธฐ ๋•Œ๋ฌธ์—

2.4 position : fixed

์Šคํฌ๋กค์„ ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜ ๋‚ด๋ฆด ๋•Œ, ํŠน์ • ๋ฐ•์Šค๊ฐ€ ๊ณ ์ •๋˜์–ด ์›€์ง์ด์ง€ ์•Š์•˜์œผ๋ฉด ํ•œ๋‹ค๋ฉด, ์ด fixed ์†์„ฑ์„ ์ด์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค! position:fixed๋ฅผ ๊ธฐ์ž…ํ•˜๋ฉด, absolute ๊ฐ€ position ์†์„ฑ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ถ€๋ชจ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ„์น˜๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ, fixed๋Š” ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด(๋ทฐํฌํŠธ)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งˆ์น˜ ํ™”๋ฉด์— ๋ถ™์€ ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ ์ž๋ฆฌ์— ๊ณ„์†ํ•ด์„œ ์œ„์น˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์š”์ฆ˜ ๋งŽ์€ ์‚ฌ์ดํŠธ๋“ค์ด ํŽ˜์ด์ง€๊ฐ€ ์Šคํฌ๋กค ๋˜์–ด๋„ ์ค‘์š”ํ•œ ์ •๋ณด(๋„ค๋น„๊ฒŒ์ด์…˜ ๊ฐ™์€)๋ฅผ ํ™”๋ฉด์— ๊ณ„์† ๋…ธ์ถœ ์‹œ์ผœ์ฃผ๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.

์œ„ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํ™”๋ฉด์—์„œ ์Šคํฌ๋กค์„ ๋‚ด๋ ค๋„ ์ƒ๋‹จ์˜ ๊ฒ€์ƒ‰ ์ฐฝ์€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ๋ทฐํฌํŠธ ์ƒ๋‹จ์— ๊ณ ์ •๋˜์–ด ์žˆ๋Š” ๋ชจ์Šต์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ header ํด๋ž˜์Šค์— ์ ์šฉ๋œ position:fixed ์†์„ฑ์„ ์ง์ ‘ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

<!DOCTYPE html>
<html lang="ko">
<head>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Pacifico&display=swap" rel="stylesheet">
    <style>
        body {
            margin: 0;
        }

        .nav {
            font-family: 'Pacifico', cursive;
            position: fixed;
            padding: 10px;
            background-color: brown;
            color: white;
            font-size: 28px;
            width: 100%;
            height: 45px;
        }

        .container {
            margin-top: 0;
            padding-top: 120px;
            margin-left: 20px;
        }

        .dark-mode {
            font-family: 'Pacifico', cursive;
            font-size: 23px;
            position: fixed;
            width: 200px;
            height: 40px;
            background-color: brown;
            border-radius: 7px;
            color: white;
            bottom: 50px;
            right: 50px;
            text-align:center
        }
    </style>
</head>
<body>
    <div class="nav">hello</div>
    <div class="container">
        (lorem+br)*100
    </div>
    <div class="dark-mode">dark</div>
</body>
</html>

2.5 position : sticky

sticky(๋ˆ๋ˆํ•œ, ๋ˆ์ ๋ˆ์ ํ•œ) ์†์„ฑ๊ฐ’์ด ์ ์šฉ๋œ ์š”์†Œ๋Š” ์กฐ์ƒ์— ์Šคํฌ๋กค์ด ์žˆ๋‹ค๋ฉด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ถ€๋ชจ ์š”์†Œ์˜ ์ปจํ…์ธ  ์˜์—ญ์— ๋‹ฌ๋ผ๋ถ™์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์ œ์—์„œ ์Šคํฌ๋กค์„ ๋‚ด๋ ค๋ณด์„ธ์š”.
(body์†์„ฑ์—๋Š” ์Šคํฌ๋กค ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

<!DOCTYPE html>
<html lang="ko">
<head>
    <style>
        section {
            height: 1000px;
            border: 3px solid black;
        }

        h2 {
            position: -webkit-sticky;
            position: sticky;
            top: 0px;
            background: greenyellow;
            margin: 0;
        }
    </style>
</head>

<body>
    <h1>sticky test</h1>
    (section>h2{์˜ค๋Š˜์˜ ๋ฉ”๋‰ด$}+ul>(li>lorem)*3)*3
</body>

</html>

position - CSS: Cascading Style Sheets | MDN

z-index

position์„ ํ†ตํ•ด ์š”์†Œ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋‹ค๋ณด๋ฉด ์š”์†Œ์™€ ์š”์†Œ๊ฐ€ ๊ฒน์ณ๋ณด์ด๋Š” ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์–ด๋–ค ์š”์†Œ๊ฐ€ ๋” ์œ„๋กœ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ• ์ง€ ๊ฒฐ์ •ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋ฐ”๋กœ z-index ์†์„ฑ์ž…๋‹ˆ๋‹ค.

์˜ค์ง static์„ ์ œ์™ธํ•œ position ์†์„ฑ๊ฐ’์ด ์ ์šฉ๋œ ์š”์†Œ์˜ Z์ถ• ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, z-index ๊ฐ’์ด ๋” ํฐ ์š”์†Œ๊ฐ€ ๊ฐ’์ด ์ž‘์€ ์š”์†Œ์˜ ์œ„๋ฅผ ๋ฎ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ถ€๋ชจ๊ฐ€ z-index๋ฅผ ๋†’์—ฌ ์ž์‹ ์•ž์œผ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž์‹์€ z-index๋ฅผ ๋‚ฎ์ถฐ ๋ถ€๋ชจ ๋’ค๋กœ ๊ฐ€๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

![](https://velog.velcdn.com/images/penameyo/post/48025c4c-ff0c-425c-b7be-ec05cfd86a39/image.png์š”๋ ‡๊ฒŒ z-index์˜ ์ •์ˆ˜๊ฐ’์ด ๋” ํฐ ๊ฐœ์ฒด๊ฐ€ ์•ž์œผ๋กœ ๋‚˜์˜จ๋‹ค

profile
Hey๐Ÿ–๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด