CSS์์ HTML Elements๋ฅผ ๋ด๊ฐ ์ํ๋ ๊ณณ์ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ๋ค์ด ์กด์ฌํ๋ค.
display ์์ฑ์ผ๋ก ์์ญ์ ๋๋ ์ ๋ฐฐ์น๋ฅผ ํ ์๋ ์๊ณ , box-sizing๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐฐ์น๋ฅผ ํ ์๋ ์๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ๋ค์๋ ๋ง์ ์ ์ฝ์ฌํญ๋ค์ด ์กด์ฌํ๋ฉฐ, ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ๋์์ํค๊ธฐ ์ํด์๋ Css์ ๋ถ๋ชจ, ์์๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ ํด์ค์ผ ํ๋ค.
ํ์ง๋ง position
์์ฑ์ ์ด์ฉํ๋ค๋ฉด ์กฐ๊ธ ๋ ์๋ฆ๋ต๊ณ ๊ฐ๋จํ๊ฒ ์์๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ณณ์ ๋ฐฐ์นํ ์ ์๋ค.
์ฌ์ ์ค๋น
๋ณธ๊ฒฉ์ ์ธ ์ด์ผ๊ธฐ์ ์์ ์ฐ๋ฆฌ๋ ์ด๋ฒ ์๊ฐ์ ์คํฌ๋กค์ด ์๋ ์์ญ์ด ํ์ํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ๋จผ์ ๊ตฌ์ฑํด ๋๊ณ ์ค์ต์ ์งํํ ๊ฒ์ด๋ค.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="index.css" />
<script src="./index.js"></script>
<title>Document</title>
</head>
<body>
<div class="work-stage">
<div class="work-stage__box"></div>
</div>
</body>
</html>
index.css
body {
background: #cfd8dc;
display: flex;
justify-content: center;
align-items: center;
}
.work-stage {
display: block;
margin-top: 100px;
width: 600px;
height: 800px;
background: white;
overflow: auto;
}
.work-stage__box {
height: 3000px;
}
position
position ์๋ 5๊ฐ์ง์ ์์ฑ์ด ์กด์ฌํ๋ค.
- static
- relative
- absolute
- fixed
- sticky
๋ํ ์ด๋ฐ ์์ฑ๋ค๊ณผ ํจ๊ป ์กด์ฌํ๋ ์์ฑ๋ค์ด ์๋ค.
- top, right, bottom, left
position ์์ฑ์ ์ง์ ํ๊ณ top, right, bottom, left ๊ฐ์ ์ค์ ๋ฐฐ์นํ๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
position ์์ฑ์ ๋ค๋ฅธ css ์์ฑ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก
// position
position: (static | relative | absolute | sticky | fixed)
// Offset
- top: value(px | % | rem | em | ...)
- right: value(px | % | rem | em | ...)
- bottom: value(px | % | rem | em | ...)
- left: value(px | % | rem | em | ...)
๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
์ด์ ์์ 5๊ฐ์ง ์์ฑ์ ์์๋ณด์.
static
static ์์ฑ์ ์์๋ฅผ ์ผ๋ฐ์ ์ธ ํ๋ฆ์ ๋ฐ๋ผ ๋ฐฐ์นํ๋ค.
css์ ํ๊ทธ๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๊ณ ์๋ ๊ฐ (default)์ผ๋ก, ์ฐ๋ฆฌ๊ฐ ๋ช
์์ ์ผ๋ก position์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ฐ๊ฒ๋๋ ๊ฐ์ด๋ค.
์์ ๊ฐ์ด html์ div ํ๊ทธ๋ฅผ ์ ์ํ ์์๋๋ก ๋ฐฐ์น๊ฐ ๋์ด์๊ณ , position์ ๋ช ์ํ์ง ์์๋ ์ ์ฉ๋๋ค.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="index.css" />
<script src="./index.js"></script>
<title>Document</title>
</head>
<body>
<div class="work-stage">
<div class="work-stage__box">
<h1>diaplay: Static</h1>
<div>box1</div>
<div>box2</div>
<div>box3</div>
<div>box4</div>
<div>box5</div>
<div>box6</div>
<div>box7</div>
<div>box8</div>
<div>box9</div>
<div>box10</div>
</div>
</div>
</body>
</html>
index.css
body {
background: #cfd8dc;
display: flex;
justify-content: center;
align-items: center;
}
.work-stage {
display: block;
margin-top: 100px;
width: 600px;
height: 800px;
background: white;
overflow: auto;
}
.work-stage__box {
height: 3000px;
}
.work-stage__box div {
display: inline-block;
width: 100px;
height: 100px;
margin: 5px;
border: 1px solid;
// position: static;
}
relative
position: relative
๋ static๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ํ ํ๋ฆ๋๋ก ๋ฐฐ์น๊ฐ ๋๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ํ๋ฆ๋๋ก ๋ฐฐ์น๊ฐ ๋์ง๋ง ์กฐ๊ธ์ ์์น๋ฅผ ๋ง์๋๋ก ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋ Top, Left, Right, Bottom์ ์คํ์
์ ์ ์ฉํด์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ณณ์ผ๋ก ๋ฐฐ์นํ๋ค.
์ค๋ฅธ์ชฝ์ position: relative
์ด๊ณ ์ผ์ชฝ์ position: static
์ด๋ค.
์ฐ๋ฆฌ๊ฐ 1๋ฒ ๋ฐ์ค์ 3๋ฒ ๋ฐ์ค์ ์คํ์
์ top: 30px
๋ผ๊ณ ์ง์ ํ๋ฉด ์๋ ์์น๋ถํฐ 30px ๋จ์ด์ง ์์น๋ก ์ด๋ํ๋ค.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="index.css" />
<script src="./index.js"></script>
<title>Document</title>
</head>
<body>
<div class="work-stage">
<div class="work-stage__box">
<h1>diaplay: Relative</h1>
<div id="box1">box1</div>
<div id="box2">box2</div>
<div id="box3">box3</div>
<div id="box4">box4</div>
</div>
</div>
</body>
</html>
index.css
body {
background: #cfd8dc;
display: flex;
justify-content: center;
align-items: center;
}
.work-stage {
display: block;
margin-top: 100px;
width: 600px;
height: 800px;
background: white;
overflow: auto;
}
.work-stage__box {
height: 3000px;
}
.work-stage__box div {
display: inline-block;
width: 100px;
height: 100px;
margin: 5px;
border: 1px solid;
position: relative;
}
#box1 {
top: 30px;
}
#box3 {
top: 30px;
}
absolute
absolute๋ ์กฐ๊ธ ํน์ดํ ์ฑ์ง์ ๊ฐ๊ณ ์๋ค.
relative์ ๋น์ทํ๋ฐ, position: static
์์ฑ์ ๊ฐ์ง๊ณ ์์ง ์์ ๋ถ๋ชจ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ง์ธ๋ค.
ํ์ง๋ง ๋ถ๋ชจ ์ค์ relative, absolute, fixed
์ธ position ์์ฑ์ ๊ฐ์ง ํ๊ทธ๊ฐ ์๋ค๋ฉด ๊ฐ์ฅ ์์ ํ๊ทธ(body)๊ฐ ๊ธฐ์ค์ด ๋๋ค.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="index.css" />
<script src="./index.js"></script>
<title>Document</title>
</head>
<body>
<div class="work-stage">
<div class="work-stage__box">
<h1>diaplay: Absolute</h1>
<div id="parent">
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
</div>
</div>
</div>
</body>
</html>
index.css
body {
background: #cfd8dc;
display: flex;
justify-content: center;
align-items: center;
}
.work-stage {
display: block;
margin-top: 100px;
width: 600px;
height: 800px;
background: white;
overflow: auto;
}
.work-stage__box {
height: 3000px;
}
.work-stage__box div {
display: inline-block;
width: 100px;
height: 100px;
margin: 5px;
border: 1px solid;
position: absolute;
}
#parent {
width: 300px;
height: 300px;
position: relative;
}
.box:first-child {
top: 20px;
left: 20px;
}
.box:nth-child(2) {
top: 40px;
left: 40px;
}
.box:nth-child(3) {
top: 60px;
left: 60px;
}
.box:last-child {
top: 80px;
left: 80px;
}
fixed
fixed ์์ฑ์ ์ ๋ง ์ฌ๋ฐ๋ ์์ฑ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง์ฝ ์ด๋ค ํ์ด์ง๋ฅผ ๊ฐ์ ๋ ์๋จ Navigation๋ฐ๊ฐ ์คํฌ๋กค์ ๋ด๋ ค๋ ๊ณ ์ ๋์๋ ๊ฒฝํ์ ํ ์ ์ด ์๋ค๋ฉด ๊ทธ ๊ฒ์position: fixed
๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
ํ์ง๋ง ํ์ด์ง์ ๋ก๋ฉ์ด ๋๋ ค์ง ์ ์๋ค๋ ํน์ง์ด ์๋ค.
๋ง์ฝ Navigation๋ฐ๋ฅผ ๊ตฌํํ์ง๋ง display๋ฅผ static์ด๋ ๋ค๋ฅธ ๊ฒ๋ค๋ก ํ๋ค๋ฉด
์ฌ์ง๊ณผ ๊ฐ์ด ์คํฌ๋กค ๋ฐ๊ฐ ๋ด๋ ค๊ฐ๋ฉด Navigation ๋ฐ๊ฐ ์ฌ๋ผ์ง๋ค.
ํ์ง๋ง position: fixed๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ์คํฌ๋กค์ ์ด๋ํด๋ ์ฐฝ์ด ๊ณ ์ ๋๋ค.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="index.css" />
<script src="./index.js"></script>
<title>Document</title>
</head>
<body>
<div class="work-stage">
<div class="work-stage__box">
<h1>diaplay: Fixed</h1>
<div id="nav">
<a href="#">Home</a>
<a href="#">Login</a>
<a href="#">Join</a>
</div>
</div>
</div>
</body>
</html>
index.css
body {
background: #cfd8dc;
display: flex;
justify-content: center;
align-items: center;
}
.work-stage {
display: block;
margin-top: 100px;
width: 600px;
height: 800px;
background: white;
overflow-y: auto;
}
.work-stage__box {
width: 60%;
height: 300%;
position: static;
}
#nav {
width: 45%;
height: 50px;
margin: 5px;
border: 1px solid;
position: absolute;
}
ํ์ง๋ง ์ด fixed ์์ฑ์๋ ์ฃผ์ํด์ผํ ์ ์ด ํ๋ ์๋ค.
Fixed ์์ฑ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ํน์ ์์น์ ๊ณ ์ ์ ์ํ ๋๋ ์๋์ sticky ์์ฑ์ ์ด์ฉํ๋ ๊ฒ์ด ๋ฐ๋์ง ํ๋ค.
sticky
sticky ์์ฑ์ ํ์์๋ position: static
ํ์์ ๋๊ณ ์์ง๋ง ์คํฌ๋กค ์์น๊ฐ ์ด๋ค ์๊ณ์ ์ ์ด๋ฅด๋ฉด position: fixed
์ ๊ฐ์ด ํ๋ฉด์ ๋ฐ์ค๋ฅผ ๊ณ ์ ํ ์ ์๋ค.
์ด๋ฆ ๊ทธ๋๋ก ์คํฌ๋กค์ด ์ด๋ ์ง์ ๊น์ง ๋ด๋ ค๊ฐ๋ฉด ๋๋์ด์ฒ๋ผ ๋ถ๊ฒ ๋๋ ์์ฑ์ด๋ค.
์ด๋ฐ sticky ์์ฑ์๋ top, right, bottom, left์ ๊ฐ์ ์คํ์ ์์ฑ์ ๊ผญ ์ค์ ํด์ผ ํ๋ค.
๋ง์ฝ ์ค์ ํ์ง ์๋๋ค๋ฉด ์ ๋๋ก ๋์ํ์ง ์๊ฒ๋๋ค.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="index.css" />
<script src="./index.js"></script>
<title>Document</title>
</head>
<body>
<div class="work-stage">
<div class="work-stage__box">
<h1>diaplay: Sticky</h1>
<div id="nav">
<a href="#">๊ณ ๊ฐ ์ผํฐ ์ฐ๊ฒฐ</a>
</div>
<div>์๋
ํ์ธ์</div>
<div class="content">Box</div>
<div class="content">Box</div>
<div class="content">Box</div>
<div class="content">Box</div>
<div class="content">Box</div>
<div class="content">Box</div>
<div class="content">Box</div>
<div class="content">Box</div>
<div class="content">Box</div>
</div>
</div>
</body>
</html>
index.css
body {
background: #cfd8dc;
display: flex;
justify-content: center;
align-items: center;
}
.work-stage {
margin-top: 100px;
width: 600px;
height: 800px;
background: white;
overflow-y: auto;
}
.work-stage__box {
width: 60%;
height: 300%;
position: static;
display: flex;
flex-direction: column;
justify-content: flex-start;
}
.content {
font-size: 50px;
color: coral;
margin: 20px;
}
#nav {
width: 45%;
top: 10px;
margin-left: auto;
border: 1px solid;
position: sticky;
}
๋๊ธ