๐ก position์ '์์น'๋ ๋ป์ผ๋ก ์์๋ค์ ์์น๋ฅผ ์ง์ ํด์ฃผ๋ ์์ฑ์ด๋ค.
์ด ์์ฑ์ ์ด์ฉํด ํ์ด์ง์ ๋ ์ด์์์ ๊ฒฐ์ ํ ์ ์๋ค.
1. Static & relative & absolute
๐ก static์ position์ ๊ธฐ๋ณธ๊ฐ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํน์ ํ position๊ฐ์ ์ฃผ์ง ์์ผ๋ฉด static๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค. ๊ทธ๋์ html์ ์ด ํ๊ทธ์์ผ๋ก ์์น๊ฐ ์ ํด์ง๊ฒ ๋๋ค. ๋ํ, static์ ๋ถ๋ชจ๊ฐ์ฒด์์ ๋ค๋ฅธ position ์์ฑ๊ฐ์ด ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ๋ฌด์ํ๊ธฐ ์ํด ์ฌ์ฉ๋ ๋๊ฐ ์๋ค.
๐ก relative๋ '์๋์ ์ธ'์ด๋ผ๋ ๋ป์ ๊ฐ์ง ์์์ด๋ค. ๋ฌด์์ผ๋ก ๋ถํฐ ์๋์ ์ด๋, ํ์ฌ ์์ ์ ์์น์ ๋ํด์ ์๋์ ์ด๋ค.
ex) position: relative; ํ๊ณ left: 10px; ํ๋ฉด ๋ณธ์ธ static ์๋ฆฌ์์ ์ผ์ชฝ์ผ๋ก 10px๋งํผ ๋จ์ด์ง ์๋ฆฌ์ ์์นํ๊ฒ ๋๋ค.
๐ก absolute๋ HTML์ ์์น๋ฅผ ๊ธฐ์ค์ ์ผ๋ก ์ก๋๋ฐ, ๋ง์ฝ ๋ถ๋ชจ ์์์ position๊ฐ์ด ์ ํด์ง๊ฒ ๋๋ฉด ๋ถ๋ชจ์ position์ ๊ธฐ์ค์ผ๋ก ์์นํ๊ฒ ๋๋ค. ๋ง์น relative๊ฐ static์ ์๋ฆฌ๋ฅผ ์ ๋ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ด์น๋ค.
<style>
.box1 {
position: static;
background-color: green;
color: white;
width: 100px;
height: 100px;
}
.๊ธฐ์ค {
position: relative;
}
.box2 {
position: absolute;
left: 40px;
top: 30px;
background-color: green;
color: white;
width: 100px;
height: 100px;
z-index: 1;
}
.box3 {
position: absolute;
left: 50px;
top: 50px;
background-color: aqua;
color: white;
width: 100px;
height: 100px;
}
</style>
<body>
<div class="box1">box1</div>
<div class="๊ธฐ์ค">
<div class="box2">box2</div>
<div class="box3">box3</div>
</div>
</body>
2. fixed
๐ก fixed๋ ์คํฌ๋กค์ ์์ง์ผ ๋ ํน์ ํ ๋ฐ์ค๊ฐ ๊ณ ์ ๋๋๋ก ํด์ฃผ๋๊ฑด๋ฐ, ์ ๋์ ์ธ ์์ฑ์ด๋ค.
absolute์ฒ๋ผ fixed๋ ๋ถ๋ชจ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น๋ฅผ ์ ํ๋๋ฐ, ๋ค๋ฅธ์ ์ absolute๋ ๋ถ๋ชจ์ ์์์ ๋ฐ๋ผ ์์นํ์ง๋ง fixed๋ ๋ฌด์กฐ๊ฑด์ ์ผ๋ก body๋ฅผ ๋ถ๋ชจ๋ก ์ฌ๊ธด๋ค. ์ด ๋ง์ ํ์ฌ ์ฌ์ฉ์๊ฐ ๋ณด๊ณ ์๋ ๋ทฐํฌํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ฉด์ ๋ถ์ ๊ฒ ์ฒ๋ผ ๊ฐ์ ์๋ฆฌ์ ์์นํ๊ฒ ๋๋ค.
์ด๋ฐ์์ผ๋ก ๊ณ ์ ๋์ด ์์.
3. sticky
๐ก sticky๋ ๊ฐ์ฅ ๊ฐ๊น์ด scroll๋ ์์์ ๋ฌ๋ผ๋ถ๋๋ค.
๊ทธ๋์ scroll๋๊ณ ์๋ ๋ถ๋ชจ์์๊ฐ scroll์ด ๋๋ ๋ ๊ทธ sticky๊ฐ ๋๋๊ณ ๋ค์ sticky๊ฐ ์์๋๋ค. ์ด ๋ป์ sticky ์์๊ฐ ์ธ๊ณ์ ์ ๋๋ฌํ์ ๋ offset์ด ๋ํ๋๊ฒ ๋๋ค.
๐ fixed์์ ์ฐจ์ด์ ์,
fixed๋ ๋ทฐํฌํธ์ ๊ณ ์ ์ด๋๊ณ , scroll์ด ๋ผ๋ ์ํ๋ ์์น์ ๊ณ ์ ์ด ๋๋ ๊ฒ sticky๋ค. ์คํฌ๋กค์ ๋ฐ๋ผ ์์ง์ด๋ค offset์ด ์ธ๊ณ์ ์ ๋ฟ์ผ๋ฉด ๊ทธ ์๊ฐ๋ถํฐ ๊ณ ์ ์ด ๋๋ค.
์ฒ์์ ์ด๋ ๊ฒ ๊ณ ์ ๋์ด ์๋ค๊ฐ,
์ธ๊ณ์ ์ ๋ง๋๋ฉด ์ด๋ ๊ฒ ๋๋ค.
<style>
body {
margin: 150px;
}
.ear-left {
position: absolute;
top: 10px;
left: 20px;
display: inline-block;
background: #FFC8C4;
width: 150px;
height: 200px;
border-radius: 30px;
transform: rotate(14deg);
}
.ear-left2 {
position: absolute;
top: 10px;
left: 20px;
display: inline-block;
background: #FFC8C4;
width: 150px;
height: 200px;
border-radius: 30px;
transform: rotate(14deg);
box-shadow: 8px 5px 5px gray;
}
.ear-right {
top: 10px;
right: 20px;
top: 2px;
position: absolute;
display: inline-block;
background: #FFC8C4;
width: 150px;
height: 200px;
border-radius: 30px;
transform: rotate(-14deg);
}
.ear-right2 {
top: 10px;
right: 20px;
top: 2px;
position: absolute;
display: inline-block;
background: #FFC8C4;
width: 150px;
height: 200px;
border-radius: 30px;
box-shadow: -8px 5px 5px gray;
transform: rotate(-14deg);
}
.face {
position: relative;
background: #FFC8C4;
width: 600px;
height: 550px;
border-radius: 300px;
}
.nose {
position: absolute;
top: 260px;
left: 210px;
right: 100px;
background: #FC7CA5;
width: 180px;
height: 140px;
border-radius: 180px;
}
.nose-left {
background: #FFC8C4;
width: 50px;
height: 50px;
border-radius: 25px;
position: absolute;
left: 35px;
top: 50px;
}
.nose-right {
background: #FFC8C4;
width: 50px;
height: 50px;
border-radius: 25px;
position: absolute;
left: 100px;
top: 50px;
}
.eye-left {
position: absolute;
background: black;
width: 70px;
height: 70px;
border-radius: 35px;
left: 180px;
top: 150px;
}
.eye-right {
position: absolute;
background: black;
width: 70px;
height: 70px;
border-radius: 35px;
top: 150px;
left: 360px;
}
.small-eye__left {
position: absolute;
background: white;
width: 20px;
height: 20px;
border-radius: 10px;
left: 32px;
top: 5px;
}
.small-eye__right {
position: absolute;
background: white;
width: 20px;
height: 20px;
border-radius: 10px;
left: 32px;
top: 5px;
}
.flower {
position: absolute;
background: yellow;
top: 7px;
left: 412px;
width: 70px;
height: 70px;
border-radius: 35px;
z-index: 5;
}
.small-flower1 {
position: absolute;
background: #F16585;
width: 60px;
height: 60px;
border-radius: 30px;
top: -2px;
right: 75px;
}
.small-flower2 {
position: absolute;
background: #F16585;
width: 60px;
height: 60px;
border-radius: 30px;
top: -2px;
right: 170px;
}
.small-flower3 {
position: absolute;
background: #F16585;
width: 60px;
height: 60px;
border-radius: 30px;
right: 125px;
top: -30px;
}
.small-flower4 {
position: absolute;
background: #F16585;
width: 60px;
height: 60px;
border-radius: 30px;
top: 50px;
right: 95px;
}
.small-flower5 {
position: absolute;
background: #F16585;
width: 60px;
height: 60px;
border-radius: 30px;
right: 155px;
top: 53px;
}
</style>
</head>
<body>
<div class="face">
<div class="ear-left"></div>
<div class="ear-left2"></div>
<div class="ear-right"></div>
<div class="ear-right2"></div>
<div class="nose">
<div class="nose-left"></div>
<div class="nose-right"></div>
</div>
<div class="eye-left">
<div class="small-eye__left"></div>
</div>
<div class="eye-right">
<div class="small-eye__right"></div>
</div>
<div class="flower"></div>
<div class="small-flower1"></div>
<div class="small-flower2"></div>
<div class="small-flower3"></div>
<div class="small-flower4"></div>
<div class="small-flower5"></div>
</div>
</body>
๐ก์์ง,์ํ ์ ๋ ฌ์ ๊ฟํ!!
- ์์ง์ ๋ ฌ์, top:50%, transform:trnslateY(-50%) -> flex์์ด ์์ง์ ๋ ฌ์
- ์ํ์ ๋ ฌ์, margin: 0 auto; -> auto๊ฐ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ๋จ์์๋ margin๊ฐ์ ์ชผ๊ฐ์ ์๋์ผ๋ก ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ํด์ค.
!! but, width๊ฐ์ด ์์๋ ์๋ํ์ง ์์- position์ ์ ์ฉํด์ 50๋ฐ์ด์ฃผ๊ณ -50๋งํผ ๋์ด๋น๊ธฐ๋ ๋ฐฉ๋ฒ๋ ์์.
๐_ position์ ๋ฐฐ์ฐ๊ณ relative์ absolute๋ฅผ ์ด์ฉํด์ ์บ๋ฆญํฐ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ดค๋ค!!!
position์ ์ด์ฉํ๋๊น ์์น๋ฅผ ๋ง์๋๋ก ์กฐ์ ํ ์ ์์ด์ ์๊ฐ๋ณด๋ค ๋ง์ฐํ์ง ์์๋ค.
๊ทธ์ ์๋ ์์น ์กฐ์ ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ฌด์กฐ๊ฑด์ ์ผ๋ก relative๋ง ์ฌ์ฉํด์ ์์น๊ฐ ์ ๋ฉ๋๋ก ์์ง์ด๊ณ
offset์ด ๋จน์ง ์์์ ๋ต๋ตํ๊ณ ๋ณต์กํ๋๋ฐ position์ ์ ๋๋ก ์ดํดํ๊ณ ์ฌ์ฉํ์ ๋์ ํธ๋ฆฌํจ์ ์ด๋ฒ์ ๋๋ผ๊ฒ ๋์ด์ ํ๋ จํ๋ค!!!