๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ปSTUDY/CSS

[CSS] flexbox๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” 10๊ฐ€์ง€ ๋ ˆ์ด์•„์›ƒ

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

flexbox๋ฅผ ํ™œ์šฉํ•œ 10๊ฐ€์ง€ ๋ ˆ์ด์•„์›ƒ ์‚ฌ๋ก€

์ด ๋ ˆ์ด์•„์›ƒ์€ ๊ธฐ์กด์˜ display ์†์„ฑ์ด๋‚˜ float ์†์„ฑ, position ์†์„ฑ ๋“ฑ์œผ๋กœ ๊ตฌํ˜„์ด ์–ด๋ ต๊ฑฐ๋‚˜ ๊ตฌํ˜„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ flexbox๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

[์ˆœ์„œ]

  1. ์Šคํฌ๋กค ์—†๋Š” 100% ๋ ˆ์ด์•„์›ƒ
  2. ๋‚ด๋น„๊ฒŒ์ด์…˜ ์˜์—ญ
  3. ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด ์•„๋ž˜์— ๋ถ™๋Š” ํ‘ธํ„ฐ
  4. ์ •๋ ฌ์ด ๋‹ค๋ฅธ ๋ฉ”๋‰ด
  5. ํผ ๋ ˆ์ด๋ธ” ์ˆ˜์ง ์ค‘์•™ ์ •๋ ฌ
  6. ์ค‘์•™ ์ •๋ ฌ ์•„์ด์ฝ˜
  7. ์œ ๋™ ๋„ˆ๋น„ ๋ฐ•์Šค
  8. ๋ง์ค„์ž„๊ณผ ์•„์ด์ฝ˜
  9. ์œ„์•„๋ž˜๋กœ ํ๋ฅด๋Š” ๋ชฉ๋ก
  10. ๊ฐ€๋กœ์„ธ๋กœ ๋น„์œจ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ˜์‘ํ˜• ๋ฐ•์Šค

 

1. ์Šคํฌ๋กค ์—†๋Š” 100% ๋ ˆ์ด์•„์›ƒ

์ „์ฒดํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์ด๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ฝ˜ํ…์ธ ์˜ ๊ธธ์ด์— ์ƒ๊ด€์—†์ด ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด ์ „์ฒด๋ฅผ ์ฑ„์šฐ๋Š” ๋ ˆ์ด์•„์›ƒ์ด๋‹ค.

๋ฉ”๋‰ด ์˜์—ญ์˜ ๋†’์ด๋Š” ๊ณ ์ •.(header: 65px / tablist: 70px) ๋ถ€๋ชจ ์˜์—ญ(content)์—์„œ ๋ฉ”๋‰ด ์˜์—ญ์„ ๋บ€ ๋‚˜๋จธ์ง€ ์˜์—ญ ์ „์ฒด๋ฅผ ์ž์‹์š”์†Œ(aside, main)๊ฐ€ ์ฑ„์šด๋‹ค.

 

๋จผ์ € ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค๊ณ  ํ•˜๋‚˜์”ฉ ์ดํ•ดํ•ด๋ณด์ž!

.flex_container {
  display: flex;
  flex-direction: column;
  height: 100%;
}
.flex_item {
  flex: 1; /* flex: 1 1 0 */
  overflow: auto;
}

flex container(flex_container)์— flex-direction: column ์†์„ฑ์„ ์ ์šฉํ•ด flex item์„ ์ˆ˜์ง์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

flex item(flex_item)์—๋Š” flex: 1 ์†์„ฑ์„ ์ ์šฉํ•ด flex item์ด ๋นˆ ๊ณต๊ฐ„์„ ์ฑ„์šฐ๊ฒŒ ํ•œ๋‹ค.

 

 

flex-direction _ column ์œผ๋กœ ์ˆ˜์ง ๋ฐฉํ–ฅ ์ •๋ ฌ ์„ค์ •

flexbox ๋ ˆ์ด์•„์›ƒ์—์„œ ์ฃผ์ถ•์˜ ๋ฐฉํ–ฅ์€ ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ ์œผ๋กœ ํ–ฅํ•˜๋Š” ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์ด ๊ธฐ๋ณธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์š”์†Œ๋ฅผ ์ˆ˜์ง์œผ๋กœ ๋ฐฐ์—ดํ•˜๋ ค๋ฉด, ์ฃผ์ถ•์ด ์œ„์—์„œ ์•„๋ž˜๋กœ ํ–ฅํ•˜๊ฒŒ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค. => column ์œผ๋กœ ์„ค์ •.

row :: ์ˆ˜ํ‰๋ฐฉํ–ฅ

column :: ์ˆ˜์ง๋ฐฉํ–ฅ

 

flex: 1 _ ์ž์‹ ์š”์†Œ์˜ ํฌ๊ธฐ ํ™•์žฅ

flex item์˜ ํฌ๊ธฐ์™€ ๊ด€๋ จ๋œ ์†์„ฑ.

๋‹ค์Œ๊ณผ ๊ฐ™์ด flex-grow, flex-shrink, flex-basis ์†์„ฑ์„ ์ถ•์•ฝํ•œ ํ‘œํ˜„์ด๋‹ค.

 


๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด flex: 1 1 0; ์†์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

.flex_item {
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: 0;
}

 

flex: 1 1 0์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด flex: 1๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

.flex_item {
  flex: 1;
  /* flex: 1 1 0 */
}

 

 

flex-grow ์†์„ฑ

  • flex-grow์†์„ฑ์€ item์˜ ํ™•์žฅ์— ๊ด€๋ จ๋œ ์†์„ฑ.
  • 0๊ณผ ์–‘์˜ ์ •์ˆ˜๋ฅผ ์†์„ฑ๊ฐ’์ด ์‚ฌ์šฉ.

 

  • ์†์„ฑ๊ฐ’์ด 0์ด๋ฉด flex container์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ๋„ flex item์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€์ง€ ์•Š๊ณ  ์›๋ž˜ ํฌ๊ธฐ๋กœ ์œ ์ง€๋œ๋‹ค. (inline์œผ๋กœ ์œ ์ง€.)
  • ์†์„ฑ๊ฐ’์ด 1 ์ด์ƒ์ด๋ฉด flex container์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ flex item๋„ ๋‹ฌ๋ผ์ง„๋‹ค.
.container {
  display: flex;
  width: 200px; height: 200px;
}
.item0 {
  flex-grow: 0;
}
.item1 {
  flex-grow: 1;
}

โœŠ์ •๋ฆฌ

flex-grow ์†์„ฑ๊ฐ’์ด 1 ์ด์ƒ์ด๋ฉด flex item์ด ์›๋ž˜ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด flex container ํฌ๊ธฐ๋ฅผ ๊ฝ‰ ์ฑ„์šฐ๊ฒŒ ๋œ๋‹ค.

=> flex container์˜ ํฌ๊ธฐ์— ๋งž๊ฒŒ flex item์˜ ํฌ๊ธฐ๊ฐ€ ์ฑ„์›Œ์ง„๋‹ค.

 

๋จ„์•ฝ, ๋ฐ˜์‘ํ˜•์„ ์ƒ๊ฐํ•˜๊ณ  ํ•œ๋‹ค๋ฉด flex container์— max, min์„ ์ƒ๊ฐํ•˜๊ณ  ๋„ˆ๋น„์™€ ๋†’์ด๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

(block, inline, inline-block ๊ฐœ๋…์œผ๋กœ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜์ž)

 

flex-shrink ์†์„ฑ

  • flex-shrink ๋Š” flex item์˜ ์ถ•์†Œ ์†์„ฑ.
  • ๊ธฐ๋ณธ๊ฐ’์€ 1

 

flex container์˜ ํฌ๊ธฐ๊ฐ€ flex item์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์„ ๋•Œ,

  • ์†์„ฑ๊ฐ’์ด 0 ์ด๋ฉด flex item์˜ ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ค์ง€ ์•Š๊ณ  ์›๋ž˜ ํฌ๊ธฐ๋กœ ์œ ์ง€๋œ๋‹ค.
  • ์†์„ฑ๊ฐ’์ด 1 ์ด์ƒ์ด๋ฉด flex item์˜ ํฌ๊ธฐ๊ฐ€ flex container์˜ ํฌ๊ธฐ์— ๋งž์ถ”์–ด ์ค„์–ด๋“ ๋‹ค.
.container {
  display: flex;
  width: 200px; height: 200px;
}
.item0 {
  flex-shrink: 0;
  width: 80px;
}
.item1 {
  flex-shrink: 1;
  width: 80px;
}

 

โœŠ์ •๋ฆฌ

flex-shrink๋Š” ๊ธฐ๋ณธ๊ฐ’์ด 1.

๊ธฐ๋ณธ๊ฐ’ 1์ด flex container์˜ ํฌ๊ธฐ์— ๋งž๊ฒŒ flex item์˜ ํฌ๊ธฐ๊ฐ€ ์ฑ„์›Œ์ง„๋‹ค.

 

 

flex-basis ์†์„ฑ

  • flex-basis ์†์„ฑ์€ flex item์˜ ๊ธฐ๋ณธํฌ๊ธฐ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ.
  • ๊ธฐ๋ณธ๊ฐ’์€ auto
  • width ์†์„ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋‹จ์œ„(px, %, em, rem ๋“ฑ)๋ฅผ ์†์„ฑ๊ฐ’์ด ์‚ฌ์šฉ๊ฐ€๋Šฅ. flex-basis ์†์„ฑ์˜ ๊ฐ’์„ 30px์ด๋‚˜ 30%์™€ ๊ฐ™์ด ์„ค์ •ํ•˜๋ฉด flex item์˜ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋œ๋‹ค.

 

flex-basis ์†์„ฑ์—์„œ auto์™€ ํ•จ๊ป˜ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด 0์ด๋‹ค.

flex-basis ์†์„ฑ์˜ ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด flex item์€ ์ ˆ๋Œ€์  flex item(absolute flex item)์ด ๋˜์–ด flex container๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

 

์ฃผ์˜.

flex-basis ์†์„ฑ์˜ ๊ฐ’์„ 0์œผ๋กœ ์„ ์–ธํ•  ๋•Œ์—๋Š” flex-basis: 0px || 0% ์™€ ๊ฐ™์ด ๋‹จ์œ„๋„ ํ•จ๊ป˜ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

flex-basis ์†์„ฑ์˜ ๊ฐ’์„ auto๋กœ ์„ค์ •ํ•˜๋ฉด flex item์€ ์ƒํƒœ์  flex item(relative flex item)์ด ๋˜์–ด ์ฝ˜ํ…์ธ ์˜ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

 


 

[์˜ˆ์ œ1]

[์˜ˆ์ œ2]

MDN > flex-basis


 

flex: 1์˜ ์˜๋ฏธ

flex๋Š” flex-grow, flex-shrink, flex-basis์†์„ฑ์„ ์ถ•์•ฝํ•œ ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ flex: 1์€ flex: 1 1 0 ์†์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค.

 

์ฆ‰, flex-grow ์†์„ฑ๊ฐ’์ด 1์ด๊ณ , flex-shrink ์†์„ฑ๊ฐ’์ด 1 ์ด๊ธฐ ๋•Œ๋ฌธ์— flex container์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ flex item์˜ ํฌ๊ธฐ๋„ ์ปค์ง€๊ฑฐ๋‚˜ ์ž‘์•„์ง„๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

flex ์†์„ฑ์˜ ๊ฐ’์œผ๋กœ ์ •์ˆ˜ ํ•˜๋‚˜๋งŒ ์„ ์–ธํ•˜๋ฉด ์„ ์–ธํ•œ ๊ฐ’์œผ flex-grow ์†์„ฑ์˜ ๊ฐ’์ด ๋œ๋‹ค.

๋‚˜๋จธ์ง€ ๊ธฐ๋ณธ๊ฐ’์ธ felx-shrink: 1 ์†์„ฑ๊ณผ flex-basis: 0 ์†์„ฑ์ด ์ ์šฉ๋œ๋‹ค.

flex ์†์„ฑ์— ํ•œ๊ฐœ์˜ ์ •์ˆซ๊ฐ’์ด ์žˆ์œผ๋ฉด flex-grow ์†์„ฑ์˜ ๊ฐ’๋งŒ ์ง€์ •ํ•˜๋Š” ๋‹จ์ถ• ์†์„ฑ.

์ฆ‰ flex: 2๋Š” flex: 2 1 0, flex: 3์€ flex 3 1 0์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

 

2. ๋‚ด๋น„๊ฒŒ์ด์…˜ ์˜์—ญ

๋ฉ”๋‰ด์˜ ๋Œ€๋ถ€๋ถ„์„ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์˜์—ญ์˜ ์™ผ์ชฝ์œผ๋กœ ์ •๋ ฌ, 1~2๊ฐœ์˜ ๋ฉ”๋‰ด๋งŒ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ •๋ ฌํ•œ ๋‚ด๋น„๊ฒŒ์ด์…˜์„ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฃผ๋กœ GNB(global navigation bar)์— ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ๋‚˜ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ์˜ค๋ฅธ์ชฝ์„ ์ •๋ ฌํ•œ๋‹ค.

.flex_container {
	display: flex;
}
.flex_item {
  flex: none;
  /* flex: 0 0 auto */
}
.flex_item_gnb {
  margin-left: auto;
}

ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด์•ผ ํ•˜๋Š” flex item์—๋Š” flex: none ์†์„ฑ์„ ์ ์šฉํ•œ๋‹ค.

์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ •๋ ฌํ•œ GNB๋‚˜ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์— ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ(flex_item_gnb ํด๋ž˜์Šค)์—๋Š” margin-left: auto ์†์„ฑ์„ ์ ์šฉํ•œ๋‹ค.

 

 

flex: none ์†์„ฑ์œผ๋กœ ์ž์‹ ์š”์†Œ์˜ ํฌ๊ธฐ ๊ณ ์ •

๊ณ ์ •๊ฐ’ ์ค„ ๋•Œ ์‚ฌ์šฉ.

๋‚ด๋น„๊ฒŒ์ด์…˜ ์˜์—ญ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์—์„œ 'logo', 'search', 'gnb' ์š”์†Œ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ฑฐ๋‚˜ ์ž‘์•„์ง€์ง€ ์•Š๊ฒŒ ๋””์ž์ธ.

flex item์˜ ํฌ๊ธฐ์— ๊ด€๋ จ๋œ ์†์„ฑ์ธ flex ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์€ flex: 0 1 auto์ด๋‹ค. ๊ธฐ๋ณธ๊ฐ’์„ ์ ์šฉํ•˜๋ฉด flex container์˜ ํฌ๊ธฐ๊ฐ€ flex item์ „์ฒด์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์•„์งˆ ๋•Œ flex item์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง„๋‹ค.(์œ ๋™์ ์œผ๋กœ ๋ณ€ํ•จ.)

flex item์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ flex: none ์„ ์ ์šฉ์‹œํ‚จ๋‹ค.

 

flex: none;
/* 
flex: none์˜ ์ถ•์•ฝํ•ด ํ‘œํ˜„.
flex-grow: 0;
flex-shrink: 0;
flex-basis: auto;
*/

flex: none์€ ํ•˜๋‚˜์˜ ์ •์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ถ•์•ฝํ•˜๋Š” ๋ฐฉ๋ฒ•(flex: 1์˜ ์˜๋ฏธ ์ฐธ๊ณ )์™ธ์— ์„ธ ๊ฐœ์˜ ํ‚ค์›Œ๋“œ์ธ initial, none, auto ๋ฅผ flex ์†์„ฑ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด ์ถ•์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

flex flex-grow flex-shrink flex-basis
initial(๊ธฐ๋ณธ๊ฐ’) 0 1 auto
none 0 0 auto
auto 1 1 auto
์–‘์˜์ •์ˆ˜ ์ˆซ์ž 1 0

 

  • initial(๊ธฐ๋ณธ๊ฐ’)

    • flex container์˜ ํฌ๊ธฐ๊ฐ€ ์ž๊ฐ•์ง€๋ฉด flex item ํฌ๊ธฐ ์ž‘์•„์ง„๋‹ค.
    • ํ•˜์ง€๋งŒ flex container์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ๋„ flex item์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€์ง€ ์•Š๋Š”๋‹ค.
  • none

    • flex item์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ฑฐ๋‚˜ ์ž‘์•„์ง€์ง€ ์•Š๋Š”๋‹ค.
    • felx container์˜ ํฌ๊ธฐ์— ์˜ํ–ฅ ๋ฏธ์น˜์ง€ ์•Š๊ณ , flex item์˜ ์›๋ž˜ ํฌ๊ธฐ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  • auto

    • flex container์˜ ํฌ๊ธฐ์— ๋งž์ถ”์–ด flex item์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ฑฐ๋‚˜ ์ž‘์•„์ง„๋‹ค.
  • ์–‘์˜ ์ •์ˆ˜

    • flex container๋ฅผ ์ผ์ •ํ•œ ๋น„์œจ๋กœ ๋‚˜๋ˆ  ๊ฐ€์ง€๋ฉด์„œ flex container์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ flex item์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๊ฑฐ๋‚˜ ์ž‘์•„์ง„๋‹ค.

 


 

 

 

margin-left: auto ์†์„ฑ์œผ๋กœ ์ž์‹ ์š”์†Œ๋ฅผ ์˜ค๋ฅธ์ชฝ์— ๋ฐฐ์น˜

์š”์†Œ์˜ ๋ฐ”๊นฅ ์—ฌ๋ฐฑ(margin)์„ ์„ค์ •ํ•˜๋Š” ์†์„ฑ์— ์†์„ฑ๊ฐ’์œผ๋กœ auto ๋ฅผ ์ ์šฉํ•˜๋ฉด flexbox์—์„œ flex item์„ ์‰ฝ๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

margin: auto ์†์„ฑ์„ ์ ์šฉํ•˜๋ฉด flex item์˜ ๋ฐ”๊นฅ ์—ฌ๋ฐฑ์ด ์ž๋™์œผ๋กœ ํ™•์žฅ๋˜์–ด flex item์ด flex container์˜ ๊ฐ€์šด๋ฐ์— ์œ„์น˜ํ•œ๋‹ค.

 

flex item์„ ์ˆ˜ํ‰์œผ๋กœ ๋ฐฐ์น˜ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด auto ์†์„ฑ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • margin-right: auto

    • ๋ฐ”๊นฅ ์—ฌ๋ฐฑ์ด ์˜ค๋ฅธ์ชฝ์˜ ๋ชจ๋“  ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ธฐ ์œ„ํ•ด flex item์„ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๋ฏผ๋‹ค. (์ˆ˜ํ‰ ์˜ค๋ฅธ์ชฝ ์œ„์น˜.)
  • margin: 0 auto

    • ๋ฐ”๊นฅ ์—ฌ๋ฐฑ์ด flex item์„ ์–‘์ชฝ์œผ๋กœ ๋ฐ€๊ธฐ ๋•Œ๋ฌธ์— flex item์ด ์ˆ˜ํ‰ ์ค‘์•™์— ์œ„์น˜.
  • margin-left: auto

    • ๋ฐ”๊นฅ ์—ฌ๋ฐฑ์ด ์™ผ์ชฝ์˜ ๋ชจ๋“  ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ธฐ ์œ„ํ•ด flex item์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฏผ๋‹ค. (์ˆ˜ํ‰ ์™ผ์ชฝ์œ„์น˜.)

 

flex-item์„ ์ˆ˜์ง์œผ๋กœ ๋ฐฐ์น˜ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด auto ์†์„ฑ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 


  • margin-bottom: auto

    • ๋ฐ”๊นฅ ์—ฌ๋ฐฑ์ด ์•„๋ž˜์ชฝ์˜ ๋ชจ๋“  ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ธฐ ์œ„ํ•ด flex item์„ ์•„๋ž˜์ชฝ์—์„œ ์œ„์ชฝ์œผ๋กœ ๋ฏผ๋‹ค. (์ˆ˜์ง ์œ„์ชฝ ์œ„์น˜.)
  • margin: auto

    • ๋ฐ”๊นฅ ์—ฌ๋ฐฑ์ด ์œ„์•„๋ž˜๋กœ ๋ฐ€๊ธฐ ๋•Œ๋ฌธ์— flex item์ด ์ˆ˜์ง ์ค‘์•™์— ์œ„์น˜.
  • margin-top: auto

    • ๋ฐ”๊นฅ ์—ฌ๋ฐฑ์ด ์œ„์ชฝ์˜ ๋ชจ๋“  ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ธฐ ์œ„ํ•ด flex item์„ ์œ„์ชฝ์—์„œ ์•„๋ž˜์ชฝ์œผ๋กœ ๋ฏผ๋‹ค. (์ˆ˜์ง ์•„๋ž˜์ชฝ ์œ„์น˜.)

 

flebox์—์„œ margin: auto ์†์„ฑ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•ต(hack)์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด ๋ฒ„๊ทธ๋ฅผ ์ผ์œผํ‚ค๋Š” ์š”์ธ์ด๋ผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์˜คํžˆ๋ ค flex box ๋ช…์„ธ์— ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ("CSS Flexible Box Layout Module Level 1"์˜ '8.1. Aligning with 'auto' margins' ์ฐธ๊ณ )

 

 

 

3. ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด ์•„๋ž˜์— ๋ถ™๋Š” ํ‘ธํ„ฐ

.flex_container {
  display: flex;
  flex-direction: colum;
  heiht: 100%;
  /* ์ „์ฒด ๋†’์ด๊ฐ’์„ ์ค˜์•ผ ํ•œ๋‹ค. */
}
.flex_item {
  margin-top: auto;
}

 

margin-top: auto ์†์„ฑ์œผ๋กœ ์ž์‹ ์š”์†Œ๋ฅผ ํ™”๋ฉด ์•„๋ž˜์— ๋ฐฐ์น˜

flex item์— margin-top: auto ์†์„ฑ์„ ์ ์šฉํ•˜๋ฉด ๋ฐ”๊นฅ ์—ฌ๋ฐฑ์ด flex item์„ ์œ„์ชฝ์—์„œ ์•„๋ž˜์ชฝ์œผ๋กœ ๋ฐ€๊ธฐ ๋•Œ๋ฌธ์— flex item์ด ์•„๋ž˜์ชฝ์— ์œ„์น˜ํ•œ๋‹ค.


4. ์ •๋ ฌ์ด ๋‹ค๋ฅธ ๋ฉ”๋‰ด

.flex_container {
  display: flex;
  justify-content: space-between;
}

 

 

justify-content: space-between ์†์„ฑ์œผ๋กœ ์ž์‹ ์š”์†Œ๋ฅผ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ •๋ ฌ

justify-content ์†์„ฑ์€ ์ฃผ์ถ•์„ ๊ธฐ์ค€์œผ๋กœ flex item์„ ์ˆ˜ํ‰์„ ์ •๋ ฌํ•œ๋‹ค.

 

  • flex-start(๊ธฐ๋ณธ๊ฐ’)

    • ์ฃผ์ถ•์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ flex item์„ ์ •๋ ฌ.
  • center

    • ์ฃผ์ถ•์˜ ์ค‘์•™์„ ๊ธฐ์ค€์‘๋กœ flex item ์ •๋ ฌ.
  • flex-end

    • ์ฃผ์ถ•์˜ ๋๋ถ€๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ flex item ์ •๋ ฌ.
  • space-around

    • ์ฃผ์ถ•์„ ๊ธฐ์ค€์œผ๋กœ flex item์„ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ •๋ ฌ.
  • space-between

    • ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ flex item์€ ์ฃผ์ถ•์˜ ์‹œ์ž‘๊ณผ ๋ ๋ถ€๋ถ„ ์ •๋ ฌํ•˜๊ณ  ๋‚˜๋จธ์ง€ flex item์„ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ •๋ ฌ.

 


 

 

5. ํผ ๋ ˆ์ด๋ธ” ์ˆ˜์ง ์ค‘์•™ ์ •๋ ฌ

ํผ ์š”์†Œ์˜ ๋ ˆ์ด๋ธ”์„ ์ˆ˜์ง ์ค‘์•™ ์ •๋ ฌํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์ด๋‹ค.

.flex_container {
  display: flex;
  align-items: center;
}

ํผ ๋ ˆ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ(flex_container ํด๋ž˜์Šค)์— align-items:center ์†์„ฑ์„ ์ ์šฉํ•œ๋‹ค.

 

align-items: center ์†์„ฑ์œผ๋กœ ์ž์‹ ์š”์†Œ๋ฅผ ๊ต์ฐจ์ถ•์˜ ์ค‘์•™์— ์ •๋ ฌ

align-content๋Š” ๋‘ ์ค„ ์ด์ƒ์ผ ๋•Œ ์‚ฌ์šฉ.

  • stretch(๊ธฐ๋ณธ๊ฐ’)

    • flex item์˜ ๋†’์ด๋ฅผ ๋Š˜๋ ค flex container์˜ ์ „์ฒด ๋†’์ด๋ฅผ ์ฑ„์šด๋‹ค.
  • flex-start

    • ๊ต์ฐจ์ถ•์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ flex item์„ ์ •๋ ฌ.
  • center

    • ๊ต์ฐจ์ถ•์˜ ์ค‘์•™ ๊ธฐ์ค€์œผ๋กœ flex item ์ •๋ ฌ.
  • baseline

    • ๊ธ€๊ผด์˜ ๊ธฐ์ค€์„ ์ธ baseline์„ ๊ธฐ์ค€์œผ๋กœ flex item์„ ์ •๋ ฌ.
  • flex-end

    • ๊ต์ฐจ์ถ•์˜ ๋๋ถ€๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ flex item ์ •๋ ฌ.

 

 

6. ์ค‘์•™ ์ •๋ ฌ ์•„์ด์ฝ˜

์ž์‹ ์š”์†Œ์ธ ์•„์ด์ฝ˜์ด ๋ถ€๋ชจ ์š”์†Œ์˜ ์ •์ค‘์•™์— ์œ„์น˜ํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ.

์ค‘์•™ ์ •๋ ฌ ์•„์ด์ฝ˜์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.


์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ flex container์— align-items: center์™€ justify-content: center ์†์„ฑ์„ ์ ์šฉํ•ด ์•„์ด์ฝ˜์— ํ•ด๋‹นํ•˜๋Š” flex item์„ ํ™”๋ฉด ์ •์ค‘์•™์— ์ •๋ ฌํ•œ๋‹ค.

.flex_container {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh; /* ํ™”๋ฉด์ „์ฒด ๋†’์ด */
  /* ๋†’์ด๊ฐ’์„ ๋”ฐ๋กœ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. */
}

 

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•„์ด์ฝ˜์— ํ•ด๋‹นํ•˜๋Š” flex item์— margin: auto ์†์„ฑ์„ ์ ์šฉํ•œ๋‹ค.

.flex_container {
  display: flex;
  /* ๋†’์ด๊ฐ’ ๋”ฐ๋กœ ์ง€์ •. */
}
.flex_item {
  margin: auto;
}

 

 

 

7. ์œ ๋™ ๋„ˆ๋น„ ๋ฐ•์Šค

์œ ๋™๋„ˆ๋น„๋ฐ•์Šค๋Š” flex container์ธ ๋ถ€๋ชจ์š”์†Œ ํฌ๊ธฐ์— ๋”ฐ๋ผ flex item์ธ ์ž์‹์š”์†Œ์˜ ํฌ๊ธฐ๊ฐ€ ์ฝ˜ํ…์ธ ์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ค„์–ด๋“œ๋Š” ๋ ˆ์ด์•„์›ƒ์ด๋‹ค. (๋ฐ˜์‘ํ˜•๋ฐ•์Šค)

.flex_container {
  display: flex;
}
.flex_item {
  /* flex: initial; */
  max-width: 300px;
}

 

flex item์— max-width: 300px ๋งŒ ์„ ์–ธํ•œ๋‹ค.

 

flex item์˜ ํฌ๊ธฐ์— ๊ด€๋ จ๋œ ์†์„ฑ์ธ flex ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์€ 0 1 auto ์ด๋‹ค. flex ์†์„ฑ์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด flex item์—๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ์ ์šฉ๋œ๋‹ค.

flex ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์€ flex-grow: 0 ์†์„ฑ๊ณผ flex-shrink: 1 ์†์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ž˜์„œ flex container์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ๋•Œ๋Š” flex item์˜ ํฌ๊ธฐ๋Š” ๋ณ€ํ•˜์ง€ ์•Š์ง€๋งŒ, flex container์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง€๋ฉด flex item์˜ ํฌ๊ธฐ๋„ ์ž‘์•„์ง„๋‹ค.


 

 

8. ๋ง์ค„์ž„๊ณผ ์•„์ด์ฝ˜

๋ง์ค„์ž„๊ณผ ์•„์ด์ฝ˜ ๋ ˆ์ด์•„์›ƒ์€ flex container์ธ ๋ถ€๋ชจ ์š”์†Œ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„ flex item์ธ ์ž์‹์š”์†Œ์˜ ํ…์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํ‘œ์‹œํ•  ์ˆ˜ ์—†์„ ๋•Œ ์ค„์ž„ํ‘œ(...)๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์ด๋‹ค.

์ด๋•Œ ํ…์ŠคํŠธ ์˜์—ญ ์˜†์— ์žˆ๋Š” ์•„์ด์ฝ˜์˜ ํฌ๊ธฐ๋Š” ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค.

.flex_container {
  display: inline-flex;
  max-width: 100%;
}
.text {
  /* flex: 0 1 auto */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

flex container์— display: inline-flex ์†์„ฑ๊ณผ max-width: 100% ์†์„ฑ์„ ์ ์šฉํ•œ๋‹ค.

 

์œ ๋™์ ์ธ ๋„ˆ๋น„๋ฅผ ๋งŒ๋“ค ๋•Œ์™€ ๊ฐ™์ด max-width: 100%์„ ํ•จ๊ป˜ ๋„ฃ์–ด ์ ์šฉํ•œ๋‹ค.

 

 

display: inline-flex ์†์„ฑ์œผ๋กœ ๋ถ€๋ชจ์š”์†Œ๋ฅผ ์ธ๋ผ์ธ ๋ธ”๋ก ์š”์†Œ๋กœ ๋งŒ๋“ค๊ธฐ

display: inline-flex ์†์„ฑ์€ flex container๋ฅผ ์ธ๋ผ์ธ ๋ธ”๋ก ์š”์†Œ๋กœ ๋งŒ๋“œ๋Š” ์†์„ฑ์ด๋‹ค.

display: flex ์†์„ฑ์„ ์ ์šฉํ•œ flex container๋Š” ๋ธ”๋ก์š”์†Œ์ด๋‹ค.

 

๋ธ”๋ก ์š”์†Œ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์ด ํ•œ ์ค„๋กœ ์ „์ฒด๋ฅผ ์ฐจ์ง€ํ•˜์ง€๋งŒ(flex),

์ธ๋ผ์ธ ๋ธ”๋ก ์š”์†Œ๋Š” ํ•œ ์ค„์˜ ์ผ๋ถ€ ์˜์—ญ๋งŒ ์ฐจ์ง€ํ•œ๋‹ค(inline-flex).

 

 

flex container์— ์ ์šฉํ•œ max-width: 100%์†์„ฑ์€ flex item์ธ ํ…์ŠคํŠธ์˜์—ญ(.text ํด๋ž˜์Šค)์˜ ๊ธธ์ด๊ฐ€ ์œ ๋™์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

ํ…์ŠคํŠธ ์˜์—ญ์ด ์ค„์–ด๋“ค ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” text-overflow: ellipsis ์†์„ฑ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.


 

 

9. ์œ„์•„๋ž˜๋กœ ํ๋ฅด๋Š” ๋ชฉ๋ก

์œ„์•„๋ž˜๋กœ ํ๋ฅด๋Š” ๋ชฉ๋ก์€ ์ž์‹ ์š”์†Œ๋ฅผ ์œ„์•„๋ž˜๋กœ ๋จผ์ € ์ •๋ ฌํ•˜๊ณ  ์ž์‹์š”์†Œ๊ฐ€ ๋ถ€๋ชจ์š”์†Œ๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์ค„์„ ๋ฐ”๊ฟ” ๋‹ค์‹œ ์œ„์•„๋ž˜๋กœ ์ •๋ ฌํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ์ด๋‹ค.

.flex_container {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  justify-content: space-around;
  align-content: space-around;
}

 

 

~~ํ•˜๋Š”์ค‘..

 


Reference

flexbox๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” 10๊ฐ€์ง€ ๋ ˆ์ด์•„์›ƒ

 

๋ฐ˜์‘ํ˜•