LESSON-07 · TOPIC 02

flex-grow、shrink、basis

能拆讀 flex shorthand 的 grow、shrink、basis,並預測剩餘與不足空間如何分配。

code-editFlexbox 軸線、縮放與順序|flex-grow、shrink、basis本頁只練一個責任

本頁只練什麼

能拆讀 flex shorthand 的 grow、shrink、basis,並預測剩餘與不足空間如何分配。

只寫 flex:1 卻不理解三值,容易讓內容在寬版比例失衡,或在窄版因 shrink/basis 判斷錯誤而擠壓。

要修改的檔案:files/starter/style.css

定位:在 Computed 展開 flex,分別記錄 flex-grow、flex-shrink、flex-basis。|依 starter-2 定位,只修改「flex-grow、shrink、basis」的責任。

任務情境

先結果,再原理;完成後要能說出自己看見的證據。

現在的問題

三張服務卡中推薦卡要吃剩餘空間並保留 12rem 基準,其他卡可在不足時縮小。

起始狀態:featured item 使用 flex:0 1 auto,沒有伸展比例與明確 basis。

完成後要看到

runtime 的 flex 由 0 1 auto 改為包含 grow=1、shrink=0、basis=192px 的三值;人工比較卡片寬度變化。

驗收證據:runtime before 包含 0 1 auto;after 包含 1 0 與 192px;property=flex

何時會用到

同一 Flex row 的卡片需要依比例伸展、保護某張卡不縮,或設定分配基準時。

常見混淆:flex-basis 不等於永遠的最終 width;內容、min/max size 與 free space distribution 都可能改變 used main size。

觀念與最小範例

這段程式是理解起點,不是要你直接跳過 Starter。

flex-grow、shrink、basis Flex grow, shrink, and basis factors

grow 決定有多的空間怎麼分,shrink 決定不夠時怎麼縮,basis 是分配前的起始尺寸。

正式說法:flex-grow is a positive free-space factor;flex-shrink is a negative free-space factor;flex-basis defines the initial main size before free space distribution。

.featured{flex:1 0 12rem}.regular{flex:0 1 10rem}

三步完成本主題

每一步都留下可觀察結果;如果沒看到,先看「卡住先查」。

  1. Step 1|先看見目前缺口,不急著貼答案。

    檔案:files/starter/style.css 定位:在 Computed 展開 flex,分別記錄 flex-grow、flex-shrink、flex-basis。

    要做:先重新載入 Starter,記錄目前畫面、DOM、Computed、Console 或文件內容。

    預期:能指出「在 Computed 展開 flex,分別記錄 flex-grow、flex-shrink、flex-basis。」目前的缺口。

    證據:保存 files/starter/style.css 的目前狀態,並指出下一步只會修改哪個檔案責任。

    卡住先查:確認開啟的是 files/starter/style.css,且定位到 在 Computed 展開 flex,分別記錄 flex-grow、flex-shrink、flex-basis。。

  2. Step 2|只修改本主題的一個責任。

    檔案:files/starter/style.css 定位:在 Computed 展開 flex,分別記錄 flex-grow、flex-shrink、flex-basis。

    要做:執行實驗替 featured item 切換 flex-distribution class,讀取 computed flex shorthand。

    預期:runtime 的 flex 由 0 1 auto 改為包含 grow=1、shrink=0、basis=192px 的三值;人工比較卡片寬度變化。

    證據:runtime before 包含 0 1 auto;after 包含 1 0 與 192px;property=flex

    卡住先查:在 Computed 展開 flex,分別記錄 flex-grow、flex-shrink、flex-basis。

  3. Step 3|重新載入並以證據驗收,不以『看起來差不多』判定完成。

    檔案:files/starter/style.css 定位:在 Computed 展開 flex,分別記錄 flex-grow、flex-shrink、flex-basis。

    要做:重新整理頁面,再逐項比對預期結果與 evidence。

    預期:runtime 的 flex 由 0 1 auto 改為包含 grow=1、shrink=0、basis=192px 的三值;人工比較卡片寬度變化。

    證據:runtime before 包含 0 1 auto;after 包含 1 0 與 192px;property=flex

    卡住先查:在 Computed 展開 flex,分別記錄 flex-grow、flex-shrink、flex-basis。

觀察示範

這個示範只讓你看懂概念,不會替你修改 Starter,也不會自動宣告完成。

flex-grow、shrink、basisruntime fixture · read-only demo
本主題示範畫面:
推薦方案
一般方案

驗收證據

勾選只是學習紀錄;真正完成仍要回到 Starter 的實際結果。

提示 1|方向

依序讀三值:grow、shrink、basis。

提示 2|關鍵片段

推薦卡設定 flex:1 0 12rem,代表可長、不縮、12rem 起算。

提示 3|完整解答與原因

完整解答與原因:grow=1 參與剩餘空間;shrink=0 不參與不足空間縮減;basis=12rem 在 16px 根字級下 computed 為 192px。

完成後進入下一階段,或回到入口選下一個 topic。

開始 Starter →回到主題清單