ย
flex๋?๊ธฐ๋ณธ ์์ฑ ์ ๋ณด1. ์๋ก์ด display ์์ฑ์
๋๋ค.2. Block ๋ ๋ฒจ ์์์ ์ฑ์ง์ ๊ฐ์ง๋ฉฐ ์ฃผ๋ก ๋ถ๋ชจ์ ์์ฑ์ ํตํด ์์๋ค์ ์ปจํธ๋กค ํฉ๋๋ค. 3. flex๋ ์์ ์ ์ง๊ณ์์๊น์ง๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค.1. flex-direction2. flex-item๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก Axis๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.3. justify-content4. Axis ์ Cross-Axis5. align-items, align-content6. flex-wrap7. flex-basis 8. flex-grow9. flex-shrink10. ๊ทธ ๋ฐ์ flex-item ์ ์ฌ์ฉํ๋ ์์ฑ๋ค11. flex ์ฐ์ต ์ฌ์ดํธ ๋ฐ ์ข์ ๊ธ(์ค์ต) ์ ์ฒด ๋ณต์ต ์ฝ๋ ๋ฐ ์ฑ๋ฐฐ ๋ ์ด์์ ๊ทธ๋ฆฌ๊ธฐ
ย
flex๋?
์ปจํ
์ธ ๋ฅผ ์ ๋ ฌํ๊ฑฐ๋ ๊ณต๊ฐ์ ๋๋ ์ ์๋ CSS ์์ฑ์ ์งํฉ์
๋๋ค. MDN ๋ฌธ์์ 1๋ถ์ฝ๋ฉ์ ๋ธ๋ก๊ทธ, code pen์์ flex๊ฐ ์คํ๋๋ ํ๋ฉด์ ๋ฐ๋ก ํ์ธํ์ค ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์ฝ๋
/*code base*/ body { font-family: sans-serif; box-sizing: border-box; font-weight: 600; } .container { display: flex; background: #f9f1f0; border: 2px solid black; width: 700px; height: 500px; } .box { background-color: pink; border: 2px solid black; width: 100px; height: 100px; margin: 10px; text-align: center; line-height: 100px; }
<!DOCTYPE html> <html> <head> <title>Flex</title> <meta charset="UTF-8" /> <link rel="stylesheet" href="./src/styles.css" /> </head> <body> <div class="container"> <div class="box">box1</div> <div class="box">box2</div> <div class="box">box3</div> </div> </body> </html>
ย
๊ธฐ๋ณธ ์์ฑ ์ ๋ณด
- ์๋ ์ฌ๋ฌ๊ฐ์ง ์ค์ต์ ํ๊ฒ ๋ ํ ๋ฐ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฐธ๊ณ ํ์๋ฉด GUI ๊ธฐ๋ฅ์ผ๋ก ์ ์ ๋ฆฌ๊ฐ ๋์ด ์์ผ๋ ์ฐธ๊ณ ํ์๋ฉด์ ๊ฐ๋ฐํ์๊ธธ ๋ฐ๋๋๋ค.
1. ์๋ก์ด display ์์ฑ์ ๋๋ค.
display:flex; display:inline-flex;
2. Block ๋ ๋ฒจ ์์์ ์ฑ์ง์ ๊ฐ์ง๋ฉฐ ์ฃผ๋ก ๋ถ๋ชจ์ ์์ฑ์ ํตํด ์์๋ค์ ์ปจํธ๋กค ํฉ๋๋ค.
์ด๋ ๋ถ๋ชจ๋ฅผ
Flex-container
, ์ํฅ์ ๋ฐ๋ ์์๋ค์ Flex-item
์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.ย
3. flex๋ ์์ ์ ์ง๊ณ์์๊น์ง๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
ย
1. flex-direction
์ ๋ ฌ ๋ฐฉํฅ์ ๊ฒฐ์ ํฉ๋๋ค.
ย
.container { display: flex; flex-direction : row; }
ย
.container { display : flex; flex-direction : row-reverse; }
ย
ย
.container{ display : flex; flex-direction : column; }
ย
.container{ display : flex; flex-direction : column-reverse; }
ย
2. flex-item๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก Axis๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
๊ธฐ๋ณธ ๋ฐฉํฅ์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์
๋๋ค.
ย
3. justify-content
์ถ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ์์น๋ฅผ ์กฐ์ข
ํ๊ฑฐ๋ ์์ดํ
๊ฐ์ ๊ฐ๊ฒฉ์ ์ค์ ํ ์ ์์ต๋๋ค!
.container { display: flex; /* justify-content: flex-start; */ /* justify-content: flex-end; */ /* justify-content: center; */ /* justify-content: space-between; */ /* justify-content: space-around; */ }
ํ๋์ฉ ์ฃผ์ ํ์ด์ ์คํํด๋ณด๊ธฐ!
flex-direction : column ์ผ๋ / row์ผ ๋
ย
** ์ค์ตํด ๋ด
์๋ค! **
<article> <div class="left_side"> <div class="blue"></div> <div class="green"></div> <div class="yellow"></div> </div> <div class="center"> <div class="blue"></div> <div class="yellow"></div> </div> <div class="right_side"> <div class="blue"></div> <div class="green"></div> <div class="yellow"></div> </div> </article>
div{ width:50px;height:50px } .blue{background:blue} .green{background:green} .yellow{background:yellow} article{ background:black; width:350px; height:300px; } .right_side, .center, .left_side{ height:300px; }
์ฃผ์ด์ง ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ flex ์์ฑ์ ์ถ๊ฐํด ์๋์ ๊ฐ์ ์ด๋ฏธ์ง๋ก ๋ฐฐ์นํด ๋ณด์ธ์!
ย
ย
4. Axis ์ Cross-Axis
flex์๋ axis์ ์ง์ ์ด๋ฃจ๋ cross-axis๊ฐ ์กด์ฌํฉ๋๋ค. axis๊ฐ row ์ํ๋ผ๋ฉด cross-axis๋ column ์ด๊ณ , axis ๊ฐ column ์ด๋ฉด cross-axis๋ row ์ธ ์ํ์ฃ .
ย
5. align-items, align-content
align-items๋ cross-axis๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ํฉ๋๋ค.
align-content: flex-container์ cross-axis ์ถ์ ์์ดํ
๋ค์ด ์ฌ๋ฌ ์ค์ผ ๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
.container { display: flex; /* align-items: stretch; (๊ธฐ๋ณธ๊ฐ) */ /* align-items: center; */ /* align-items: flex-start; */ /* align-items: flex-end; */ }
ํ๋์ฉ ์ฃผ์ ํ์ด์ ์คํํด๋ณด๊ธฐ!
flex-direction : column / row / row-reverse / column-reverse
ย
** ์ค์ตํด ๋ด
์๋ค! **
ย
6. flex-wrap
flex๋ ์์์ ํฌ๊ธฐ๊ฐ ์์ ๋ณด๋ค ํฌ๋ค๊ณ ํด์ ๊ฐ์ ๋ก ์กฐ์ ํ์ง ์์ต๋๋ค. ์์์์๋ฅผ ๊ฐ์ธ์ฃผ๋ ๊ธฐ๋ฅ์
๋๋ค.
<div class="container"> <div class="box">box1</div> <div class="box">box2</div> <div class="box">box3</div> <div class="box">box4</div> <div class="box">box5</div> <div class="box">box6</div> </div>
.container { display: flex; flex-direction: column; justify-content: space-between; /* flex-wrap: wrap; */ /* flex-wrap: nowrap; */ /* flex-wrap: wrap-reverse; */ }
ํ๋์ฉ ์ฃผ์ํ์ด์ ์คํํด๋ณด๊ธฐ!
flex-direction : column / row / row-reverse / column-reverse
ย
7. flex-basis
์์์์์ ์ฌ์ฉํฉ๋๋ค! flex item ๋ค์ ํฌ๊ธฐ๋ฅผ ํน์ ํฉ๋๋ค. width, height์ ๋ค๋ฅธ์ ์ axis ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค๋ ๊ฒ ๊ทธ๋ฆฌ๊ณ ๋ด๋ถ์ ์ปจํ
์ธ ์ ๋ฐ๋ฅธ ์ ์ฐํ ํฌ๊ธฐ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ์ auto. auto์ผ ๋๋ width, height ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
๋ง์ฝ flex-basis ๊ฐ์ด ์ ์ฉ๋์ด ์๋ค๋ฉด width, height ๊ฐ์ ๋ฌด์๋ฉ๋๋ค.
ย
8. flex-grow
์์์์์ ์ฌ์ฉํฉ๋๋ค! flex-basis์ ๊ฐ์์ ๋ ๋์ด๋๋ ๋๋์ง ์ง์ ํ๋ ๊ฐ์ผ๋ก, ํ ๋น๋ ๊ฐ์ ๋ฐ๋ผ ์์ ์ ๊ฐ์ธ๋ ์ปจํ
์ด๋์ ๊ณต๊ฐ์ ํ ๋นํ๋๋ก ํฉ๋๋ค.
flex-growย : 1 โ> ์์ ์์๋ค์ด ๋ชจ๋ ๋์ผํ ํฌ๊ธฐ์ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ต๋๋ค.
flex-growย : 2 โ>ย ํน์ ํ ํ๋์ ์์์๊ฒ๋ง ์ค ๊ฒฝ์ฐ ๋ค๋ฅธ ์์์์๋ณด๋ค ๋๋ฐฐ์ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ต๋๋ค. ๋ง์ฝ ์์์์๋ค์ ์ปจํ
์ธ ํฌ๊ธฐ๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ทธ ์ปจํ
์ธ ์ ๋์ด์ ๋ฐ๋ผ ํ ๋น๋ฐ๋ ๊ฐ์ด ๋ฌ๋ผ์ง๋๋ค.
ย
9. flex-shrink
์์์์์ ์ฌ์ฉํฉ๋๋ค. flex-grow์ ๋ฐ๋๋๋ ๊ฐ๋
์ผ๋ก flex-basis์ ๊ฐ์์ ๋ ์ค์ด๋ค์ด๋ ๋๋์ง ์ง์ ํ๋ ๊ฐ์
๋๋ค. ํฌ๊ธฐ๋ฅผ ๊ณ ์ ํ๊ฑฐ๋ ์ค์ด๋ ์ญํ ์ ํฉ๋๋ค.
0์ ๊ฐ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ปจํ
์ด๋์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ ๊ฐ์ ๊ณ ์ ๋ฉ๋๋ค. ๋ง์ด๋์ค ์ซ์๋ ๋ฐ์๋ค์ด์ง ์์ผ๋ฉฐ 1์ ๊ธฐ๋ณธ๊ฐ์
๋๋ค.
ย
์ง๊ธ ๊น์ง ๋ฐฐ์ด 7, 8, 9 ์์ฑ์ ๊ฐ์ ์ถ์ฝํ์ฌ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก flex ์์ฑ์
๋๋ค.
/* flex: flex-grow, flex-shrink, flex-basis */ flex :1; /* flex-grow:1; flex-shrink:1; flex-basis:0; */ flex :1 1 300px; /* flex-grow:1; flex-shrink:1; flex-basis:300px; */
10. ๊ทธ ๋ฐ์ flex-item ์ ์ฌ์ฉํ๋ ์์ฑ๋ค
align-self : ๋ถ๋ชจ์ align-items ์์ฑ์ ๋ฎ์ด flex-item ์๊ฒ ๊ฐ๋ณ์ ์ธ align-items ์์ฑ์ ๋ถ์ฌํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ align-items์ ๋ง์ฐฌ๊ฐ์ง๋ก stretch ์
๋๋ค.
order: flex-item ๋ค์ ์์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์์ ์๋ฏธ๋ก ์์๋ฅผ ๊ฒฐ์ ํ์ง ์์ต๋๋ค. ์์ ํฌ๊ธฐ๋ก ๊ฒฐ์ ํฉ๋๋ค. ์๊ฐ ์์ ์๋ก ๋ ์ฐ์ ์์๋ฅผ ๋ถ์ฌ ๋ฐ์ต๋๋ค. (์์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.)
ย
11. flex ์ฐ์ต ์ฌ์ดํธ ๋ฐ ์ข์ ๊ธ
ย