Style Sheet/CSS

[CSS] ๐Ÿ“š ํ”Œ๋ž™์Šค(Flex) ๐Ÿ’ฏ ์ด์ •๋ฆฌ

์ธํŒŒ_ 2021. 10. 6. 14:28

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

CSS Flexbox

Flexbox๋Š” ๋ชจ๋˜ ์›น์„ ์œ„ํ•˜์—ฌ ์ œ์•ˆ๋œ ๊ธฐ์กด layout๋ณด๋‹ค ๋” ์„ธ๋ จ๋œ ๋ฐฉ์‹์˜ ๋‹ˆ์ฆˆ์— ๋ถ€ํ•ฉํ•˜๊ธฐ ์œ„ํ•œ CSS3์˜ ์ƒˆ๋กœ์šด layout ๋ฐฉ์‹์ด๋‹ค. ์š”์†Œ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ถˆ๋ช…ํ™•ํ•˜๊ฑฐ๋‚˜ ๋™์ ์œผ๋กœ ๋ณ€ํ™”ํ•  ๋•Œ์—๋„ ์œ ์—ฐํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์ด๋ผ๋„ ์ ์€ ์ฝ”๋“œ๋กœ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ€‹

Q. ์š”์ฆ˜ ๋‹ค๋“ค grid ์“ฐ๋Š”๋ฐ, flex์ด์ œ ์•ˆ์“ฐ๋Š”๊ฑฐ ์•„๋‹™๋‹ˆ๊นŒ?

A. ์ •๋‹ต์€ No๋‹ค.

 

๋ฌผ๋ก  grid๋กœ๋งŒ ๋ ˆ์ด์•„์›ƒ์„ ๋ชจ๋‘ ๊ตฌํ˜„์€ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ˆœํ•œ ์ปจํ…์ธ ๋ฅผ ๊ฐ€๋กœ ์ •๋ ฌํ•˜๋Š”๋ฐ๋Š” flex๊ฐ€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, grid๋Š” 2์ฐจ์› ํ–‰๋ ฌ ๊ฐ™์ด ํฐ ํ‹€ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌํ˜„ ํ• ๋•Œ ์“ฐ๊ณ , flex๋Š” 1์ฐจ์› ํ–‰๋ ฌ ๊ฐ™์ด ์•ˆ์˜ ์ปจํ…์ธ  ์•„์ดํ…œ์„ ๊ฐ€๋กœ ์ •๋ ฌํ• ๋•Œ ์ž์ฃผ ์“ด๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

๋‹ค์Œ์€ ์‹ค์ „ ์˜ˆ์ œ์ด๊ณ , ํฐ ํ‹€(ํŒŒ๋ž‘)์€ grid๋กœ ์งœ๊ณ  ๋„ค๋ชจ ์•ˆ์˜ ์‚ฌ์ง„์ด๋‚˜ ๊ธ€์ž ์ปจํ…์ธ ๋“ค์€ flex(๋นจ๊ฐ•)์œผ๋กœ ์‚ฌ์šฉํ•œ๊ฑธ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ


Flexbox ๊ธฐ๋ณธ ๊ตฌ์กฐ

Flexbox ๋ ˆ์ด์•„์›ƒ์€ flex item์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๋ณต์ˆ˜์˜ ์ž์‹ ์š”์†Œ์™€ ์ด๋“ค์„ ๋‚ดํฌํ•˜๋Š” flex-container ๋ถ€๋ชจ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹flexbox๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ HTML ๋ถ€๋ชจ ์š”์†Œ์˜ display ์†์„ฑ์— flex๋ฅผ ์ง€์ •ํ•œ๋‹ค. (๋ถ€๋ชจ ์š”์†Œ๊ฐ€ inline ์š”์†Œ์ธ ๊ฒฝ์šฐ inline-flex์„ ์ง€์ •ํ•œ๋‹ค.)

๊ฐ’ ์˜๋ฏธ
flex Block ํŠน์„ฑ์˜ Flex Container๋ฅผ ์ •์˜
inline-flex Inline ํŠน์„ฑ์˜ Flex Container๋ฅผ ์ •์˜
.flex-container {
  display: flex;
}
.flex-container-inline {
  display: inline-flex;
}

 

Container ์™€ item

โ€‹flexbox์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์€ ๋ถ€๋ชจ ์š”์†Œ์ธ flex container์— ์ •์˜ํ•˜๋Š” ์†์„ฑ๊ณผ ์ž์‹ ์š”์†Œ์ธ flex item์— ์ •์˜ํ•˜๋Š” ์†์„ฑ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹์ „์ฒด์ ์ธ ์ •๋ ฌ์ด๋‚˜ ํ๋ฆ„์— ๊ด€๋ จ๋œ ์†์„ฑ์€ flex container์— ์ •์˜ํ•˜๊ณ , ์ž์‹ ์š”์†Œ์˜ ํฌ๊ธฐ๋‚˜ ์ˆœ์„œ์— ๊ด€๋ จ๋œ ์†์„ฑ์€ flex item์— ์ •์˜ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ


Flex Container ์†์„ฑ

์†์„ฑ ์˜๋ฏธ
display Flex Container๋ฅผ ์ •์˜
flex-flow flex-direction์™€ flex-wrap์˜ ๋‹จ์ถ• ์†์„ฑ
flex-direction Flex Items์˜ ์ฃผ ์ถ•(main-axis)์„ ์„ค์ •
flex-wrap Flex Items์˜ ์—ฌ๋Ÿฌ ์ค„ ๋ฌถ์Œ(์ค„ ๋ฐ”๊ฟˆ) ์„ค์ •
justify-content ์ฃผ ์ถ•(main-axis)์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์„ค์ •
align-content ๊ต์ฐจ ์ถ•(cross-axis)์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์„ค์ •(2์ค„ ์ด์ƒ)
align-items ๊ต์ฐจ ์ถ•(cross-axis)์—์„œ Items์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์„ค์ •(1์ค„)

โ€‹

flex-direction

  • flex-direction ์†์„ฑ์€ flex ์ปจํ…Œ์ด๋„ˆ์˜ ์ฃผ์ถ•(main axis) ๋ฐฉํ–ฅ์„ ์„ค์ •ํ•œ๋‹ค.

โ€‹

flex-direction: row;

์ขŒ์—์„œ ์šฐ๋กœ(ltr) ์ˆ˜ํ‰ ๋ฐฐ์น˜๋œ๋‹ค. flex-direction ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

flex-direction: row-reverse;

์šฐ์—์„œ ์ขŒ๋กœ(rtl) ์ˆ˜ํ‰ ๋ฐฐ์น˜๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

flex-direction: column;

์œ„์—์„œ ์•„๋ž˜๋กœ ์ˆ˜์ง ๋ฐฐ์น˜๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

flex-direction: column-reverse;

์•„๋ž˜์—์„œ ์œ„๋กœ ์ˆ˜์ง ๋ฐฐ์น˜๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

์œ ์˜ํ• ์ ์€, Items ์ˆœ์„œ๋ฅผ ๊ฑฐ๊พธ๋กœ ๋’ค์ง‘๊ฑฐ๋‚˜, ์ˆ˜์ง์œผ๋กœ ์„ค์ • ํ•  ๊ฒฝ์šฐ, ์ฃผ ์ถ•๊ณผ ๊ต์ฐจ์ถ• ๋ชจ๋‘ ๋ณ€ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๋ฐฉํ–ฅ(์ˆ˜ํ‰, ์ˆ˜์ง)์— ๋”ฐ๋ผ ์ฃผ ์ถ•๊ณผ ๊ต์ฐจ ์ถ•์ด ๋‹ฌ๋ผ์ง„๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ
ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ
ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

โ€‹

flex-wrap

  • flex-wrap ์†์„ฑ์€ flex ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณต์ˆ˜ flex item์„ 1ํ–‰์œผ๋กœ ๋˜๋Š” ๋ณต์ˆ˜ํ–‰์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค.
  • flex๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 1์ฐจ์› ํ˜•ํƒœ์ด๋‹ค.
  • flex ์ปจํ…Œ์ด๋„ˆ์˜ width๋ณด๋‹ค flex item๋“ค์˜ width์˜ ํ•ฉ๊ณ„๊ฐ€ ๋” ํฐ ๊ฒฝ์šฐ, ํ•œ์ค„๋กœ ํ‘œํ˜„ํ•  ๊ฒƒ์ธ์ง€, ์—ฌ๋Ÿฌ์ค„๋กœ ํ‘œํ˜„ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค.

โ€‹

flex-wrap: nowrap;

flex item์„ ๊ฐœํ–‰ํ•˜์ง€ ์•Š๊ณ  1ํ–‰์— ๋ฐฐ์น˜ํ•œ๋‹ค. flex-wrap ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

๊ฐ flex item์˜ ํญ์€ flex container์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ๋กœ ์ถ•์†Œ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

flex-wrap: wrap;

flex item๋“ค์˜ width์˜ ํ•ฉ๊ณ„๊ฐ€ flex ์ปจํ…Œ์ด๋„ˆ์˜ width๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ, flex item์„ ๋ณต์ˆ˜ํ–‰์— ๋ฐฐ์น˜ํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ขŒ์—์„œ ์šฐ๋กœ, ์œ„์—์„œ ์•„๋ž˜๋กœ ๋ฐฐ์น˜๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

flex-wrap: wrap-reverse;

flex-wrap: wrap;๊ณผ ๋™์ผํ•˜๋‚˜ ์•„๋ž˜์—์„œ ์œ„๋กœ ๋ฐฐ์น˜๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

โ€‹

flex-flow

  • flex-flow ์†์„ฑ์€ flex-direction ์†์„ฑ๊ณผ flex-wrap ์†์„ฑ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ shorthand์ด๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ row nowrap์ด๋‹ค.
/* flex-flow: <flex-direction> || <flex-wrap>; */
/* flex-flow:      ์ฃผ์ถ•            ์—ฌ๋Ÿฌ์ค„๋ฌถ์Œ; */

flex-flow: row-reverse wrap;

โ€‹

โ€‹

justify-content

  • flex container์˜ main axis๋ฅผ ๊ธฐ์ค€์œผ๋กœ flex item์„ ์ˆ˜ํ‰ ์ •๋ ฌํ•œ๋‹ค.

โ€‹

justify-content: flex-start;

main start(์ขŒ์ธก)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. justify-content ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

justify-content: flex-end;

main end(์šฐ์ธก)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

flex-direction: row-reverse;๊ณผ ๋‹ค๋ฅธ ์ ์€, 1,2,3,4,5 ์ˆœ์„œ๋Š” ๊ทธ๋Œ€๋กœ ์ธ์ 

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

justify-content: center;

flex container์˜ ์ค‘์•™์— ์ •๋ ฌํ•œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

justify-content: space-between;

์ฒซ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ flex item์€ ์ขŒ์šฐ ์ธก๋ฉด์— ์ •๋ ฌ๋˜๊ณ  ๋‚˜๋จธ์ง€์™€ ๊ท ๋“ฑํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

justify-content: space-around;

๋ชจ๋“  flex item์€ ๊ท ๋“ฑํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

โ€‹

align-content

  • flex container์˜ cross axis๋ฅผ ๊ธฐ์ค€์œผ๋กœ flex item์„ ์ˆ˜์ง ์ •๋ ฌํ•œ๋‹ค. (๋‘ ์ค„ ์ด์ƒ์ผ ๊ฒฝ์šฐ)

 

[align-conent / justiry-content]

  • align-conent : ์•„์ดํ…œ์„ ์ˆ˜์ง ์ •๋ ฌ
  • justiry-content : ์•„์ดํ…œ์„ ์ˆ˜ํ‰ ์ •๋ ฌ

 

[align-content / align-items ]

  • align-content : ์•„์ดํ…œ์ด ๋‘์ค„ ์ด์ƒ์ผ๋•Œ ์ˆ˜์ง ์ •๋ ฌ
  • align-items : ์•„์ดํ…œ์ด ํ•œ์ค„์ผ๋•Œ ์ˆ˜์ง ์ •๋ ฌ

โ€‹

align-content: stretch;

๋ชจ๋“  flex item์€ flex item์˜ ํ–‰ ์ดํ›„์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐ๋œ ๊ณต๊ฐ„์— ์ •๋ ฌ๋˜์–ด ๋ฐฐ์น˜๋œ๋‹ค. align-content ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

align-content: flex-start;

๋ชจ๋“  flex item์€ flex container์˜ cross start ๊ธฐ์ค€์œผ๋กœ stack ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

align-content: flex-end;

๋ชจ๋“  flex item์€ flex container์˜ cross end ๊ธฐ์ค€์œผ๋กœ stack ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

align-content: center;

๋ชจ๋“  flex item์€ flex container์˜ cross axis์˜ ์ค‘์•™์— stack ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

align-content: space-between;

์ฒซ๋ฒˆ์งธ flex item์˜ ํ–‰์€ flex container์˜ ์ƒ๋‹จ์— ๋งˆ์ง€๋ง‰ flex item์˜ ํ–‰์€ flex container์˜ ํ•˜๋‹จ์— ๋ฐฐ์น˜๋˜๋ฉฐ ๋‚˜๋จธ์ง€ ํ–‰์€ ๊ท ๋“ฑ ๋ถ„ํ• ๋œ ๊ณต๊ฐ„์— ๋ฐฐ์น˜ ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

align-content: space-around;

๋ชจ๋“  flex item์€ ๊ท ๋“ฑ ๋ถ„ํ• ๋œ ๊ณต๊ฐ„ ๋‚ด์— ๋ฐฐ์น˜ ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

โ€‹

align-items

  • flex item์„ flex container์˜ ์ˆ˜์ง ๋ฐฉํ–ฅ(cross axis)์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. (ํ•œ ์ค„์ผ ๊ฒฝ์šฐ)
  • align-items ์†์„ฑ์€ ๋ชจ๋“  flex item์— ์ ์šฉ๋œ๋‹ค.

โ€‹

align-items: stretch;

๋ชจ๋“  flex item์€ flex container์˜ ๋†’์ด(cross start์—์„œ cross end๊นŒ์ง€์˜ ๋†’์ด)์— ๊ฝ‰์ฐฌ ๋†’์ด๋ฅผ ๊ฐ–๋Š”๋‹ค. align-items ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

align-items: flex-start;

๋ชจ๋“  flex item์€ flex container์˜ cross start ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

align-items: flex-end;

๋ชจ๋“  flex item์€ flex container์˜ cross end ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

align-items: center;

๋ชจ๋“  flex item์€ flex container์˜ cross axis์˜ ์ค‘์•™์— ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

align-items: baseline;

๋ชจ๋“  flex item์€ flex container์˜ baseline์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

์ฆ‰, flex item ๋ฐ•์Šค ํฌ๊ธฐ๊ฐ€ ์ œ๊ฐ๊ฐ ์ด๋ผํ•ด๋„, ์•ˆ์˜ ํ…์ŠคํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งž์ถ˜๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ


Flex Item ์†์„ฑ

float, clear, vertical-align ์†์„ฑ์€ flex item์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

์†์„ฑ ์˜๋ฏธ
order Flex Item์˜ ์ˆœ์„œ๋ฅผ ์„ค์ •
flex flex-grow, flex-shrink, flex-basis์˜ ๋‹จ์ถ• ์†์„ฑ
flex-grow Flex Item์˜ ์ฆ๊ฐ€ ๋„ˆ๋น„ ๋น„์œจ์„ ์„ค์ •
flex-shrink Flex Item์˜ ๊ฐ์†Œ ๋„ˆ๋น„ ๋น„์œจ์„ ์„ค์ •
flex-basis Flex Item์˜ (๊ณต๊ฐ„ ๋ฐฐ๋ถ„ ์ „) ๊ธฐ๋ณธ ๋„ˆ๋น„ ์„ค์ •
align-self ๊ต์ฐจ ์ถ•(cross-axis)์—์„œ Item์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์„ค์ •

โ€‹

order

  • flex item์˜ ๋ฐฐ์น˜ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • HTML ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  order ์†์„ฑ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„๋‹จํžˆ ์žฌ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ ๋ฐฐ์น˜ ์ˆœ์„œ๋Š” flex container์— ์ถ”๊ฐ€๋œ ์ˆœ์„œ์ด๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋‹ค.
.flex-item {
  order: ์ •์ˆ˜๊ฐ’;
}

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

flex-grow

  • flex item์˜ ๋„ˆ๋น„์— ๋Œ€ํ•œ ํ™•๋Œ€ ์ธ์ž(flex grow factor)๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๊ณ  ์Œ์ˆ˜๊ฐ’์€ ๋ฌดํšจํ•˜๋‹ค.
  • ๋ชจ๋“  flex item์ด ๋™์ผํ•œ flex-grow ์†์„ฑ๊ฐ’์„ ๊ฐ€์ง€๋ฉด ๋ชจ๋“  flex item์€ ๋™์ผํ•œ ๋„ˆ๋น„๋ฅผ ๊ฐ–๋Š”๋‹ค.
.flex-item {
  flex-grow: ์–‘์˜ ์ •์ˆ˜๊ฐ’;
}

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ
ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

์˜ˆ๋ฅผ ๋“ค์–ด Item์ด 3๊ฐœ์ด๊ณ  ์ด๋„ˆ๋น„๊ฐ€ 400px, ์ฆ๊ฐ€ ๋„ˆ๋น„๊ฐ€ ๊ฐ๊ฐ 1, 2, 1์ด๋ผ๋ฉด,

  • ์ฒซ ๋ฒˆ์งธ Item์€ ์ด ๋„ˆ๋น„์˜ 25%(1/4)์„,
  • ๋‘ ๋ฒˆ์งธ Item์€ ์ด ๋„ˆ๋น„์˜ 50%(2/4)๋ฅผ,
  • ์„ธ ๋ฒˆ์งธ Item์€ ์ด ๋„ˆ๋น„์˜ 25%(1/4)์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
.flex-item-1 {
  flex-grow: 1;
}
.flex-item-2{
  flex-grow: 2;
}
.flex-item-3 {
  flex-grow: 1;
}

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

 

์˜ˆ์ œ ์ฝ”๋“œ)

See the Pen flex-grow by park young woong (@heropark) on CodePen.

 

 

 

 

flex-shrink

  • flex item์˜ ๋„ˆ๋น„์— ๋Œ€ํ•œ ์ถ•์†Œ ์ธ์ž(flex shrink factor)๋ฅผ ์ง€์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 1์ด๊ณ  ์Œ์ˆ˜๊ฐ’์€ ๋ฌดํšจํ•˜๋‹ค.
  • 0์„ ์ง€์ •ํ•˜๋ฉด ์ถ•์†Œ๊ฐ€ ํ•ด์ œ๋˜์–ด ์›๋ž˜์˜ ๋„ˆ๋น„๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
.flex-item {
  flex-shrink: ์–‘์˜ ์ •์ˆ˜๊ฐ’;
}

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  flex item์€ ์ถ•์†Œ๋œ ์ƒํƒœ๋กœ ์ง€์ •(๊ธฐ๋ณธ๊ฐ’ 1)ํ•˜๊ณ  ๋‘๋ฒˆ์งธ flex item๋งŒ ์ถ•์†Œ๋ฅผ ํ•ด์ œ(flex-shrink: 0;)ํ•˜๋ฉด ์›๋ž˜์˜ ๋„ˆ๋น„๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹๊ณ„์‚ฐ์ด ๊นŒ๋‹ค๋กญ๊ธฐ ๋•Œ๋ฌธ์— ํ™œ์šฉ๋„๋Š” ์กฐ๊ธˆ ๋–จ์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์›๋ฆฌ ์ •๋„๋งŒ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ‘์‹œ๋‹ค.

โ€‹

โ€‹

flex-basis

  • flex item์˜ ๋„ˆ๋น„ ๊ธฐ๋ณธ๊ฐ’์„ px, % ๋“ฑ์˜ ๋‹จ์œ„๋กœ ์ง€์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ auto์ด๋‹ค.
.flex-item {
  flex-basis: auto; /* ๊ฐ€๋ณ€ Item๊ณผ ๊ฐ™์€ ๋„ˆ๋น„ */
}
.flex-item-4 {
  flex-basis: 350px; 
}

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ

โ€‹

โ€‹

flex

  • flex-grow, flex-shrink, flex-basis ์†์„ฑ์˜ shorthand์ด๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ 0 1 auto์ด๋‹ค.
/* flex: none | auto | [ <flex-grow> <flex-shrink>? || <flex-basis> ]; */
/* flex: ์ฆ๊ฐ€๋„ˆ๋น„ ๊ฐ์†Œ๋„ˆ๋น„ ๊ธฐ๋ณธ๋„ˆ๋น„; */

flex: 1 1 20px;  /* ์ฆ๊ฐ€๋„ˆ๋น„ ๊ฐ์†Œ๋„ˆ๋น„ ๊ธฐ๋ณธ๋„ˆ๋น„ */
flex: 1 1;  /* ์ฆ๊ฐ€๋„ˆ๋น„ ๊ฐ์†Œ๋„ˆ๋น„ */
flex: 1 20px;  /* ์ฆ๊ฐ€๋„ˆ๋น„ ๊ธฐ๋ณธ๋„ˆ๋น„ (๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด flex-basis๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค) */

flex-grow๋ฅผ ์ œ์™ธํ•œ ๊ฐœ๋ณ„ ์†์„ฑ์€ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ flex: 1;๋กœ ์ž‘์„ฑํ•˜๋ฉด flex-grow: 1;๊ณผ ๊ฐ™๋‹ค.

โ€‹

๊ทธ๋Ÿฌ๋ฉด ๋‚˜๋จธ์ง€ ์†์„ฑ์€ ์ƒ๋žตํ–ˆ์œผ๋‹ˆ ๊ธฐ๋ณธ๊ฐ’์ด ์ ์šฉ๋˜์–ด flex-shrink: 1;, flex-basis: auto;๊ฐ€ ๋˜๊ฒ ์ฃ ?

์ฆ‰ flex: 1; ํ˜น์€ flex: 1 1;์€ flex: 1 1 auto;์™€ ๊ฐ™๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋Š”๋‹ค.

โ€‹

flex-basis์˜ ๊ธฐ๋ณธ๊ฐ’์€ auto์ž…๋‹ˆ๋‹ค๋งŒ ๋‹จ์ถ• ์†์„ฑ์ธ flex์—์„œ ๊ทธ ๊ฐ’์„ ์ƒ๋žตํ•  ๊ฒฝ์šฐ 0์ด ์ ์šฉ๋œ๋‹ค.

๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด flex: 1; ํ˜น์€ flex: 1 1;์€ flex: 1 1 0;์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋ถ€๋ถ„์„ ๊ธฐ์–ตํ•˜์ง€ ์•Š์œผ๋ฉด ์—‰๋šฑํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•ฉ์‹œ๋‹ค!

โ€‹

โ€‹

align-self

  • flex item์„ ์ˆ˜์ง ๋ฐฉํ–ฅ(cross axis)์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค
  • align-items ์†์„ฑ๋ณด๋‹ค ์šฐ์„ ํ•˜์—ฌ ๊ฐœ๋ณ„ flex item์„ ์ •๋ ฌํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ auto์ด๋‹ค.
.flex-item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

3๋ฒˆ์งธ, 4๋ฒˆ์งธ flex item์€ align-self ์†์„ฑ๊ฐ’์ด ์šฐ์„  ์ ์šฉ๋˜์–ด ์ •๋ ฌ๋œ๋‹ค.

ํ”Œ๋ž™์Šค-์ด์ •๋ฆฌ


 

See the Pen Flexbox playground by Gabi (@enxaneta) on CodePen.

 

 


# ์ฐธ๊ณ ์ž๋ฃŒ

https://poiemaweb.com/css3-flexbox

https://webdir.tistory.com/349

https://d2.naver.com/helloworld/8540176

https://velog.io/@bearsjelly/css-flex

https://heropy.blog/2018/11/24/css-flexible-box/