์ฒ์์ ๋ชจ๋ ๊ฒ ์ข์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ... ์ด๋ ๋ ๋ถํฐ
"ํจ๋ ๋ด์ฉ์ด ํ๋ฉด์ ๋ซ๊ณ ๋์จ๋ค" ๐ฑ
"์๋, ๋ ์ฝ๋ ์ ๊ฑด๋๋ ธ๋๋ฐ ์ ์ด๋??"
๋ผ๊ณ ๋นํฉํ์ฃ .
์ฒ์์๋ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๊ฐ ๋ง์ง ์์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค.
Flexbox์ ๊ธฐ๋ณธ ๋์ ๋๋ถ์ ์ฝ๊ฐ์ ์ค๋ฒํ๋ก์ฐ๋ ์์ฐ์ค๋ฝ๊ฒ ์ฒ๋ฆฌ๋์์ด์.
ํ์ง๋ง ๋ฐ์ดํฐ ์์ด ๋์ด๋๋ฉด์,
๊ฒฐ๊ตญ ๋ถ๋ชจ ์ปจํ ์ด๋(Pannel)๊ฐ ์ปจํ ์ธ ํฌ๊ธฐ๋ฅผ ์ด๊ธฐ์ง ๋ชปํ๊ณ ํฐ์ง ๊ฒ์ ๋๋ค.
min-height: 0
์ ๋ถ์ฌFlexbox ์์ดํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก
"๋ด ์ต์ ๋์ด(min-height)๋ ๋ด ์ฝํ ์ธ ๊ฐ ๋ค ๋ณด์ฌ์ง ์ ๋์ฌ์ผ ํด!"
๋ผ๊ณ ๊ณ ์งํฉ๋๋ค.
๊ทธ๋์ ์๋ฌด๋ฆฌ overflow-auto
๋ฅผ ์ค๋ ์คํฌ๋กค์ด ์ ์๊ธฐ๊ณ ๊ทธ๋ฅ ๋ถ๋ชจ๋ฅผ ๋ฐ์ด๋ฒ๋ฆฝ๋๋ค.
min-height: 0
์ ์ค์ ํด์ค์ผ
"์, ํ์ํ๋ฉด ์ค์ด๋ค์ด๋ ๋ผ~"
๋ผ๊ณ Flexbox๊ฐ ์ดํดํ๊ณ , ์ ์์ ์ผ๋ก ์คํฌ๋กค ์ฒ๋ฆฌ๊ฐ ๋ฉ๋๋ค.
ํค๋๋ ํธํฐ ๊ฐ์ ๊ณ ์ ์์ญ๋ค์
flex-shrink: 0
์ฒ๋ฆฌ๋ฅผ ์ ํด์ฃผ๋ฉด,
์์ธ | ์ค๋ช |
---|---|
๋ฐ์ดํฐ๊ฐ ๋์ด๋จ | ์ฒ์์๋ ๋ฆฌ์คํธ๊ฐ ์ ์ด์ ๋ฌธ์ ์์์ |
min-height: 0 ๋ถ์ฌ | Flexbox ํน์ฑ์, ์ฝํ ์ธ ํฌ๊ธฐ๋ฅผ ๋ณด์ฅํ๋ ค๊ณ ํด์ ์คํฌ๋กค ๋ฌด์ |
flex-shrink: 0 ๋ฏธ์ ์ฉ | ํค๋, ํธํฐ๊ฐ ์์ถ๋๊ฑฐ๋ ๊นจ์ง๋ ํ์ ๋ฐ์ |
์ฒ์๋ถํฐ ๊ตฌ์กฐ๊ฐ ๋ถ์ํ๋๋ฐ, ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด์ ํฐ๊ฐ ๋ ๊ฑฐ์์ด์.
์ฆ, ์ด๊ธฐ์๋ "์ด ์ข๊ฒ" ๋ฌธ์ ๊ฐ ์์์ ๋ฟ, ๊ตฌ์กฐ์ ์ผ๋ก ์์ ํ ์ฝ๋๊ฐ ์๋์๋ ๊ฒ์ ๋๋ค.
ํ ์ค ์์ฝ: Flexbox์์ overflow, ์คํฌ๋กค, ํฌ๊ธฐ ๋ฌธ์ ๋ฅผ ์์ ๊ทผ๋ณธ์ ์ผ๋ก ์ก์์ต๋๋ค.
<div className="h-[calc(100vh-220px)] max-h-[calc(100vh-220px)] overflow-hidden">
<div className="flex-shrink-0
<div className="flex-grow overflow-auto custom-scrollbar" style={{ minHeight: 0 }}>
<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 ์ ๋ฏฟ๋๋ค"
๋ผ๊ณ ์๊ฐํ๋ฉด ๋ง์์ด ํธํด์ง๋๋ค.