CSS) Position - static, relative, absolute, fixed, sticky

G_NewΒ·2025λ…„ 2μ›” 23일

CSS

λͺ©λ‘ 보기
5/7

Position

CSSμ—μ„œ position 속성은 HTML λ¬Έμ„œ μƒμ—μ„œ μš”μ†Œκ°€ λ°°μΉ˜λ˜λŠ” 방식을 κ²°μ •ν•œλ‹€.
μ‰½κ²Œ λ§ν•΄μ„œ, κΈ€μ˜ νλ¦„μ—μ„œ λ²—μ–΄λ‚˜μ„œ μš”μ†Œλ₯Ό 자유둭게 λ°°μΉ˜ν•  λ•Œ μ“°λŠ” 속성이닀.

position에 λ”°λΌμ„œ μœ„μΉ˜λ₯Ό μ •ν•˜λŠ” 기쀀이 달라지며, μ†μ„±κ°’μœΌλ‘œλŠ” static, relative, absolute, fixed, sticky κ°€ μžˆλ‹€.

position 속성은 μš”μ†Œμ˜ μ •ν™•ν•œ μœ„μΉ˜ 지정을 μœ„ν•΄μ„œ top, bottom, left, right 속성과 ν•¨κ»˜ μ‚¬μš©λ˜λ©°, μš”μ†Œκ°€ μ›λž˜ μœ„μΉ˜μ— μžˆμ„ λ•Œμ˜ μƒν•˜μ’Œμš°λ‘œ λΆ€ν„° μ–Όλ§ˆλ‚˜ λ–¨μ–΄μ§€κ²Œ ν• μ§€λ₯Ό μ§€μ •ν•  수 μžˆλ‹€.

ex) top: 20px; left: 10px; => μœ„μ—μ„œ 20px, μ™Όμͺ½μ—μ„œ 10px 만큼 λ–¨μ–΄μ§€κ²Œ λ°°μΉ˜ν•œλ‹€.

λ§Œμ•½, top, bottom, left, right 의 값이 λͺ¨λ‘ κ°™λ‹€λ©΄, inset 속성을 μ‚¬μš©ν•  수 μžˆλ‹€.

ex) inset: 10px; => μƒν•˜μ’Œμš°μ—μ„œ 10px만큼 λ–¨μ–΄μ§€κ²Œ λ°°μΉ˜ν•œλ‹€.

그럼 position의 속성값을 μ•Œμ•„λ³΄μž!

static

position 속성을 λ³„λ„λ‘œ μ§€μ •ν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ 기본값인 static이 μ μš©λœλ‹€.

position 속성이 static인 μš”μ†ŒλŠ” HTML λ¬Έμ„œ μƒμ—μ„œ μ›λž˜ μžˆμ–΄μ•Όν•˜λŠ” μœ„μΉ˜μ— λ°°μΉ˜λœλ‹€.

이 말은 μš”μ†Œλ“€μ΄ HTML에 μž‘μ„±λœ μˆœμ„œ κ·ΈλŒ€λ‘œ λΈŒλΌμš°μ € 화면에 ν‘œμ‹œκ°€ λœλ‹€λŠ” 것을 λœ»ν•œλ‹€.

❗ λ”°λΌμ„œ top, left, bottom, right 속성값은 position 속성이 static일 λ•ŒλŠ” λ¬΄μ‹œλœλ‹€!!

relative

position 속성을 relative둜 μ„€μ •ν•˜κ²Œ 되면, μš”μ†Œλ₯Ό μ›λž˜ μœ„μΉ˜μ—μ„œ λ²—μ–΄λ‚˜κ²Œ λ°°μΉ˜ν•  수 μžˆλ‹€.

μš”μ†Œλ₯Ό μ›λž˜ μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ μƒλŒ€μ (relative) 으둜 λ°°μΉ˜ν•΄μ€€λ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€!

relative속성은 top, bottom, left, right 속성을 μ‚¬μš©ν•΄μ„œ μœ„μΉ˜λ₯Ό μ§€μ •ν•  수 μžˆλ‹€.

μ•žμ„œ 봀던 κ·Έλ¦Όμ—μ„œ λ…Έλž€μƒ‰ λΈ”λŸ­μ˜ position을 relative둜 λ°”κΎΈκ³ , top: 20px;, left: 30px; 속성을 쀘보자.

λ…Έλž€μƒ‰ λΈ”λŸ­μ΄ μ›λž˜ μœ„μΉ˜μ—μ„œ μœ„μ—μ„œ 20px, μ™Όμͺ½μ—μ„œ 30px λ–¨μ–΄μ Έμ„œ, λ°‘μ˜ λΉ¨κ°„ λΈ”λŸ­κ³Ό 겹친걸 λ³Ό 수 μžˆλ‹€.

absolute

❗position 속성값 쀑 κ°€μž₯ ν—·κ°ˆλ¦¬λŠ” 속성값이라고 μƒκ°ν•œλ‹€.

absoluteλŠ” relative와 λ‹€λ₯΄κ²Œ absolute의 뜻인 μ ˆλŒ€μ μœΌλ‘œ μš”μ†Œλ₯Ό λ°°μΉ˜ν•΄μ£Όμ§€ μ•ŠλŠ”λ‹€. 였히렀 배치 기쀀이 상황에 따라 λ‹¬λΌμ§ˆ 수 μžˆλ‹€!

position 속성이 absolute일 λ•Œ ν•΄λ‹Ή μš”μ†ŒλŠ” 배치 기쀀을 μžμ‹ μ΄ μ•„λ‹Œ μƒμœ„ μš”μ†Œμ—μ„œ μ°ΎλŠ”λ‹€.

DOM 트리λ₯Ό 따라 μ˜¬λΌκ°€λ‹€κ°€ position 속성이 static이 μ•„λ‹Œ 첫 번째 μƒμœ„ μš”μ†Œκ°€ ν•΄λ‹Ή μš”μ†Œμ˜ 배치 κΈ°μ€€μœΌλ‘œ μ„€μ •λœλ‹€.

❗ λ§Œμ•½μ— ν•΄λ‹Ή μš”μ†Œ μƒμœ„μ— position 속성이 static이 μ•„λ‹Œ μš”μ†Œκ°€ μ—†λ‹€λ©΄, DOM νŠΈλ¦¬μ— μ΅œμƒμœ„μ— μžˆλŠ” <body> μš”μ†Œκ°€ 배치 기쀀이 λœλ‹€.

πŸ’‘ 이런 κ²½μš°λŠ” ν”μΉ˜ μ•Šμ€κ²Œ, 보톡 μ–΄λ–€ μš”μ†Œμ˜ position 속성을 absolute둜 μ„€μ •ν•˜λ©΄, λΆ€λͺ¨ μš”μ†Œμ˜ position 속성을 relative둜 μ§€μ •ν•΄μ£ΌλŠ” 것이 관둀이닀.

μ˜ˆμ‹œλ‘œ μ‚΄νŽ΄λ³΄μž.

λ…Έλž€μƒ‰ λ°•μŠ€μ˜ position 속성을 absolute둜 바꿔쀄 것이닀.

❗ 근데, μ–΄λ–€ μš”μ†Œμ˜ position 속성을 absolute둜 μ„€μ •ν•˜λ €λ©΄, λΆ€λͺ¨ μš”μ†Œμ˜ position 속성을 relative둜 μ§€μ •ν•΄μ•Ό ν•˜λ―€λ‘œ

λ…Έλž€μƒ‰ λ°•μŠ€μ˜ λΆ€λͺ¨ μš”μ†ŒμΈ ν•˜λŠ˜μƒ‰ λ°•μŠ€μ˜ position 속성을 relative둜 λ°”κΏ”μ£Όκ³ , λ…Έλž€μƒ‰ λ°•μŠ€μ˜ position 속성을 absolute둜 λ°”κΏ”μ€€ λ’€, bottom: 10px;, right: 20px; 속성을 쀘보자.

λΆ€λͺ¨ μš”μ†ŒμΈ ν•˜λŠ˜μƒ‰ λ°•μŠ€μ˜ λ°‘μ—μ„œ 10px, 였λ₯Έμͺ½μ—μ„œ 20px λ–¨μ–΄μ Έμ„œ 배치된걸 λ³Ό 수 μžˆλ‹€.

πŸ€” 그럼 λ§Œμ•½, ν•˜λŠ˜μƒ‰ λ°•μŠ€μ— position: relative; 속성을 μ£Όμ§€ μ•ŠμœΌλ©΄ λ…Έλž€μƒ‰ λ°•μŠ€λŠ” μ–΄λ”” μœ„μΉ˜λ κΉŒ??

=> μ•žμ„œ λ§ν–ˆλ“―μ΄ μ΅œμƒμœ„μ— μžˆλŠ” <body> μš”μ†Œκ°€ 배치 기쀀이 λœλ‹€.

λ”°λΌμ„œ μ•„λž˜μ²˜λŸΌ ν•˜λŠ˜μƒ‰ λΈ”λŸ­μ„ λ²—μ–΄λ‚œ μœ„μΉ˜μ— 배치될 것이닀.

fixed

position 속성을 fixed둜 μ§€μ •ν•˜λ©΄ μš”μ†Œλ₯Ό 항상 κ³ μ •λœ(fixed) μœ„μΉ˜μ— λ°°μΉ˜ν•  수 μžˆλ‹€.

κΈ€μ˜ νλ¦„μ—μ„œ μ™„μ „νžˆ λΉ μ Έμ„œ, μš”μ†Œμ˜ μ›λž˜ μžλ¦¬λŠ” μ°¨μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ, λ‹€λ₯Έ μš”μ†Œμ™€ κ²ΉμΉ  수 μžˆμœΌλ‹ˆ λ‹€λ₯Έ μš”μ†Œμ— margin을 μ μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°λ„ 생긴닀.

이게 κ°€λŠ₯ν•œ μ΄μœ λŠ” fixed μ†μ„±κ°’μ˜ 배치 기쀀이 μžμ‹ μ΄λ‚˜ λΆ€λͺ¨ μš”μ†Œκ°€ μ•„λ‹Œ 뷰포트(viewport), 즉 λΈŒλΌμš°μ € 전체화면이기 λ•Œλ¬Έμ΄λ‹€.

top, left, bottom, right 속성은 각각 λΈŒλΌμš°μ € 상단, 쒌츑, ν•˜λ‹¨, 우츑으둜 λΆ€ν„° ν•΄λ‹Ή μš”μ†Œκ°€ μ–Όλ§ˆλ‚˜ λ–¨μ–΄μ ΈμžˆλŠ”μ§€λ₯Ό κ²°μ •ν•œλ‹€.

μ˜ˆμ‹œλ₯Ό 톡해 μ‚΄νŽ΄λ³΄μž.

λ…Έλž€μƒ‰ λ°•μŠ€μ˜ position 속성을 fixed둜 λ³€κ²½ν•˜κ³ , bottom: 8px; , right: 16px; 속성을 쀘보자.

μœ„μ˜ absolute 사진과 λΉ„μŠ·ν•˜λ‹€. κ·ΈλŸ¬λ‚˜ 차이점은, fixed λŠ” μŠ€ν¬λ‘€μ„ 내렀도 항상 μ € μœ„μΉ˜μ— κ³ μ •λ˜μ–΄μžˆλ‹€.

μŠ€ν¬λ‘€μ„ 올린 사진이닀. ν•˜λŠ˜μƒ‰ λΈ”λŸ­μ€ μž˜λ Έμ§€λ§Œ, λ…Έλž€μƒ‰ λΈ”λŸ­μ€ μž˜λ¦¬μ§€ μ•Šκ³  λΈŒλΌμš°μ € κΈ°μ€€μœΌλ‘œ λ™μΌν•œ μœ„μΉ˜μ— μœ„μΉ˜ν•˜κ³  μžˆλ‹€.

sticky

static처럼 μ›λž˜ μœ„μΉ˜μ— λ°°μΉ˜λ˜μ–΄ μžˆλ‹€κ°€, μ •ν•΄μ§„ μœ„μΉ˜μ— λΈŒλΌμš°μ €κ°€ 슀크둀되면 κ·Έλ•ŒλΆ€ν„° fixed처럼 κ³ μ •λ˜μ–΄ λ°°μΉ˜λœλ‹€.
κΈ°λ³Έμ μœΌλ‘œλŠ” static처럼 배치되기 λ•Œλ¬Έμ— μš”μ†Œμ˜ μ›λž˜ 자리λ₯Ό μ°¨μ§€ν•œλ‹€.

μ˜ˆμ‹œλ₯Ό 톡해 μ‚΄νŽ΄λ³΄μž.

λ…Έλž€μƒ‰ λ°•μŠ€μ˜ position을 sticky둜 μ„€μ •ν•˜κ³ , top: 0; 속성을 쀘보자.

μ²˜μŒμ—λŠ” static처럼 μœ„μΉ˜ν•΄μžˆλ‹€.

ν•˜μ§€λ§Œ, μŠ€ν¬λ‘€μ„ 내렀보면?

λ…Έλž€μƒ‰ λ°•μŠ€κ°€ ν™”λ©΄ 상단에 λˆμ ν•˜κ²Œ(sticky) λΆ™μ–΄μ„œ 움직이지 μ•ŠλŠ” 것을 μ•Œ 수 μžˆλ‹€.


μ—¬κΈ°κΉŒμ§€ 배운 λ‚΄μš©μ„ ν™œμš©ν•΄ μš”μ†Œλ₯Ό λ°°μΉ˜ν•  λ•Œ μ•Œλ§žμ€ position을 μ„€μ •ν•˜λ„λ‘ ν•˜μž!

profile
κΈ°λ‘ν•˜λŠ” μŠ΅κ΄€ λ§Œλ“€κΈ°πŸ’«

0개의 λŒ“κΈ€