![[CSS] Position](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZMlgo%2FbtsKeWMBX8G%2FMzwUSgkOcSUDC2nOAX8DFk%2Fimg.png)
- ๐ Position์ด๋ ๋ฌด์์ธ๊ฐ์?
- ๐ฅ๏ธ CSS Position์ ๊ธฐ๋ณธ ์์ฑ๊ณผ ํ์ฉ ์์
- 1. static: ๊ธฐ๋ณธ ์์น (๊ธฐ๋ณธ๊ฐ)
- 2. relative: ์๋ ์์น
- 3. absolute: ์ ๋ ์์น
- 4. fixed: ๊ณ ์ ์์น
- 5. sticky: ์คํฌ๋กค์ ๋ฐ๋ผ ๊ณ ์
- ๐ค Position ์์ฑ๊ณผ ๋ ์ด์์ ๊ตฌ์ฑ
- 1. ๊ฒน์น๋ ์์ ๋ฐฐ์น
- 2. ๊ณ ์ ๋ ํค๋ ๋๋ ํธํฐ ๋ง๋ค๊ธฐ
- 3. ์คํฌ๋กค์ ๋ฐ๋ผ ๊ณ ์ ๋๋ ๋ค๋น๊ฒ์ด์
- 4. ์ฌ๋ฌ ์์๋ฅผ ์ค์ฒฉํ์ฌ ๋ฐฐ์นํ๊ธฐ
- 5. ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ๊ณ ์
- ๐จ ์ฃผ์ํ ์
- ๐ ๊ฒฐ๋ก
- ๐ ์ถ๊ฐ ์ ๋ณด
๐ Position์ด๋ ๋ฌด์์ธ๊ฐ์?
CSS Position ์์ฑ์ HTML ์์๋ฅผ ๋ฌธ์ ์์์ ์ด๋ป๊ฒ ๋ฐฐ์นํ ์ง๋ฅผ ์ ์ํ๋ ์ค์ํ ์์ฑ์ด์์. ์ด ์์ฑ์ ์ฌ์ฉํ๋ฉด ์์๋ฅผ ์ ํํ ์์น์ ๋ฐฐ์นํ๊ฑฐ๋, ๊ณ ์ ๋ ์์น์ ๋จธ๋ฌผ๋๋ก ๋ง๋ค ์ ์์ด์. ํนํ ๋ ์ด์์์ ๊ตฌ์ฑํ ๋ ๊ณ ์ ๋ฐฐ์น, ์๋ ๋ฐฐ์น, ์ ๋ ๋ฐฐ์น ๋ฑ์ ์ฌ์ฉํ์ฌ ์์๋ฅผ ์ ์ดํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํด์. Position ์์ฑ์ ์ดํดํ๋ฉด ์น ํ์ด์ง์์ ์์๋ฅผ ์์ ๋กญ๊ฒ ๋ฐฐ์นํ๊ณ ๋ ์ด์์์ ๋ ์ ๊ตํ๊ฒ ๋ค๋ฃฐ ์ ์์ด์.
Position ์์ฑ์ ํ๋ฉด ์์์ ์์๋ฅผ ์ํ๋ ์์น๋ก ์ฎ๊ธฐ๋ ์กฐ์ข ๋๊ตฌ์ ๊ฐ์์. ์ด๋ค ์์๋ ๊ณ ์ ๋์ด ์์ง์ด์ง ์๊ฒ ๋ง๋ค๊ณ , ์ด๋ค ์์๋ ๋ค๋ฅธ ์์์ ๋ฐ๋ผ ์์ง์ด๊ฒ ๋ง๋ค ์ ์์ฃ .
๐ฅ๏ธ CSS Position์ ๊ธฐ๋ณธ ์์ฑ๊ณผ ํ์ฉ ์์
Position ์์ฑ์๋ static, relative, absolute, fixed, sticky๋ผ๋ ๋ค์ฏ ๊ฐ์ง ์ฃผ์ ๊ฐ์ด ์์ด์. ๊ฐ ๊ฐ์ ์์๊ฐ ๋ฐฐ์น๋๋ ๋ฐฉ์์ ๊ฒฐ์ ํด์. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ์์ฑ์ ๋ค์ํ ์ค์ฉ์ ์ธ ์ฉ๋๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
1. static
: ๊ธฐ๋ณธ ์์น (๊ธฐ๋ณธ๊ฐ)
static
์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก, ์์๊ฐ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํ๋ฆ์ ๋ฐ๋ผ ๋ฐฐ์น๋ผ์.- ์ด ์ํ์์๋ ์์น ์กฐ์ ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ๋ค๋ฅธ ์์์ ํจ๊ป ํ์ด์ง ํ๋ฆ์ ๋ง์ถฐ ์์น๊ฐ ์๋์ผ๋ก ์ค์ ๋ผ์.
<div style="position: static;">์ด ์์๋ static์ผ๋ก ๋ฐฐ์น๋ฉ๋๋ค.</div>
static์ ๋ณ๋๋ก ์์น๋ฅผ ์ง์ ํ์ง ์๊ณ , ์์๊ฐ ํ์ด์ง ํ๋ฆ์ ๋ฐ๋ผ ์์ฐ์ค๋ฝ๊ฒ ๋ฐฐ์น๋ผ์.
์์น ์์ฑ(top, left, right, bottom)์ ์ฌ์ฉํด๋ ์ ์ฉ๋์ง ์์์.
2. relative
: ์๋ ์์น
relative
๋ ํ์ฌ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋์ ์ธ ์์น๋ฅผ ์ค์ ํ ์ ์์ด์.- ์์๋ ๊ธฐ๋ณธ ์์น์ ๋จ์์์ผ๋ฉด์
top
,left
,right
,bottom
์์ฑ์ผ๋ก ์๋์ ์ผ๋ก ์ด๋ํ ์ ์์ด์.
<div style="position: relative; top: 20px; left: 30px;">
์ด ์์๋ ์๋์ ์ผ๋ก ์ด๋๋์์ต๋๋ค.
</div>
relative๋ ์์๊ฐ ์๋ ๋ฐฐ์น๋ ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ํด์.
์ ์์ ์์๋ ์๋ก 20px, ์ผ์ชฝ์ผ๋ก 30px ์ด๋ํ์ด์. ํ์ง๋ง ์์๊ฐ ์ด๋ํ ํ์๋ ๊ณต๊ฐ์ ์๋ ์์น์ ์ ์ง๋์ฃ .
3. absolute
: ์ ๋ ์์น
absolute
๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์์น ์ง์ ์กฐ์(position์ดrelative
,absolute
,fixed
์ธ ์์)์ ๊ธฐ์ค์ผ๋ก ์์๋ฅผ ๋ฐฐ์นํด์.- ์กฐ์ ์์๊ฐ ์์ผ๋ฉด ๋ทฐํฌํธ(ํ๋ฉด ์ ์ฒด)๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น๊ฐ ์ค์ ๋ผ์.
<div style="position: relative;">
<div style="position: absolute; top: 10px; left: 20px;">
์ด ์์๋ ์ ๋ ์์น๋ก ๋ฐฐ์น๋ฉ๋๋ค.
</div>
</div>
absolute ์์ฑ์ ์์ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น๊ฐ ๊ฒฐ์ ๋ผ์.
์์ ์์๊ฐ relative๋ก ์ค์ ๋์ด ์์ผ๋ฉด, ๊ทธ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก 10px ์๋, 20px ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐฐ์น๋ผ์.
4. fixed
: ๊ณ ์ ์์น
fixed
๋ ๋ทฐํฌํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์๋ฅผ ๊ณ ์ ์์ผ์. ํ๋ฉด์ ์คํฌ๋กคํด๋ ์์๋ ํญ์ ๊ฐ์ ์์น์ ๊ณ ์ ๋ผ ์์ด์.- ์คํฌ๋กค๊ณผ ๊ด๊ณ์์ด ์์๊ฐ ๊ณ ์ ๋ ์๋ฆฌ์ ๋จธ๋ฌผ๋ฌ์ผ ํ ๋ ์ฌ์ฉ๋ผ์.
<div style="position: fixed; top: 0; left: 0; width: 100%;">
์ด ์์๋ ํ๋ฉด ์๋จ์ ๊ณ ์ ๋ฉ๋๋ค.
</div>
fixed ์์ฑ์ ๋ทฐํฌํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์น๋๊ธฐ ๋๋ฌธ์, ์คํฌ๋กค์ ํด๋ ํ๋ฉด ์๋จ์ ๊ณ ์ ๋ผ์.
ํ์ด์ง๋ฅผ ์๋ฌด๋ฆฌ ์คํฌ๋กคํด๋ ์์์ ์์น๋ ๋ณํ์ง ์์ฃ .
5. sticky
: ์คํฌ๋กค์ ๋ฐ๋ผ ๊ณ ์
sticky
๋ ์คํฌ๋กค์ ๊ธฐ์ค์ผ๋ก ์๋ ์์น์ ๊ณ ์ ์์น๊ฐ ๊ฒฐํฉ๋ ๋ฐฉ์์ด์์.- ์์๋ ์คํฌ๋กคํ ๋๋ ์๋์ ์ผ๋ก ๋ฐฐ์น๋๋ค๊ฐ, ์ง์ ๋ ์์น์ ๋๋ฌํ๋ฉด ๊ทธ๊ณณ์ ๊ณ ์ ๋ผ์.
<div style="position: sticky; top: 10px;">
์ด ์์๋ ์คํฌ๋กคํ ๋ ์๋จ์ ๊ณ ์ ๋ฉ๋๋ค.
</div>
sticky ์์ฑ์ ์คํฌ๋กคํ ๋ ์๋จ์ 10px ์ฌ์ ๋ฅผ ๋๊ณ ๊ณ ์ ๋ผ์.
์คํฌ๋กค์ ์์ํ๋ฉด ์์๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ด๋ํ์ง๋ง, ํน์ ์์น์ ๋๋ฌํ๋ฉด ๊ทธ๊ณณ์ ๊ณ ์ ๋ผ์.
๐ค Position ์์ฑ๊ณผ ๋ ์ด์์ ๊ตฌ์ฑ
Position ์์ฑ์ ์น ํ์ด์ง์์ ์์๋ฅผ ๋ฐฐ์นํ๊ณ ๋ ์ด์์์ ๊ตฌ์ฑํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํด์. ํนํ, relative
, absolute
, fixed
, sticky
์์ฑ์ ๋ณต์กํ ๋ ์ด์์์ ๊ตฌํํ ๋ ํฐ ๋์์ด ๋ผ์.
1. ๊ฒน์น๋ ์์ ๋ฐฐ์น
Position ์์ฑ์ ์ฌ์ฉํ๋ฉด ์์๋ค์ ์๋ก ๊ฒน์น๊ฒ ๋ฐฐ์นํ ์ ์์ด์. ์ด๋ฅผ ํตํด ๋ณต์กํ UI ๊ตฌ์ฑ์ด๋ ํ์
, ๋ชจ๋ฌ ์ฐฝ ๋ฑ์ ๊ตฌํํ ์ ์์ด์. ํนํ absolute
์ relative
์์ฑ์ ์กฐํฉ์ ํ์ฉํ๋ฉด ๋ถ๋ชจ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ์์๋ฅผ ์์ ๋กญ๊ฒ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
<div style="position: relative; width: 300px; height: 200px; background-color: lightblue;">
๋ถ๋ชจ ์์
<div style="position: absolute; top: 50px; left: 50px; background-color: lightcoral; padding: 10px;">
์์ ์์ (์ ๋ ์์น)
</div>
</div>
๋ถ๋ชจ ์์๋ฅผ relative๋ก ์ค์ ํ๊ณ , ์์ ์์๋ฅผ absolute๋ก ์ค์ ํ๋ฉด ์์ ์์๋ ๋ถ๋ชจ ์์ ๋ด๋ถ์์ ์ํ๋ ์์น์ ๋ฐฐ์น๋ ์ ์์ด์. ์ด ๋ฐฉ์์ ํ์ ์ฐฝ์ด๋ ํดํ์ ๊ตฌํํ ๋ ์์ฃผ ์ฌ์ฉ๋ผ์.
2. ๊ณ ์ ๋ ํค๋ ๋๋ ํธํฐ ๋ง๋ค๊ธฐ
fixed
์์ฑ์ ์ฌ์ฉํ๋ฉด ์คํฌ๋กคํ ๋๋ ํ๋ฉด ์๋จ์ด๋ ํ๋จ์ ๊ณ ์ ๋ ํค๋๋ ํธํฐ๋ฅผ ๋ง๋ค ์ ์์ด์. ์ด๋ ์น์ฌ์ดํธ์ ๋ค๋น๊ฒ์ด์
๋ฐ๋ ๊ณ ์ ๋ ํธํฐ๋ฅผ ๊ตฌํํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
<header style="position: fixed; top: 0; left: 0; width: 100%; background-color: #333; color: white; padding: 10px;">
๊ณ ์ ๋ ํค๋
</header>
์ด ์์ ์์๋ ํ๋ฉด ์๋จ์ ๊ณ ์ ๋ ํค๋๋ฅผ ๋ง๋ค์์ด์. ์คํฌ๋กค์ ํ๋๋ผ๋ ํค๋๋ ํญ์ ํ๋ฉด ์๋จ์ ๋จธ๋ฌผ๋ฌ ์๊ฒ ๋ฉ๋๋ค.
3. ์คํฌ๋กค์ ๋ฐ๋ผ ๊ณ ์ ๋๋ ๋ค๋น๊ฒ์ด์
sticky
์์ฑ์ ์ฌ์ฉํ๋ฉด ์คํฌ๋กค์ ๋ฐ๋ผ ๋ค๋น๊ฒ์ด์
๋ฐ๊ฐ ์ผ์ ์์น์ ๋๋ฌํ๋ฉด ๊ณ ์ ๋๋๋ก ๋ง๋ค ์ ์์ด์. ์ด ๋ฐฉ์์ ํ์ด์ง๋ฅผ ์คํฌ๋กคํ ๋๋ ํน์ ๋ค๋น๊ฒ์ด์
์ด๋ ์ค์ํ ์ฝํ
์ธ ๊ฐ ํญ์ ๋์ ๋ณด์ด๊ฒ ํ ์ ์์ด ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์์ผ์.
<nav style="position: sticky; top: 0; background-color: #333; color: white; padding: 10px;">
์คํฌ๋กค์ ๋ฐ๋ผ ๊ณ ์ ๋๋ ๋ค๋น๊ฒ์ด์
</nav>
์คํฌ๋กค์ ํ๋ค๊ฐ top: 0 ์์น์ ๋๋ฌํ๋ฉด, ๋ค๋น๊ฒ์ด์ ๋ฐ๋ ๊ทธ ์๋ฆฌ์ ๊ณ ์ ๋ฉ๋๋ค.
์ด ๋ฐฉ์์ ์ฝํ ์ธ ๊ฐ ๊ธธ์ด์ง ๋๋ ๋ค๋น๊ฒ์ด์ ์ด ์๋จ์ ์ ์ง๋๊ฒ ํด์ฃผ๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ด์์.
4. ์ฌ๋ฌ ์์๋ฅผ ์ค์ฒฉํ์ฌ ๋ฐฐ์นํ๊ธฐ
Position ์์ฑ์ ์ฌ๋ฌ ์์๋ฅผ ์ค์ฒฉํ์ฌ ๋ฐฐ์นํ ๋๋ ์ ์ฉํด์. ํนํ ํ์ ์ฐฝ, ๋ฐฐ๋, ๊ด๊ณ ๋ฑ์ UI ์์๋ฅผ ๋ค๋ฅธ ์ฝํ ์ธ ์์ ๊ฒน์น๊ฒ ํ์ฌ ํน์ ํ ๋ ์ด์์์ ๋ง๋ค ์ ์์ด์.
<div style="position: relative; width: 500px; height: 300px; background-color: lightblue;">
๋ฉ์ธ ์ฝํ
์ธ
<div style="position: absolute; top: 20px; right: 20px; background-color: yellow; padding: 10px;">
ํ์
๋ฐฐ๋
</div>
</div>
์ด ์์ ์์ ํ์ ๋ฐฐ๋๋ ๋ฉ์ธ ์ฝํ ์ธ ์ ์ฐ์ธก ์๋จ์ ๊ฒน์น๋๋ก ๋ฐฐ์น๋์ด์.
์ด๋ฌํ ๊ตฌ์กฐ๋ ํ์ด์ง ๋ด์์ ์ค์ํ ์ ๋ณด๋ฅผ ๊ฐ์กฐํ๊ฑฐ๋ ์๋ฆผ์ ํ์ํ ๋ ์ ์ฉํฉ๋๋ค.
5. ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ๊ณ ์
fixed
์์ฑ์ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง์ ์ ์ฉํ์ฌ ์คํฌ๋กคํด๋ ๊ณ ์ ๋ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ์ ์์ด์. ์ด๋ ํจ๋ด๋์ค ํจ๊ณผ๋ฅผ ๊ตฌํํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ์ฌ์ฉ์์๊ฒ ์๊ฐ์ ์ธ ํฅ๋ฏธ๋ฅผ ์ ๋ฐํ ์ ์๋ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ด์์.
<div style="background-image: url('background.jpg'); position: fixed; width: 100%; height: 500px; background-size: cover;">
๊ณ ์ ๋ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง
</div>
๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ fixed๋ก ์ค์ ํ๋ฉด, ์คํฌ๋กค์ ํ๋๋ผ๋ ๋ฐฐ๊ฒฝ์ ๊ณ ์ ๋ ์ํ๋ก ํ๋ฉด์ ํ์๋ผ์.
์ด ๋ฐฉ๋ฒ์ ํจ๋ด๋์ค ํจ๊ณผ๋ฅผ ๊ตฌํํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๐จ ์ฃผ์ํ ์
absolute
์relative
์ ๊ด๊ณ:absolute
๋ก ๋ฐฐ์น๋ ์์๋ ๊ฐ์ฅ ๊ฐ๊น์ดrelative
,absolute
,fixed
๋ก ์ค์ ๋ ์์ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์น๋ผ์. ๋ง์ฝ ์์ ์์๊ฐstatic
(๊ธฐ๋ณธ๊ฐ)์ด๋ฉด, ๋ทฐํฌํธ๊ฐ ๊ธฐ์ค์ด ๋๋ ์ฃผ์ํด์ผ ํด์.- ์คํฌ๋กค์ ์ํฅ์ ์ฃผ๋
fixed
์sticky
:fixed
์์๋ ๋ทฐํฌํธ์ ๊ณ ์ ๋๋ฏ๋ก ์คํฌ๋กค์ ์ํฅ์ ๋ฐ์ง ์์ง๋ง,sticky
๋ ์คํฌ๋กค์ ๋ฐ๋ผ ์๋์ ์ผ๋ก ์ด๋ํ๋ค๊ฐ ๊ณ ์ ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ ๋ชฉ์ ์ ๋ง๊ฒ ์ ํํด์ผ ํด์. sticky
๋ IE์์ ์ง์๋์ง ์์์:sticky
์์ฑ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋์ง๋ ์์์. ํนํ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ(IE)์์๋ ์๋ํ์ง ์์ผ๋ฏ๋ก, ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๊ณ ๋ คํ ๋ ์ด ์ ์ ์ ์ํด์ผ ํด์.
๐ ๊ฒฐ๋ก
CSS์ Position ์์ฑ์ ์์๋ฅผ ์น ํ์ด์ง์์ ์ ํํ ์ด๋์ ๋ฐฐ์นํ ์ง ๊ฒฐ์ ํ๋ ์ค์ํ ๋๊ตฌ์์. static
, relative
, absolute
, fixed
, sticky
๋ผ๋ ๋ค์ฏ ๊ฐ์ง ์ฃผ์ ๊ฐ์ ๊ฐ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์๋ฅผ ๋ฐฐ์นํ๋ฉฐ, ์ด๋ฅผ ์ ์ ํ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ๋ ์ด์์์ ๊ฐ๋จํ๊ฒ ๊ตฌ์ฑํ ์ ์์ด์.
๊ณ ์ ๋ ํค๋, ์๋์ ์ผ๋ก ์ด๋ํ๋ ์์, ์คํฌ๋กค์ ๋ฐ๋ผ ๊ณ ์ ๋๋ ๋ค๋น๊ฒ์ด์ ๋ฑ ๋ค์ํ ์ํฉ์์ Position ์์ฑ์ ํ์ฉํ๋ฉด ์น ํ์ด์ง์ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ด์. ๊ฐ ์์ฑ์ ํน์ง์ ์ ์ดํดํ๊ณ ์ ์ ํ ์ฌ์ฉํ๋ฉด ๋ ๋์ ๋ ์ด์์์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๐ ์ถ๊ฐ ์ ๋ณด
- CSS Position ์์ฑ์ ๋ํ ๋ ๊น์ ์ดํด๋ฅผ ์ํ์ ๋ค๋ฉด, MDN Web Docs์์ ์์ธํ ์ ๋ณด๋ฅผ ์ฐพ์๋ณผ ์ ์์ด์.
'Front-end > HTML & CSS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTML] ์น ์์ผ(WebSocket) (0) | 2024.03.30 |
---|---|
[CSS] CSS ๋ฐฉ๋ฒ๋ก (1) | 2024.02.13 |
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!