์ค๋์ position
์์ฑ์ ๋ํด์ ์ ๋ฆฌ๋ฅผ ํด๋ณผ ๊ฒ์ด๋ค.
๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ฅ ์ฌ๋ฏธ์์๋ ์์ฑ์ด๋ค. ์๋ฌด๋ฐ ์ ๊ฒฝ์ ์ฐ์ง ์๊ณ ์ด๋์ํค๋๊ฒ ํธํด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.๐
position
์ ๋ฌธ์ ์์์ ์์๋ฅผ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
position
์ ์ดํดํ๋ ค๋ฉด flow
์ ๋ํด์ ์ค๋ช
ํ ํ์๊ฐ ์์ ๊ฒ ๊ฐ๋ค.
flow
๋ ์์๋ฅผ ๋ฐฐ์นํ ๋ ๋ ์ด์์์ ๊ฒฐ์ ํ๋ ์ค์ํ ์์๊ฐ ๋๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ๊ฐ์ฅ ๋ฐ์ normal flow
, ์ค๊ฐ ์ฏค float
, ๊ฐ์ฅ ์์ position
์ด ์๋ฆฌ์ก๊ณ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐblock level Elements
์ inline Elements
์์๋ฅผ ๊ณ ๋ คํ๋ฉฐ ๋งํฌ์
์ ํ ๋ ์์ฑํ๋ ๊ณณ์ normal flow
๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
<h1>Hello Block</h1>
<span>Hello inline</span>
<span>Hello inline</span>
์์ ์ฝ๋์ ๊ฒฐ๊ณผ๋ block level Elements
์ ์ ์ฒด ์์ญ์ ๋ค ์ฐจ์งํ๊ณ , ๋ฐ๋ก ์๋์ inline Elements
2๊ฐ๊ฐ ๋๋ํ ๋์ด๋๋ ๊ฒ์ด normal flow
๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํ์ง๋ง float
๊ณผ position
์์ฑ์ ์ฌ์ฉํ๋ฉด normal flow
๋ณด๋ค ๋ ๋์ ๊ณณ์ผ๋ก ๋ฐฐ์น๊ฐ ๋๋ค. ๊ทธ๋์ normal flow
์ ์๋ ์์์ ๊ฒน์น๋ ์ํฉ์ด ๋ฐ์ํ๊ฑฐ๋ float
๋ฅผ ์ ์ฉํ ์์ ์์๋ฅผ normal flow
์ ์์นํ ๋ถ๋ชจ ์์๊ฐ ์ธ์์ ๋ชปํด์ ๋์ด๊ฐ 0์ด ๋๋ ์ํฉ์ด ๋์ค๊ธฐ๋ ํ๋ค.
์ฌ๊ธฐ์ ์์์ผ ํ ๊ฒ์ normal flow
๋ ํ๋ฒํ ์์์ ๋์ด์ด๋ผ๊ณ ํ๋ค๋ฉด float
์ position
์ ๋ฐฐ์น๋ ๋ค๋ฅด๋ค๋ ๊ฒ์ด๋ค.
position
์ ์์ฑ ๊ฐ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค.
position:static
: position
์ ๊ธฐ๋ณธ๊ฐ, ์ผ๋ฐ์ ์ธ ๋ฌธ์์ ํ๋ฆ(normal flow)์ ๋ฐ๋ผ ๋ฐฐ์นํ๋ ์์ฑ์ด๋ค. ํจ๊ป ์ฌ์ฉํ๋ ์์ฑ์ธ top
, bottom
, left
, right
๊ณผ z-index
์ ์ํฅ์ ๋ฐ์ง ์๋๋ค. position:relative
: normal flow
์ ๋ฐ๋ผ ๋ฐฐ์นํ๊ณ top
, bottom
, left
, right
์ ๊ฐ์ ๋ฐ๋ผ ์ด๋ ๋ฐฐ์นํ๋ ์์ฑ์ด๋ค.์๋์ ์ฝ๋๋ ๋ธ๋ก ๋ ๋ฒจ ์์์ธ <div>
๋ฅผ ์ด์ฉํ์ฌ 3๊ฐ๋ฅผ ๋์ดํ์๋ค. ๊ทธ ์ค box2
์ position:relative
๋ฅผ ์ ์ฉํ๊ณ ์ด๋ํ๋ ๊ฐ์ ์ ์ฉํ์๋ค.
.box1 {
background-color: lightgreen;
}
.box2 {
background-color: lightsalmon;
position: relative;
top: 50px;
left: 20px;
}
.box3 {
background-color: lightblue;
}
์์ ์ค๋ช
๋๋ก relative
๊ฐ ์ ์ฉ๋ ์์๋ ์๊ธฐ ์์ ์ ์๋์ ์์ญ์ ๊ธฐ์ค์ผ๋ก ์ก๊ณ ์ด๋ํ๋ ์์ฑ์ด๋ค. box2
๊ฐ ์ด๋์ ํ๋๋ผ๊ณ normal flow
๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ box1
๊ณผ box3
๊ฐ ๊ทธ ์์ญ์ ์ธ์ํ์ฌ ์๋ฆฌ๋ฅผ ์ฐจ์งํ์ง ์์๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ํ ๊ฒ์ position:absolute
์ ๊ธฐ์ค์ด ๋๋ ์์ฑ์ด๋ค.
position:absolute
: normal flow
์์ ์ ๊ฑฐ๊ฐ ๋์ด ๋ ์ด์์์ ๊ณต๊ฐ์ ์ฐจ์งํ์ง ๋ชปํ๋ฉฐ ๊ฐ์ฅ ๊ฐ๊น์ด relative
๋ ๊ฐ์ absolute
๊ฐ ์ ์ฉ๋ ๋ถ๋ชจ๋ ์กฐ์์ ๊ธฐ์ค์ผ๋ก ์ด๋ํ๋ฉฐ ๋ง์ฝ relative
๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๊ธฐ ์ปจํ
์ด๋ ๋ธ๋ก์ธ ๋ทฐํฌํธ
๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ํ๋ ์์ฑ์ด๋ค.4/17 ์ด๊ธฐ ์ปจํ ์ด๋ ๋ธ๋ก์
body
๊ฐ ์๋๋ทฐํฌํธ
๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.
์๋์ ์ด๋ฏธ์ง๋ CSS์์ relative
๋ฅผ absolute
์ผ๋ก๋ง ๋ฐ๊พผ ๊ฒฐ๊ณผ์ด๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด box2
์ ์์ญ์ ์ฌ๋ผ์ง๊ณ box1
๊ณผ box3
๊ฐ ์ฐจ์งํ๊ณ ์๋ ๊ฒ์ด ๋ณด์ธ๋ค.
์ด๊ฒ์ absolute
์์ฑ์ normal flow
์์ ์ ๊ฑฐ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์์ญ์ ์ธ์ํ ์๊ฐ ์๋ค.
position:fixed
: fixed
๋ absolute
์ ๋๊ฐ์ด normal flow
์์ ์ ๊ฑฐ๊ฐ ๋์ด ๊ณต๊ฐ์ ์ฐจ์งํ์ง ๋ชปํ๋ค. fixed
์ ๋ฐฐ์น์ ๊ธฐ์ค์ ๋ทฐํฌํธ๋ก ์ง์ ์ด ๋๋ค.fixed
๋ ๋ณดํต ์น์ฌ์ดํธ์ ์๋์ ๊ฐ์ด ๋ค๋น๊ฒ์ด์
๋ฐ
๋ top๋ฒํผ
์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
"awwwards"์ ์ฌ์ดํธ๋ฅผ ์๋ก ๊ฐ์ ธ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฒ์ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ์๊ฒ ๋ ์ฌ์ค!
์์์ ์กฐ์ ์ค ํ๋๊ฐ transform
, perspective
, filter
์์ฑ ์ค ์ด๋ ํ๋๋ผ๋ none
์ด ์๋๋ฉด ๋ทฐํฌํธ ๋์ ๊ทธ ์กฐ์์ ๊ธฐ์ค์ผ๋ก ์ด๋ํ๋ค๋ ์ฌ์ค!
์๋์ ์ด๋ฏธ์ง ์ ์ฒด๋ค ๋ถ๋ชจ์๊ฒ ์์๋๋ก transform
, perspective
, filter
์์ฑ์ ์ค ๊ฒฐ๊ณผ์ด๋ค. ๋ทฐํฌํธ ๊ธฐ์ค์ผ๋ก ํ์ง์๊ณ ์์ 3๊ฐ์ง ์์ฑ์ด ์ ์ฉ๋ ๋ถ๋ชจ๊ฐ ๊ธฐ์ค์ด ๋์๋ค.
position:sticky
: ์ ์ฉ๋ ์์๋ฅผ normal flow
์ ๋ฐ๋ผ ๋ฐฐ์นํ๊ณ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ๋ชจ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ณ์ ์ top
, right
, bottom
, left
์ ์ด์ฉํ์ฌ ๊ฐ์ ์ค์ ํ๋ค.normal flow
์ ๋ฐ๋ผ ๋ฐฐ์นํ๊ธด ํ์ง๋ง ์์์๋ ์ํฅ์ ์ฃผ์ง ์๋ ๊ฒ์ด ํน์ง์ด๋ค..header {
position: sticky;
width: 100%;
height: 50px;
top: 0;
background: lightgreen;
text-align: center;
}
body {
margin: 0;
padding: 0;
}
.content1 {
background: lightcoral;
padding: 60px;
height: 1000px;
}
.content2 {
background: peachpuff;
padding: 60px;
height: 1000px;
}
.content3 {
background: lightseagreen;
padding: 60px;
height: 1000px;
}
<div class="content1">
<div class="header">Header1</div>
<p>
<!-- ๋๋ฏธ ํ
์คํธ -->
</p>
</div>
<div class="content2">
<div class="header">Header2</div>
content2
<p>
<!-- ๋๋ฏธ ํ
์คํธ -->
</p>
</div>
<div class="content3">
<div class="header">Header3</div>
content3
<p>
<!-- ๋๋ฏธ ํ
์คํธ -->
</p>
</div>
์์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ์ฐ๋์ header
๊ฐ ์์ ์ ์์ญ์ด ํด๋น ๋ถ๋ชจ ์์์ ์คํฌ๋กค ์์น๊ฐ ๋๋ฌํ๋ฉด ๊ทธ๋๋ถํฐ fixed
์ฒ๋ผ ์ง์ ํ ์์น์ ๊ณ ์ ๋๊ธฐ ์์ํด์ ํด๋น ๋ถ๋ชจ ์์์ ์์น๊ฐ ์คํฌ๋กค์ ๋ฒ์ด๋๋ฉด ๊ณ ์ ๋๋ ์์น๊ฐ ์ฌ๋ผ์ง๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก ๋ฐ์ <p>
ํ๊ทธ์ ์ฝํ
์ธ ์ ์๋ฌด๋ฐ ์ํฅ์ ์์ฃผ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฐ์ fixed
๋ normal flow
์์ ์ ๊ฑฐ๋์ด ์์ ์ ์์ญ์ ๊ฐ์ง ์ ์์ผ๋, sticky
๋ normal flow
์ ๋ฐ๋ผ ๋ฐฐ์น๋์ด ์์ ์ ์์ญ์ ๊ฐ์ง๊ณ ์๋ค๋ ์ฐจ์ด๊ฐ ์๋ค.
์ฝ๊ฒ ์๊ฐํ๋ฉด fixed
๋ ๋ ์๋ค๊ณ ๋ณด๋ฉด ๋๊ณ , sticky
๋ ๋
์ ๋ถ์ด์๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ fixed
๋ "๋ทฐํฌํธ"๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น๋ฅผ ์ค์ ํ๋ฉฐ, sticky
์ ๊ฒฝ์ฐ๋ ๋ถ๋ชจ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น๋ฅผ ์ค์ ํ๋ค.
๋ธ๋ผ์ฐ์ ๋ณ ์ง์๋ฒ์๋ ๋ค๋ฅด๋ค. fixed
๋ IE 6๋ฒ์ ์ ์ ์ธํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ์ง์๋์ง๋ง sticky
๋ ์์ง ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ง์์ ํธํ์ฑ ๋ฉด์์๋ fixed
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ง๋ค.
์ถ์ฒ - CSS will-change
๋ง์ฝ ์ฌ์ฉ์๊ฐ ํ๋ฉด์ ํ๋ํด์ ํ
์คํธ๊ฐ ํฌ๊ฒ ๋ณด์ด๊ฒ ํ์ ๋ absolute
๋ fixed
๋ก ๋ฐฐ์น๋ ์์๊ฐ ๋ด์ฉ์ ๊ฐ๋ฆฌ์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ๊ณต์๋ฌธ์์๋ ๋๊ฐ์ ์์ฑ๋ง ๊ธฐ์ฌ๋์ด ์์ผ๋ sticky
๋ํ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฝํ
์ธ ๋ฅผ ๊ฐ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ํด๋น์ด ๋๋ค๊ณ ํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์๊ฐ ์คํฌ๋กค์ ํ ๋๋ง๋ค ๊ณ ์ ์ธ ์์๋ฅผ ์๋ก์ด ์์น์ ์ถ๋ ฅํด์ผํ๋๋ฐ, ํ์ํด์ผ ํ๋ ์ฝํ
์ธ ์ ์, ๋ธ๋ผ์ฐ์ ๋ฐ ๊ธฐ๊ธฐ์ ์ฑ๋ฅ์ ๋๋ฌธ์ 60 fps
๋ฅผ ์ ์งํ์ง ๋ชปํด์ ์ผ๋ถ ๋ฏผ๊ฐํ ์ฌ์ฉ์์๊ฒ๋ ์ ๊ทผ์ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์ข์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค.
์ด๊ฒ์ ํด๊ฒฐ๋ฐฉ๋ฒ ์ค ํ๋๋ will-change: transform
์ ์ถ๊ฐํ์ฌ ์์๋ฅผ ์์ ๋ง์ ๋ ์ด์ด์์ ๋ ๋๋ง ํ์ฌ ์๋๋ฅผ ๊ฐ์ ํด์ ์ฑ๋ฅ๊ณผ ์ ๊ทผ์ฑ์ ๋์ผ ์ ์๋ค๊ณ ํ๋ค.
ํ์ง๋ง will-change
์์ฑ์ ์ด๋ค ์์ฑ๊ณผ ์์๊ฐ ์กฐ์ ๋ ๊ฐ๋ฅ์ฑ์ ๋ธ๋ผ์ฐ์ ์ ๋ฏธ๋ฆฌ ์๋ ค ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์์ฑ์ด์ง "์๋ฐฉ"ํ๋ ์์ฑ์ ์๋๋ผ๊ณ ํ๋ค. ์๋ฐฉ ๋ชฉ์ ์ผ๋ก ์คํ๋ ค ๋ง์ด ์ฌ์ฉํ๋ค๋ฉด ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์๋ค.
position
์ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ํฅ๋ฏธ๋ก์ ๋ ์ ์ด ๋ง์๋ ๊ฒ ๊ฐ๋ค.
ํนํ fixed
๊ฐ ๋ถ๋ชจ ์์์ transform
, perspective
, filter
๊ฐ ์ ์ฉ๋์ด ์๋ค๋ฉด ๊ธฐ์ค์ ์ ๋ทฐํฌํธ๊ฐ ์๋ ๋ถ๋ชจ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค๋ ๊ฒ์ ์ฒ์ ์์๋ค.
ํ์คํ ๊ณต์๋ฌธ์๋ฅผ ์์ธํ ๋ณด๋ฉด ์๋ก์ด ์ ๋ณด๊ฐ ๋ง์ด ๋์ค๋ ๊ฒ ๊ฐ๋ค. ์์ผ๋ก ๊ณต์ ๋ฌธ์๋ฅผ ์กฐ๊ธ์ด๋ผ๋ ํ์๋ณด๋ค ๋ ์ฝ๋ ๊ฒ์ ์ต๊ดํ ํด๋ด์ผ๊ฒ ๋ค.
์๋ ํ์ธ์. ์ ๋ฆฌ๋ ๊ธ ์ธ์ ๋ ์ ๋ณด๊ณ ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค :) absolute ์ค๋ช ์์ ์ธ๊ธ๋ ์ด๊ธฐ ์ปจํ ์ด๋ ๋ธ๋ก์ ๋ทฐํฌํธ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ธ์ ๋ ์์ํ๊ฒ ์ต๋๋ค. ใ ใ