flexbox๋ ์ง๊ธ๊น์ง ๋ ์ด์์๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์์ฑ(float, display, position ๋ฑ) ๋ณด๋ค ํ ๋๋ ์ด๋ก ์์ ์์ฌ๋ก ์์๋ค์ ๋ฐฐ์น์ํฌ ์ ์๋ค. ์๋ฆฌ๋จผํธ๋ค์ ํฌ๊ธฐ๋ ์์น๋ฅผ ์ฝ๊ฒ ์ก์์ฃผ๋ ๋๊ตฌ์ด๋ฉฐ CSS์ ๊ฝ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค๐ท
flexbox๋ container ๋ฐ์ค์ ์ ์ฉํ๋ ์์ฑ๋ค์ด ์๊ณ , container์์ item ๊ฐ๊ฐ์ ์ ์ฉํ๋ ์์ฑ๋ค์ด ์กด์ฌํ๋ค.
flex properties์๋ ์ง์ ํ ์์ฑ๋๋ก ์์ดํ
๋ค์ด ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ๊ฐ์์ ์ผ๋ก ๋ณผ ์ ์๋ค.
CSS-TRICKS flexbox
Flexbox Froggy ๊ฒ์
flex๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ปจํ ์ด๋ ํ๊ทธ์ display:flex ์์ฑ์ ๋ถ์ฌํด์ผํ๋ค. flex์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ์์๋ณด์.
<!Doctype>
<html>
<head>
<style>
.container{
background-color: powderblue;
height:200px;
display:flex;
flex-direction:row;
}
.item{
background-color: tomato;
color:white;
border:1px solid white;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
</div>
</body>
</html>
flex๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฐ๊นฅ์ชฝ์ ์๋ ๋ถ๋ชจํ๊ทธ์ display:flex๋ฅผ ๋ถ์ฌํด์ผ ํ๋ค.
flex-direction:row;๋ ํ์ ๋ฐฉํฅ์ผ๋ก divํ๊ทธ๋ค์ ์ ๋ ฌ์ํจ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด ๋ฐฉํฅ์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํด์๋ flex-direction:column ์์ฑ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
row, column + (-reverse)๋ฅผ ํ๊ฒ ๋๋ฉด ์ ๋ ฌ ์์๊ฐ ๋ฐ๋๊ฒ ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก flex-direction์ ํ์ง ์์ผ๋ฉด row๋ฅผ ์ ์ฉํ ๊ฒ๊ณผ ๊ฐ๋ค.
์ปจํ ์ด๋ ์์ ์๋ ์์ดํ ์ ์ปจํ ์ด๋์ ํฌ๊ธฐ์ ๋ฐ๋ผ์ ์์์ง๊ธฐ๋ ํ๊ณ ์ปค์ง๊ธฐ๋ ํ๋ค. ์ด ๋ ์์์ง๊ณ ์ปค์ง๋ ๋น์จ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด grow & shrink ์ด๋ค. ์ด ์์ฑ๊ณผ ํจ๊ป basis๋ ํจ๊ป ์์๋ณด์.
<!doctype>
<html>
<head>
<style>
.container{
background-color: powderblue;
height:200px;
display:flex;
flex-direction:row;
}
.item{
background-color: tomato;
color:white;
border:1px solid white;
}
.item:nth-child(1){
flex-basis: 150px;
}
.item:nth-child(2){
flex-basis: 150px;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
</div>
</body>
</html>
์์ดํ
ํด๋์ค๋ค์ nth-child(n)์ ์ง์ ํจ์ผ๋ก ์์ดํ
ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ n๋ฒ์งธ ์์ดํ
์ ์์ฑ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ง์ ํ ์ ์๋ค.
flex-basis๋ flex์ ๋ฐฉํฅ(row, column)์ ํด๋น๋๋ ์๋ฆฌ๋จผํธ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ๊ฒ์ด๋ค. ์ ๊ทธ๋ฆผ์ ๋ณผ ๋ 1,2 ์์ดํ
์ ํฌ๊ธฐ๊ฐ row ๋ฐฉํฅ์ผ๋ก 150px์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ basis๋ฅผ ์ค๋ช ํ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ค๋ฅธ์ชฝ์ ๋ฐฐ๊ฒฝ์์ด powderblue๋ก ๋ ์ฌ๋ฐฑ์ ํ์ธํ ์ ์๋ค. grow๋ฅผ ์ฌ์ฉํด ์ฌ๋ฐฑ์ ์ฑ์ฐ๋ฉด์ grow์ ์๋ฏธ๋ฅผ ์ดํด๋ณด์.
<!doctype>
<html>
<head>
<style>
.container{
background-color: powderblue;
height:200px;
display:flex;
flex-direction:row;
}
.item{
background-color: tomato;
color:white;
border:1px solid white;
flex-grow: 1;
}
.item:nth-child(1){
}
.item:nth-child(2){
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
</div>
</body>
</html>
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์์ดํ ํด๋์ค ์ ์ฒด์ flew-grow:1์ ์ง์ ํ์๋ค.๊ทธ๋ฆผ์ ๋ณด๋ฉด powderblue ์ฌ๋ฐฑ์ด ์ ํ ๋ณด์ด์ง ์๊ณ 5๊ฐ์ ์์ดํ ๋ฐ์ค๋ค์ด ๋์ผํ ํฌ๊ธฐ์ ๋น์จ์ ๊ฐ์ง๊ณ ์ฌ๋ฐฑ ์ ์ฒด๋ฅผ ๋ฉ๊พผ๋ค. ์ ์ฒด ์ฌ๋ฐฑ์ n๋ถ์ 1๋ก ๊ฐ๊ฐ์ ์์ดํ ์ด ์ฑ์ฐ๊ณ ์๋ค.
.item:nth-child(1){
flex-grow: 2;
}
์ ์ถ๊ฐํด๋ณด์. ์ฒซ๋ฒ์งธ ์์ดํ ๋ฐ์ค์ ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ค๋ค์ ํฌ๊ธฐ๋ณด๋ค 2๋ฐฐ๊ฐ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ ์ฒด ํฌ๊ธฐ๋ฅผ 6์ด๋ผ๊ณ ๊ฐ์ ํ์ ๋ 2,3,4,5 ์์ดํ ์ด ์ ์ฒด์ 6๋ถ์1์ฉ ๊ฐ์ ธ๊ฐ 6๋ถ์4๋ฅผ ์ฐจ์งํ๊ณ ์ฒซ๋ฒ์งธ ์์ดํ ์์๊ฐ 6๋ถ์ 2๋ฅผ ๊ฐ์ง๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
grow์์ฑ๊ณผ ๋ฐ๋๋ก shrink๋ ์์ดํ ์ ํฌ๊ธฐ๋ฅผ ์ค์ผ ๋ ์ฌ์ฉํ๋ค. grow์ ๋์ผํ๊ฒ ๊ฐ์ ๋น์จ์ด๋ค.
<!doctype>
<html>
<head>
<style>
.container{
background-color: powderblue;
height:200px;
display:flex;
flex-direction:row;
}
.item{
background-color: tomato;
color:white;
border:1px solid white;
}
.item:nth-child(1){
flex-basis: 400px;
}
.item:nth-child(2){
flex-basis: 600px;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
</div>
</body>
</html>
1,2 ์์ดํ ์ ๊ฐ๊ฐ 400px, 600pxํฌ๊ธฐ๋ฅผ ์ง์ ํ์๋ค. ๋ฐ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์น์ฌ์ดํธ ์ฐฝ์ ์ค์ด๋ฉด ์ฌ๋ฐฑ์ด ์์ด์ง๋ ์๊ฐ๋ถํฐ!!!! flex-basis๊ฐ ์ง์ ๋์ด ์๋ 1,2 ์์ดํ ๋ค๋ง ํฌ๊ธฐ๊ฐ ์ค์ด๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
shrink ๊ฐ์ ์ง์ ํ๋ฉด ์ ๊ทธ๋ฆผ์ฒ๋ผ ์ค์ด๋ค์ง ์๊ณ ์์ ์ ํฌ๊ธฐ๋ฅผ ๊ทธ๋๋ก ๊ฐ์ง๊ณ ์์ ์ ์๋ค.
.item:nth-child(2){
flex-basis: 600px;
flex-shrink: 0;
}
์ ์ถ๊ฐํด๋ณด์. ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด flex-shrink:0์ด ์ง์ ๋์ด ์๋ ์์ดํ 2์ ํฌ๊ธฐ๋ ์ค์ด๋ค์ง ์๊ณ ์ ๊ณผ ๋ค๋ฅด๊ฒ ์์ดํ 1์ ํฌ๊ธฐ๊ฐ ์ค์ด๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
.item:nth-child(1){
flex-basis: 600px;
flex-shrink: 1;
}
.item:nth-child(2){
flex-basis: 600px;
flex-shrink: 2;
}
์์ดํ
1,2 ๋์ผํ๊ฒ 600px๋ก ์ง์ ํ๊ณ flex-shrink์ ๊ฐ์ ๋ค๋ฅด๊ฒ ๋ถ์ฌํด๋ณด์๋ค.
์ด ๋น์จ 1์์ 1์ 3๋ถ์ 1๋งํผ๋ง, 2๋ 3๋ถ์ 2๋งํผ๋ง ์ค์ด๋ค์๋ค. 1๋ณด๋ค 2๊ฐ ํจ์ฌ ๋ ๋น ๋ฅด๊ฒ ํฌ๊ธฐ๊ฐ ์์์ง๋ ๊ฒ์ ๋ณผ ์ ์์๋ค. ์ซ์๊ฐ ํด์๋ก ํฌ๊ธฐ๊ฐ ๋ ๋ง์ด ์ค์ด๋ ๋ค.
๐shrink๊ฐ์ด ์ฌ์ฉ๋๊ธฐ ์ํด์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ค ํน์ ํ ์์ดํ ์ basis ๊ฐ์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
MDN flex์ ๊ธฐ๋ณธ ๊ฐ๋
๋๋ฆผ์ฝ๋ฉ CSS Flexbox ์์ ์ ๋ฆฌ. ํฌํธํด๋ฆฌ์ค ๋ง๋๋ ๋ ๊น์ง! | ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์
๋ฌธํธ: HTML, CSS, Javascript
์ํ์ฝ๋ฉ flex