๐ŸŽจ Frontend/CSS

[CSS] Flexbox ์†์„ฑ ํ•œ๋ˆˆ์— ์ •๋ฆฌํ•˜๊ธฐ

devCloud 2026. 2. 12. 22:22
728x90

๐Ÿ“Œ Flex ๊ธฐ๋ณธ ๊ฐœ๋…

Flexbox๋Š” ์ปจํ…Œ์ด๋„ˆ(๋ถ€๋ชจ)์™€ ์•„์ดํ…œ(์ž์‹)์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

.container {
  display: flex;  /* ์ด๊ฑธ ์„ ์–ธํ•ด์•ผ flex ์†์„ฑ๋“ค์ด ์ž‘๋™ํ•จ */
}

 

์ปจํ…Œ์ด๋„ˆ์— display: flex๋ฅผ ์ฃผ๋ฉด, ์ž์‹ ์š”์†Œ๋“ค์ด ๊ฐ€๋กœ ๋ฐฉํ–ฅ(row)์œผ๋กœ ๋‚˜๋ž€ํžˆ ๋ฐฐ์น˜๋œ๋‹ค.


1๏ธโƒฃ justify-content (๊ฐ€๋กœ ์ •๋ ฌ)

์š”์†Œ๋“ค์„ ๊ฐ€๋กœ์„ (๋ฉ”์ธ ์ถ•) ์ƒ์—์„œ ์ •๋ ฌํ•œ๋‹ค.

๊ฐ’ ์„ค๋ช…
flex-start ์™ผ์ชฝ ์ •๋ ฌ (๊ธฐ๋ณธ๊ฐ’)
flex-end ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ
center ๊ฐ€์šด๋ฐ ์ •๋ ฌ
space-between ์š”์†Œ ์‚ฌ์ด์— ๋™์ผํ•œ ๊ฐ„๊ฒฉ
space-around ์š”์†Œ ์ฃผ์œ„์— ๋™์ผํ•œ ๊ฐ„๊ฒฉ
space-evenly ์š”์†Œ ์‚ฌ์ด์™€ ์–‘ ๋ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฐ„๊ฒฉ
.container {
  justify-content: center;  /* ๊ฐ€๋กœ ๊ฐ€์šด๋ฐ ์ •๋ ฌ */
}

 

space-between vs space-around vs space-evenly ์ฐจ์ด

  • space-between: ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋Š” ์–‘ ๋์— ๋ถ™์Œ
  • space-around: ๊ฐ ์š”์†Œ ์ขŒ์šฐ์— ๊ฐ™์€ ์—ฌ๋ฐฑ (์–‘ ๋์€ ์ ˆ๋ฐ˜)
  • space-evenly: ๋ชจ๋“  ๊ฐ„๊ฒฉ์ด ์™„์ „ํžˆ ๋™์ผ

2๏ธโƒฃ align-items (์„ธ๋กœ ์ •๋ ฌ)

์š”์†Œ๋“ค์„ ์„ธ๋กœ์„ (๊ต์ฐจ ์ถ•) ์ƒ์—์„œ ์ •๋ ฌํ•œ๋‹ค.

๊ฐ’ ์„ค๋ช…
flex-start ์ปจํ…Œ์ด๋„ˆ ๊ผญ๋Œ€๊ธฐ์— ์ •๋ ฌ
flex-end ์ปจํ…Œ์ด๋„ˆ ๋ฐ”๋‹ฅ์— ์ •๋ ฌ
center ์„ธ๋กœ ๊ฐ€์šด๋ฐ ์ •๋ ฌ
baseline ํ…์ŠคํŠธ ๊ธฐ์ค€์„ ์— ๋งž์ถฐ ์ •๋ ฌ
stretch ์ปจํ…Œ์ด๋„ˆ ๋†’์ด์— ๋งž๊ฒŒ ๋Š˜๋ฆผ (๊ธฐ๋ณธ๊ฐ’)
.container {
  justify-content: center;  /* ๊ฐ€๋กœ ๊ฐ€์šด๋ฐ */
  align-items: center;      /* ์„ธ๋กœ ๊ฐ€์šด๋ฐ */
}
/* → ์™„๋ฒฝํ•œ ์ •์ค‘์•™ ๋ฐฐ์น˜! */

3๏ธโƒฃ flex-direction (๋ฐฉํ–ฅ ์„ค์ •)

์š”์†Œ๋“ค์ด ์–ด๋А ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐฐ์น˜๋ ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

๊ฐ’ ์„ค๋ช…
row ๊ฐ€๋กœ ๋ฐฉํ–ฅ, ์™ผ์ชฝ→์˜ค๋ฅธ์ชฝ (๊ธฐ๋ณธ๊ฐ’)
row-reverse ๊ฐ€๋กœ ๋ฐฉํ–ฅ, ์˜ค๋ฅธ์ชฝ→์™ผ์ชฝ
column ์„ธ๋กœ ๋ฐฉํ–ฅ, ์œ„→์•„๋ž˜
column-reverse ์„ธ๋กœ ๋ฐฉํ–ฅ, ์•„๋ž˜→์œ„
.container {
  flex-direction: column;
}

 

โš ๏ธ ์ค‘์š”: flex-direction์ด column์ด๋ฉด ์ถ•์ด ๋’ค๋ฐ”๋€๋‹ค!

  • justify-content → ์„ธ๋กœ ์ •๋ ฌ์ด ๋จ
  • align-items → ๊ฐ€๋กœ ์ •๋ ฌ์ด ๋จ

4๏ธโƒฃ order (์ˆœ์„œ ๋ณ€๊ฒฝ)

๊ฐœ๋ณ„ ์š”์†Œ์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พผ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋ฉฐ, ์ˆซ์ž๊ฐ€ ์ž‘์„์ˆ˜๋ก ์•ž์— ๋ฐฐ์น˜๋œ๋‹ค.

.yellow {
  order: 1;  /* ๋‹ค๋ฅธ ์š”์†Œ๋“ค(๊ธฐ๋ณธ๊ฐ’ 0)๋ณด๋‹ค ๋’ค๋กœ ์ด๋™ */
}

 

์™œ order: 1์ด๋ฉด ๋’ค๋กœ ๊ฐ€๋Š”๊ฐ€?
๋ชจ๋“  ์š”์†Œ์˜ ๊ธฐ๋ณธ order ๊ฐ’์€ 0์ด๋‹ค. ํŠน์ • ์š”์†Œ์— order: 1์„ ์ฃผ๋ฉด 0๋ณด๋‹ค ํฌ๋‹ˆ๊นŒ ๋งจ ๋’ค๋กœ ๋ฐ€๋ ค๋‚œ๋‹ค.

  • order: -1 → ๋งจ ์•ž์œผ๋กœ
  • order: 0  → ๊ธฐ๋ณธ ์œ„์น˜
  • order: 1  → ๋งจ ๋’ค๋กœ

5๏ธโƒฃ align-self (๊ฐœ๋ณ„ ์„ธ๋กœ ์ •๋ ฌ)

๊ฐœ๋ณ„ ์š”์†Œ์—๋งŒ ๋‹ค๋ฅธ ์„ธ๋กœ ์ •๋ ฌ์„ ์ ์šฉํ•œ๋‹ค. align-items์™€ ๊ฐ™์€ ๊ฐ’๋“ค์„ ์‚ฌ์šฉํ•œ๋‹ค.

.container {
  align-items: flex-start;  /* ์ „์ฒด๋Š” ์œ„์ชฝ ์ •๋ ฌ */
}

.yellow {
  align-self: flex-end;     /* ๋…ธ๋ž€์ƒ‰๋งŒ ์•„๋ž˜์ชฝ ์ •๋ ฌ */
}

6๏ธโƒฃ flex-wrap (์ค„ ๋ฐ”๊ฟˆ)

์š”์†Œ๋“ค์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„˜์น  ๋•Œ ์ค„ ๋ฐ”๊ฟˆ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

๊ฐ’ ์„ค๋ช…
nowrap ํ•œ ์ค„์— ๋ชจ๋‘ ๋ฐฐ์น˜ (๊ธฐ๋ณธ๊ฐ’, ๋„˜์ณ๋„ ์ค„ ์•ˆ ๋ฐ”๊ฟˆ)
wrap ๋„˜์น˜๋ฉด ๋‹ค์Œ ์ค„๋กœ
wrap-reverse ๋„˜์น˜๋ฉด ์œ„์ชฝ์œผ๋กœ ์ค„ ๋ฐ”๊ฟˆ
.container {
  flex-wrap: wrap;
}

7๏ธโƒฃ flex-flow (๋‹จ์ถ• ์†์„ฑ)

flex-direction๊ณผ flex-wrap์„ ํ•œ ๋ฒˆ์— ์ž‘์„ฑํ•œ๋‹ค.

/* ๋”ฐ๋กœ ์“ฐ๋ฉด */
flex-direction: row;
flex-wrap: wrap;

/* ํ•ฉ์น˜๋ฉด */
flex-flow: row wrap;

8๏ธโƒฃ align-content (์—ฌ๋Ÿฌ ์ค„ ์ •๋ ฌ)

์—ฌ๋Ÿฌ ์ค„์ด ์žˆ์„ ๋•Œ, ์ค„๋“ค ์‚ฌ์ด์˜ ์„ธ๋กœ ์ •๋ ฌ์„ ๊ฒฐ์ •ํ•œ๋‹ค.

๊ฐ’ ์„ค๋ช…
flex-start ์ค„๋“ค์„ ๊ผญ๋Œ€๊ธฐ์— ์ •๋ ฌ
flex-end ์ค„๋“ค์„ ๋ฐ”๋‹ฅ์— ์ •๋ ฌ
center ์ค„๋“ค์„ ์„ธ๋กœ ๊ฐ€์šด๋ฐ ์ •๋ ฌ
space-between ์ค„ ์‚ฌ์ด์— ๋™์ผํ•œ ๊ฐ„๊ฒฉ
space-around ์ค„ ์ฃผ์œ„์— ๋™์ผํ•œ ๊ฐ„๊ฒฉ
stretch ์ค„๋“ค์„ ์ปจํ…Œ์ด๋„ˆ์— ๋งž๊ฒŒ ๋Š˜๋ฆผ

โš ๏ธ ์ฃผ์˜: flex-wrap: wrap์œผ๋กœ ์—ฌ๋Ÿฌ ์ค„์ด ์ƒ๊ฒผ์„ ๋•Œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค. ํ•œ ์ค„์ด๋ฉด ํšจ๊ณผ ์—†์Œ!

 

align-items vs align-content

  • align-items: ํ•œ ์ค„ ์•ˆ์—์„œ ์š”์†Œ๋“ค์˜ ์„ธ๋กœ ์ •๋ ฌ
  • align-content: ์—ฌ๋Ÿฌ ์ค„๋“ค ์‚ฌ์ด์˜ ์„ธ๋กœ ๊ฐ„๊ฒฉ/์ •๋ ฌ

๐Ÿ“‹ ์†์„ฑ ์š”์•ฝ

์†์„ฑ ์ ์šฉ ๋Œ€์ƒ ์—ญํ• 
justify-content ์ปจํ…Œ์ด๋„ˆ ๊ฐ€๋กœ ์ •๋ ฌ
align-items ์ปจํ…Œ์ด๋„ˆ ์„ธ๋กœ ์ •๋ ฌ (ํ•œ ์ค„)
align-content ์ปจํ…Œ์ด๋„ˆ ์„ธ๋กœ ์ •๋ ฌ (์—ฌ๋Ÿฌ ์ค„)
flex-direction ์ปจํ…Œ์ด๋„ˆ ๋ฐฐ์น˜ ๋ฐฉํ–ฅ
flex-wrap ์ปจํ…Œ์ด๋„ˆ ์ค„ ๋ฐ”๊ฟˆ ์—ฌ๋ถ€
flex-flow ์ปจํ…Œ์ด๋„ˆ direction + wrap ๋‹จ์ถ•
order ์•„์ดํ…œ ๊ฐœ๋ณ„ ์ˆœ์„œ ๋ณ€๊ฒฝ
align-self ์•„์ดํ…œ ๊ฐœ๋ณ„ ์„ธ๋กœ ์ •๋ ฌ

 

์ฐธ๊ณ ์ž๋ฃŒ - ๐Ÿ”— flex ๊ฐœ๊ตฌ๋ฆฌ

728x90