Flex 高度分配 - daniel-qa/Vue GitHub Wiki

100vh
 └─ page (flex column)
     ├─ header(固定高度)
     ├─ tabs(min-height)
     ├─ divider(1px)
     └─ content (flex:1, overflow-y:auto) ✅
         └─ Row (flex)
             ├─ left Col (flex column)
             │   ├─ 上半部 (flex:1)
             │   └─ 下半部 (flex:1)
             └─ right Col (flex column)
                 ├─ title (flex-shrink:0)
                 └─ list (flex:1, overflow)

100vh(高度的唯一來源)

content (flex:1):吃「剩下的全部」
└─ content (flex:1, overflow-y:auto)

flex: 1:

👉 把「剩餘高度」全部吃掉

overflow-y: auto:

👉 唯一允許滾動的地方

所以整頁不會滾,只有內容在滾

這一層一定要是 div,不是 el-row

Row (flex):開始切「左右」
└─ Row (flex)

這裡的角色轉換很重要 ⚠️

上面在切「上下」

這一層開始只管「左右」

👉 高度 完全繼承,不再自己算

left / right Col:左右欄容器 ├─ left Col (flex column) └─ right Col (flex column)

為什麼這兩個一定要:

display: flex;
flex-direction: column;

因為你接下來要在欄位裡再切上下

👉 一個欄位 = 一個小 page

  • 左欄:上下 1:1 平分
left Col
├─ 上半部 (flex:1)
└─ 下半部 (flex:1)

這是最乾淨的比例切法:

不用算 px

不用管內容高度

螢幕變化自動適應

想改 2:1?

👉 flex:2 / flex:1

  • 右欄:固定標題 + 滾動清單(經典版型)
right Col
├─ title (flex-shrink:0)
└─ list (flex:1, overflow)

這是企業後台最常見結構

為什麼穩?

標題:

flex-shrink: 0

永遠可見、不被擠

清單:

吃剩下的高度

自己滾,不影響整頁

為什麼這棵樹「不會壞」?

✅ 三個鐵律全符合

高度來源只有一個(100vh)

高度只往下傳,不用 height:100%

scroll 只出現在一層

只要守這三條,flex 版型幾乎不會爆