๐Ÿ›  Flexbox ํŒจ๋„, ์™œ ๊ฐ‘์ž๊ธฐ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ํ„ฐ์กŒ๋ƒ๊ตฌ์š”? (feat. min-height: 0)

์†ก์—ฐ์ง€ยท2025๋…„ 4์›” 29์ผ
0

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

๋ชฉ๋ก ๋ณด๊ธฐ
22/32
post-thumbnail

๐ŸŒ€ ๋ฌธ์ œ ์ƒํ™ฉ

์ฒ˜์Œ์—” ๋ชจ๋“  ๊ฒŒ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฐ๋ฐ... ์–ด๋А ๋‚ ๋ถ€ํ„ฐ

"ํŒจ๋„ ๋‚ด์šฉ์ด ํ™”๋ฉด์„ ๋šซ๊ณ  ๋‚˜์˜จ๋‹ค" ๐Ÿ˜ฑ

  • ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฌดํ•œ์ • ๊ธธ์–ด์ง€๊ณ ,
  • ์Šคํฌ๋กค์€ ์•ˆ ์ƒ๊ธฐ๊ณ ,
  • ํ‘ธํ„ฐ๋Š” ๋ˆŒ๋ฆฌ๊ณ ,
  • ํ™”๋ฉด์€ ๋ฌด๋„ˆ์ง€๊ณ ...

"์•„๋‹ˆ, ๋‚˜ ์ฝ”๋“œ ์•ˆ ๊ฑด๋“œ๋ ธ๋Š”๋ฐ ์™œ ์ด๋ž˜??"

๋ผ๊ณ  ๋‹นํ™ฉํ–ˆ์ฃ .


๐Ÿ”ฅ ์›์ธ ๋ถ„์„

1. Flexbox์™€ ์ฝ˜ํ…์ธ  ํฌ๊ธฐ์˜ ๋ณ€ํ™”

์ฒ˜์Œ์—๋Š” ๋ฆฌ์ŠคํŠธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ง€ ์•Š์•„์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

Flexbox์˜ ๊ธฐ๋ณธ ๋™์ž‘ ๋•๋ถ„์— ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฒ˜๋ฆฌ๋˜์—ˆ์–ด์š”.

ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ์–‘์ด ๋Š˜์–ด๋‚˜๋ฉด์„œ,

  • ๋‚ด๋ถ€ ์ฝ˜ํ…์ธ  ๋†’์ด๊ฐ€ ์˜ˆ์ƒ๋ณด๋‹ค ์ปค์กŒ๊ณ 
  • flex-grow, overflow-auto ์กฐํ•ฉ๋งŒ์œผ๋กœ๋Š” ์ปค๋ฒ„๊ฐ€ ์•ˆ ๋์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ(Pannel)๊ฐ€ ์ปจํ…์ธ  ํฌ๊ธฐ๋ฅผ ์ด๊ธฐ์ง€ ๋ชปํ•˜๊ณ  ํ„ฐ์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


2. min-height: 0์˜ ๋ถ€์žฌ

Flexbox ์•„์ดํ…œ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ

"๋‚ด ์ตœ์†Œ ๋†’์ด(min-height)๋Š” ๋‚ด ์ฝ˜ํ…์ธ ๊ฐ€ ๋‹ค ๋ณด์—ฌ์งˆ ์ •๋„์—ฌ์•ผ ํ•ด!"

๋ผ๊ณ  ๊ณ ์ง‘ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•„๋ฌด๋ฆฌ overflow-auto๋ฅผ ์ค˜๋„ ์Šคํฌ๋กค์ด ์•ˆ ์ƒ๊ธฐ๊ณ  ๊ทธ๋ƒฅ ๋ถ€๋ชจ๋ฅผ ๋ฐ€์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

min-height: 0์„ ์„ค์ •ํ•ด์ค˜์•ผ

"์•„, ํ•„์š”ํ•˜๋ฉด ์ค„์–ด๋“ค์–ด๋„ ๋ผ~"

๋ผ๊ณ  Flexbox๊ฐ€ ์ดํ•ดํ•˜๊ณ , ์ •์ƒ์ ์œผ๋กœ ์Šคํฌ๋กค ์ฒ˜๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


3. flex-shrink ๋ฌธ์ œ

ํ—ค๋”๋‚˜ ํ‘ธํ„ฐ ๊ฐ™์€ ๊ณ ์ • ์˜์—ญ๋“ค์€

flex-shrink: 0 ์ฒ˜๋ฆฌ๋ฅผ ์•ˆ ํ•ด์ฃผ๋ฉด,

  • ์ฝ˜ํ…์ธ ๊ฐ€ ๋งŽ์•„์งˆ ๋•Œ
  • ์‹ฌ์ง€์–ด ํ—ค๋”๋‚˜ ํ‘ธํ„ฐ๋งˆ์ € ๋ˆŒ๋ ค์„œ ์‚ฌ๋ผ์ง€๊ฑฐ๋‚˜ ๊นจ์ง€๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    ์›์ธ์„ค๋ช…
    ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚จ์ฒ˜์Œ์—๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ ์–ด์„œ ๋ฌธ์ œ ์—†์—ˆ์Œ
    min-height: 0 ๋ถ€์žฌFlexbox ํŠน์„ฑ์ƒ, ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋ฅผ ๋ณด์žฅํ•˜๋ ค๊ณ  ํ•ด์„œ ์Šคํฌ๋กค ๋ฌด์‹œ
    flex-shrink: 0 ๋ฏธ์ ์šฉํ—ค๋”, ํ‘ธํ„ฐ๊ฐ€ ์••์ถ•๋˜๊ฑฐ๋‚˜ ๊นจ์ง€๋Š” ํ˜„์ƒ ๋ฐœ์ƒ

์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ถˆ์•ˆํ–ˆ๋Š”๋ฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด์„œ ํ‹ฐ๊ฐ€ ๋‚œ ๊ฑฐ์˜€์–ด์š”.
์ฆ‰, ์ดˆ๊ธฐ์—๋Š” "์šด ์ข‹๊ฒŒ" ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์„ ๋ฟ, ๊ตฌ์กฐ์ ์œผ๋กœ ์•ˆ์ „ํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


โœ‚๏ธ ๊ทธ๋ž˜์„œ ์ˆ˜์ •ํ•œ ๋‚ด์šฉ

ํ•œ ์ค„ ์š”์•ฝ: Flexbox์—์„œ overflow, ์Šคํฌ๋กค, ํฌ๊ธฐ ๋ฌธ์ œ๋ฅผ ์•„์˜ˆ ๊ทผ๋ณธ์ ์œผ๋กœ ์žก์•˜์Šต๋‹ˆ๋‹ค.

1. Panel ์ˆ˜์ •


<div className="h-[calc(100vh-220px)] max-h-[calc(100vh-220px)] overflow-hidden">
  • ํŒจ๋„ ์ž์ฒด์— ์ตœ๋Œ€ ๋†’์ด ์ œํ•œ + overflow ์ˆจ๊น€ ์ถ”๊ฐ€
  • ๋ถ€๋ชจ ์ž์ฒด๊ฐ€ ๋” ์ด์ƒ ๊นจ์ง€์ง€ ์•Š์Œ

2. PanelHeader ์ˆ˜์ •


<div className="flex-shrink-0
  • ํ—ค๋”๋Š” ๋ฌด์กฐ๊ฑด ๊ณ ์ • ๋†’์ด ์œ ์ง€
  • ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ปค์ ธ๋„ ํ—ค๋”๊ฐ€ ๋ˆŒ๋ฆฌ๊ฑฐ๋‚˜ ์‚ฌ๋ผ์ง€์ง€ ์•Š์Œ

3. PanelContent ์ˆ˜์ •

<div className="flex-grow overflow-auto custom-scrollbar" style={{ minHeight: 0 }}>
  • ํ•ต์‹ฌ: minHeight: 0 ์„ค์ •
  • Flexbox ์•ˆ์—์„œ ์Šคํฌ๋กค ์ •์ƒ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅ

<div className="flex-shrink-0 sticky bottom-0 z-10">
  • ํ‘ธํ„ฐ๋Š” ํ•ญ์ƒ ํ•˜๋‹จ์— ๊ณ ์ •
  • ์Šคํฌ๋กค์ด ์ƒ๊ฒจ๋„ ํ‘ธํ„ฐ๊ฐ€ ์Šคํฌ๋กค๋˜์ง€ ์•Š์Œ

๐ŸŽฏ ์ตœ์ข… ๊ตฌ์กฐ ์š”์•ฝ


Panel (flex, overflow-hidden)
 โ”œโ”€ PanelHeader (flex-shrink-0)
 โ”œโ”€ PanelContent (flex-grow, overflow-auto, minHeight: 0)
 โ”‚    โ””โ”€ ๋ฆฌ์ŠคํŠธ ์•„์ดํ…œ๋“ค
 โ””โ”€ Footer (flex-shrink-0, sticky bottom)

๐Ÿ“ข ๊ฒฐ๋ก 

โœ… Flexbox๋Š” min-height: 0 ์—†์œผ๋ฉด ์Šคํฌ๋กค ์ œ๋Œ€๋กœ ์•ˆ ๋จ

โœ… ๋ฐ์ดํ„ฐ ์ ์„ ๋•Œ๋Š” ์•ˆ ํ„ฐ์ง€์ง€๋งŒ, ๋‚˜์ค‘์— ๋Œ€์ฐธ์‚ฌ ๋‚  ์ˆ˜ ์žˆ์Œ

โœ… ํ—ค๋”/ํ‘ธํ„ฐ๋Š” flex-shrink: 0 ๊ผญ ๋„ฃ์ž

โœ… ์Šคํฌ๋กค ์ปจํŠธ๋กค์€ ํ•ญ์ƒ overflow-hidden, overflow-auto๋ฅผ ํ™•์‹คํžˆ ๋ช…์‹œํ•˜์ž

"๋‚˜๋Š” min-height: 0 ์—†์œผ๋ฉด flexbox ์•ˆ ๋ฏฟ๋Š”๋‹ค"

๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋งˆ์Œ์ด ํŽธํ•ด์ง‘๋‹ˆ๋‹ค.


โœจ ์ž‘์€ ๊ตํ›ˆ

  • ์ฒ˜์Œ์— ์ž˜ ๋œ๋‹ค๊ณ  ์•ˆ์‹ฌํ•˜์ง€ ๋ง๊ธฐ
  • "๋ฐ์ดํ„ฐ 10๋ฐฐ ๋งŽ์•„์ง€๋ฉด ๊นจ์งˆ๊นŒ?" ์ƒ์ƒํ•ด๋ณด๊ธฐ
  • Flexbox๋ž‘ ์Šคํฌ๋กค ๋‹ค๋ฃจ๋Š” ๊ฑด ์–ธ์ œ๋‚˜ ์กฐ์‹ฌ ๋˜ ์กฐ์‹ฌ
profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์Ÿˆ!!

0๊ฐœ์˜ ๋Œ“๊ธ€