๐Ÿ“

11. Flex

ย 
ย 

flex๋ž€?

์ปจํ…์ธ ๋ฅผ ์ •๋ ฌํ•˜๊ฑฐ๋‚˜ ๊ณต๊ฐ„์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” CSS ์†์„ฑ์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. MDN ๋ฌธ์„œ์™€ 1๋ถ„์ฝ”๋”ฉ์˜ ๋ธ”๋กœ๊ทธ, code pen์—์„œ flex๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™”๋ฉด์„ ๋ฐ”๋กœ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ์—์•ผ๋ง๋กœ CSS Flex๋ฅผ ์ตํ˜€๋ณด์ž
์ด ํŠœํ† ๋ฆฌ์–ผ์€ "์ฐจ์„ธ๋Œ€ CSS ๋ ˆ์ด์•„์›ƒ" ์‹œ๋ฆฌ์ฆˆ์˜ ์ฒซ๋ฒˆ์งธ ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—์•ผ๋ง๋กœ CSS Flex๋ฅผ ์ตํ˜€๋ณด์ž ์ด๋ฒˆ์—์•ผ๋ง๋กœ CSS Grid๋ฅผ ์ตํ˜€๋ณด์ž ๋ฒŒ์จ๋ถ€ํ„ฐ ์Šคํฌ๋กค์˜ ์••๋ฐ•์ด ๋Š๊ปด์ง€๊ณ ,'์ข€ ํŽธ์•ˆํ•˜๊ฒŒ ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜์˜ ๊ณต๋ถ€๋ฅผ ์ด๋Œ์–ด์ฃผ๋ฉด ์ข‹๊ฒ ๋‹ค.'๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๊ณ„์‹ ๋‹ค๋ฉด, ์•„๋ž˜์˜ ๋ฐฐ๋„ˆ์˜ ๊ฐ•์ขŒ๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”. ๋ฐ”์•ผํ๋กœ 2020๋…„์ž…๋‹ˆ๋‹ค. 2020 ์›๋”ํ‚ค๋””์—์„œ ์ฒ˜๋Ÿผ ์šฐ์ฃผ์„ ์ด ์šฐ๋ฆฌ ๋ˆˆ ์•ž์— ๋ง‰ ๋‚ ์•„ ๋‹ค๋‹ˆ์ง€๋Š” ์•Š์ง€๋งŒ, ์˜จ๊ฐ– ํ•‘๊ณ„(์ฃผ๋กœ "๊ทธ๊ฑฐ IE์—์„œ ์•ˆ๋˜์ž–์•„์š”!")๋กœ ๋ฏธ๋ฃจ์–ด์™”๋˜ Flex์™€ Grid๋ฅผ ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๋•Œ๋Š” ์ถฉ๋ถ„ํžˆ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒˆ์—์•ผ๋ง๋กœ CSS Flex๋ฅผ ์ตํ˜€๋ณด์ž์ด๋ฒˆ์—์•ผ๋ง๋กœ CSS 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 ๊ธฐ๋Šฅ์œผ๋กœ ์ž˜ ์ •๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด์„œ ๊ฐœ๋ฐœํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
    • notion imagenotion image

1. ์ƒˆ๋กœ์šด display ์†์„ฑ์ž…๋‹ˆ๋‹ค.

display:flex; display:inline-flex;

2. Block ๋ ˆ๋ฒจ ์š”์†Œ์˜ ์„ฑ์งˆ์„ ๊ฐ€์ง€๋ฉฐ ์ฃผ๋กœ ๋ถ€๋ชจ์˜ ์†์„ฑ์„ ํ†ตํ•ด ์ž์‹๋“ค์„ ์ปจํŠธ๋กค ํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ๋ถ€๋ชจ๋ฅผ Flex-container, ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ž์‹๋“ค์„ Flex-item์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
ย 

3. flex๋Š” ์ž์‹ ์˜ ์ง๊ณ„์ž์‹๊นŒ์ง€๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

ย 

1. flex-direction

์ •๋ ฌ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
ย 
.container { display: flex; flex-direction : row; }
VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€
VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€
ย 
.container { display : flex; flex-direction : row-reverse; }
VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€
VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€
ย 
ย 
.container{ display : flex; flex-direction : column; }
VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€
VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€
ย 
.container{ display : flex; flex-direction : column-reverse; }
VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€
VSCode ์‹คํ–‰ ์ด๋ฏธ์ง€
ย 

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 ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€๋กœ ๋ฐฐ์น˜ํ•ด ๋ณด์„ธ์š”!
notion imagenotion image
ย 
ย 

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
์ถœ์ฒ˜ : ์œ„๋‹ˆ๋ธŒ์ถœ์ฒ˜ : ์œ„๋‹ˆ๋ธŒ
์ถœ์ฒ˜ : ์œ„๋‹ˆ๋ธŒ
ย 
** ์‹ค์Šตํ•ด ๋ด…์‹œ๋‹ค! **
notion imagenotion image
ย 

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 ์—ฐ์Šต ์‚ฌ์ดํŠธ ๋ฐ ์ข‹์€ ๊ธ€

ย 

(์‹ค์Šต) ์ „์ฒด ๋ณต์Šต ์ฝ”๋“œ ๋ฐ ์„ฑ๋ฐฐ ๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฆฌ๊ธฐ

์ถœ์ฒ˜ : ์œ„๋‹ˆ๋ธŒ์ถœ์ฒ˜ : ์œ„๋‹ˆ๋ธŒ
์ถœ์ฒ˜ : ์œ„๋‹ˆ๋ธŒ