๐Ÿ“ŒLanguage/HTML & CSS

css position & offset / static, relative, absolute, fixed / css ๊ณต๋ถ€ํ•  ๋•Œ ๋ณด๋ฉด ์ข‹์€ ์‚ฌ์ดํŠธ

hellohailie 2022. 4. 19. 22:56

position ์†์„ฑ

์š”์†Œ์˜ ์œ„์น˜๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฐ’ : static

position: static | absolute | fixed | relative | sticky | initial | inherit;

< ์†์„ฑ ๊ฐ’ >

static Normal-flow ์— ๋”ฐ๋ผ ๋ฐฐ์น˜๋˜๋ฉฐ offset ๊ฐ’์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. (๊ธฐ๋ณธ๊ฐ’)
absolute
  • ๋ถ€๋ชจ ์š”์†Œ์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ offset ์— ๋”ฐ๋ผ ๋ฐฐ์น˜๋œ๋‹ค.
    ๋ถ€๋ชจ๊ฐ€ position ๊ฐ’(static ์ œ์™ธ)์„ ๊ฐ€์ง€๋ฉด offset ๊ฐ’์˜ ์‹œ์ž‘์ ์ด ๋œ๋‹ค.
    * ๋ถ€๋ชจ์˜ position ๊ฐ’์ด static ์ธ ๊ฒฝ์šฐ ์กฐ์ƒ์˜ position ๊ฐ’์ด static์ด
        ์•„๋‹ ๋•Œ๊นŒ์ง€ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค.
  • Normal-flow์˜ ํ๋ฆ„์—์„œ ๋ฒ—์–ด๋‚˜๊ณ , display๋ฅผ block์œผ๋กœ ๊ฐ–๋Š”๋‹ค. 
    ์ ˆ๋Œ€์œ„์น˜
    0,0 ์ด๋ฉด padding์— ๊นŒ์ง€ ๋ถ™๋Š”๋‹ค. 
fixed
  • ๋ทฐํฌํŠธ(๋ธŒ๋ผ์šฐ์ €์˜ ์ฐฝ)๋ฅผ ๊ธฐ์ค€์œผ๋กœ offset ์— ๋”ฐ๋ผ ๋ฐฐ์น˜๋œ๋‹ค.
    ์ฆ‰, ํ™”๋ฉด ์Šคํฌ๋กค์— ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ํ™”๋ฉด์˜ ์ •ํ•ด์ง„ ์œ„์น˜์— ์ •๋ณด๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.
  • ๋ถ€๋ชจ์˜ ์œ„์น˜์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
    ๊ณ ์ •์œ„์น˜
relative
  • ์ž์‹ ์ด ์›๋ž˜ ์žˆ์–ด์•ผ ํ•  ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ offset ์— ๋”ฐ๋ผ ๋ฐฐ์น˜๋œ๋‹ค.
    ๋ถ€๋ชจ์˜ position ์†์„ฑ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
  • Normal -flow์˜ ํ๋ฆ„์— ๋”ฐ๋ฅธ๋‹ค.
  • ์ฃผ๋ณ€ ์š”์†Œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด์„œ offset ๊ฐ’์œผ๋กœ ์ด๋™ํ•œ๋‹ค.
    ์ƒ๋Œ€์œ„์น˜ (์ž๊ธฐ ์ž์‹ ์„ ๊ธฐ์ค€์œผ๋กœํ•ด์„œ ์ƒ๋Œ€์ ์œผ๋กœ ์›€์ง์ธ๋‹ค. )

     
** top: -50px ์œ„๋กœ ์›€์ง์ธ๋‹ค. (bottom: +50px ์ด๊ฑฐ๋ž‘ ๊ฒฐ๋ก ์ ์œผ๋กœ ์œ„์น˜๋Š” ๊ฐ™๋‹ค.)
** left:-50px ์™ผ์ชฝ์œผ๋กœ ์›€์ง์ธ๋‹ค. (right: +50px ์ด๊ฑฐ๋ž‘ ๊ฒฐ๋ก ์ ์œผ๋กœ ์œ„์น˜๋Š” ๊ฐ™๋‹ค.)

 

  • Normal-flow  ๋ž€? ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ ๊ฐ์˜ ์š”์†Œ๋“ค์˜ ์„ฑ์งˆ์— ๋”ฐ๋ผ ๋ฐฐ์น˜ ๋˜๋Š” ์ˆœ์„œ(ํ๋ฆ„)๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, block ๋ ˆ๋ฒจ ์š”์†Œ๋“ค์€ ์ƒํ•˜๋กœ ๋ฐฐ์น˜๋˜๊ณ , inline ๋ ˆ๋ฒจ ์š”์†Œ๋“ค์€ ์ขŒ์šฐ๋กœ ๋ฐฐ์น˜๋˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

sticky๋Š” ์‹ค๋ฌด์ƒ ์ž˜ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. (์ข‹์€ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์ง€์›๋ฅ ์ด ์ข‹์ง€ ์•Š๋‹ค. // can i use ์‚ฌ์ดํŠธ ์ฐธ๊ณ )

 


offset(top/left/bottom/right)

top|bottom|left|right: auto|length|initial|inherit;
top: 50%;
left: 10px;
bottom: -10px;
right: auto;
  • offset์˜ %๋‹จ์œ„ ์‚ฌ์šฉ ์ด์ „์— padding๊ณผ margin์—์„œ % ๊ฐ’์„ ์ ์šฉํ•  ๋•Œ, ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ์— ๊ด€๊ณ„์—†์ด  ๊ฐ€๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ %๊ฐ’์„ ๊ณ„์‚ฐ๋œ๋‹ค๊ณ  ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ offset์€ top, bottom (์ƒํ•˜) ๋Š” ๊ธฐ์ค€์ด ๋˜๋Š” ์š”์†Œ์˜ height ๊ฐ’ left, right (์ขŒ์šฐ) ๋Š” width๊ฐ’์— ๋Œ€ํ•˜์—ฌ ๊ณ„์‚ฐ๋˜์–ด์ง‘๋‹ˆ๋‹ค.

 

 

**๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์†์„ฑ๊ฐ’์˜ ์กฐํ•ฉ์„ ๊ณ ๋ คํ•˜๋ฉด์„œ๊นŒ์ง€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค. 

๊ทธ๋ž˜์„œ default ๊ฐ’์ผ ๋•Œ top, right๋ฅผ ์„ ์–ธํ•ด๋†“๊ณ  ๋ณ€ํ™”๊ฐ€ ์—†์„๋•Œ๋Š” position์„ ์ œ๋Œ€๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์œผ๋กœ ์„ ์–ธ์„ ํ–ˆ๋Š”์ง€ ๊ผญ ๋ฐœ๊ฒฌํ•  ์ค„ ์•Œ์•„์•ผ ํ•œ๋‹ค. 

 

๋ถ€๋ชจ๊ฐ€ static์ด ์•„๋‹Œ relative, absolute, fixed ์ผ ๋•Œ ๊ทธ๋•Œ ๊ทธ offset ๊ฐ’์ด ์ž‘๋™ํ•œ๋‹ค.

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>position</title>
  <style>
    .sibling {
      padding: 5px;
      background-color: #eee;
      text-align: center;
    }

    .parent {
      border: 1px dashed #aaa;
      padding: 10px;
    }

    .child,
    .child_offset {
      width: 60px;
      height: 60px;
      padding: 20px;
      background-color: #dc3636;
      text-align: center;
      color: #fff;
      font-weight: bold;
      border: 1px solid #333;
    }

    .child_offset {
      background-color: #3677dc;
    }

    .static {
      position: static;
    }

    .relative {
      position: relative;
    }

    .static {
      position: static;
    }

    .absolute {
      position: absolute;
    }

    .fixed {
      position: fixed;
    }
  </style>
</head>
<body>
  <h1>position (Offset ๋ฏธ์ง€์ •)</h1>
  <h2>static (๊ธฐ๋ณธ)</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <div class="child static">static</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>relative</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <div class="child relative">relative</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>absolute</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <!-- absolute, fixed๋Š” inline์š”์†Œ์ผ๋•Œ display:block์œผ๋กœ ๋ณ€๊ฒฝ์‹œํ‚ด. inline-block ๊ฐ’์„ ์ž„์˜ ์ง€์ •ํ–ˆ์„ ๋•Œ๋Š” ๊ทธ ๊ฐ’์„ ์œ ์ง€ํ•จ. -->
    <span class="child absolute">absolute</span>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>fixed</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <!-- ํ˜„์žฌ fixed๋Š” offset๊ฐ’์ด ์—†์–ด ๋ทฐํฌํŠธ ๋ฐ–์œผ๋กœ ๋ฐ€๋ ค๋‚˜์˜ค๋ฉด์„œ ํ™”๋ฉด ์•„๋ž˜๋กœ ์‚ฌ๋ผ์ง -->
    <div class="child fixed">fixed</div>
    <div class="sibling">Sibling 2</div>
  </div>


  <h1>position (Offset ์ง€์ •)</h1>
  <h2>static - </h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <div class="child_offset static" style="top: 40px; right: 40px;">static <br>top: 40, left: 40</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>relative</h2>
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <div class="child_offset relative" style="top: 40px; left: 40px;">relative <br>top: 40, left: 40</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>absolute - parent relative</h2>
  <div class="parent relative">
    <div class="sibling">Sibling 1</div>
    <div class="child_offset absolute" style="top: 40px; left: 80px;">absolute<br>top: 40, left: 80</div>
    <div class="sibling">Sibling 2</div>
  </div>

  <h2>fixed</h2>
  <!-- ๋ถ€๋ชจ๊ฐ€ fixed์—ฌ๋„ ๋ณ„๊ฐœ๋กœ ์œ„์น˜ํ•จ -->
  <div class="parent">
    <div class="sibling">Sibling 1</div>
    <div class="child_offset fixed" style="top:100px;left:80%;">fixed<br>top:100, left:80%</div>
    <div class="sibling">Sibling 2</div>
  </div>
</body>
</html>

 

 

 

See the Pen Untitled by HelloHailie (@hellohailie) on CodePen.

 

๐Ÿ‘‡css ์ฐธ๊ณ  ์‚ฌ์ดํŠธ๐Ÿ‘‡

https://caniuse.com/

 

Can I use... Support tables for HTML5, CSS3, etc

 

caniuse.com