Figma 重寫 Auto Layout 演算法:六處對齊 CSS Flexbox,設計和開發終於算同一套帳

padding 不再被壓窄、只有 inside stroke 佔位、fill container 改用 border-box——Auto Layout 六處行為向 CSS Flexbox 對齊,設計和開發終於算同一套帳。

Figma auto layout 新版 padding 行為對照圖

Auto Layout 一直想模仿瀏覽器排版,但有幾個邊角行為始終跟 CSS 對不上。這些小差異平常看不太出來,一到交付就現形——工程師拿到設計稿,得自己補一堆 workaround 才能讓做出來的畫面跟畫布長得一樣:用負偏移的外框假裝邊框、手動確認某個 frame 的寬度會不會把 padding 擠掉。這次更新把六個對不齊的地方一次補上,讓 Auto Layout 的行為向 CSS Flexbox 靠攏,七月起對新建立的 frame 預設生效。

對已經天天在用 Figma 的設計師,這屬於那種「底層安靜換掉、但你每天都會踩到」的更新。既有 frame 不會被動到,維持 legacy 版;新開的 frame 自動吃新版;兩版之間可以在 Auto layout 設定裡切換,這個切換窗口開到 2027 年一月。真正的意義落在交付那一端:Dev Mode 複製出來的 code 現在更直接對應 CSS flexbox 屬性,設計和開發第一次是拿同一套排版規則在算帳。

RELEASE NOTES · FIGMA
Design closer to CSS with the updated auto layout option
Small differences between how auto layout and CSS handle layout meant developers had to add workarounds at handoff to make the built version match the canvas. This update closes those gaps.
Figma Release Notes · 2026.07.24
help.figma.com →
這次改了哪些地方 · 六處一次看懂
01
padding 永遠拿得到它要的空間,frame 不再被壓窄
02
只有 inside stroke 算進版面,outside / center 不算
03
stroke 設定只管自己那一層,不再往子層傳染
04
fill container 子層改用 CSS 的 border-box 模型分空間
05
auto gap 不再變負值,塞不下就靠齊起點
06
auto-gap stack 只有一個子層時,改靠起點對齊
01 / 06
padding 一定拿得到它要的空間
frame 不會再為了寬度把 padding 擠掉

以前你可以把一個 frame 左右各設 30px padding(合計 60px),卻硬把 frame 寬度設成 50px,Figma 會照 50px 畫,把 60px 的 padding 硬擠進去。新版裡同一個 frame 不能再比 60px 窄——padding 永遠被完整尊重,甚至會蓋過你為 frame 設定的 max width。如果這個 frame 有 inside stroke、而且 stroke 算進版面,stroke 的寬度也會一起被算進這個最小值。

封面那張對照圖講的就是這件事:左邊 legacy,空間不夠時 padding 直接重疊;右邊 updated,frame 撐開到 60px 把 padding 讓出來。

INSIGHT
這一條的實際影響是,你再也不會交出一張「畫布上看起來擠得剛好、做出來卻爆版」的稿。那種靠壓寬度硬塞的排版,在瀏覽器裡本來就站不住,現在畫布會當場把破綻顯示給你看。
02 / 06
只有 inside stroke 會被算進版面
對齊 CSS 裡 border 與 outline 的分界
Figma auto layout 新版只把 inside stroke 算進版面
Legacy 版所有 stroke 類型都能算進版面計算;新版只有 inside stroke 算,center 和 outside 照畫但不佔位。圖/Figma Help Center

以前 stroke 預設不算進物件尺寸,所以不會去影響父 frame 或旁邊的兄弟元素;為了對上 CSS 渲染邊框的方式,Figma 才給了一個「strokes included / excluded in layout」的設定讓你選。新版直接把 inside stroke 預設算進版面,這樣你的設計出廠就跟 CSS 更相容,省掉額外拉一個 border node 或負偏移外框的 workaround。

至於 outside 和 center stroke,就算你把 frame 設成 included in layout,也不再被算進版面了。它們照樣畫在畫布上,只是不再參與間距、fill 這些版面數學,也不再受 include / exclude 設定影響。Figma 自己給的類比很清楚:inside stroke 像 CSS 的 border,算進版面;center 或 outside stroke 像 outline,不佔位。

INSIGHT
做 design system 的人這一條要留意。你如果習慣用 center stroke 畫 1px 分隔線或 focus ring,升級後它們的視覺還在,但改成不佔位——這正是它們在 CSS 裡本來就該有的行為。
03 / 06
stroke 設定不再往下傳染給子層
每個 frame 的 stroke 各自照自己的規則走

以前父 frame 上的「strokes included」設定會連帶影響底下有 stroke 的子層,讓它們一律顯示,就算這個設定只加在父層。新版裡這個設定只管它被設定的那一層。父層的 stroke 設定不再左右子層怎麼計算 stroke,每個 frame 的 stroke 都獨立照自己的規則走。

實務上的提醒:升級後如果某個巢狀 frame 突然長得不一樣了,直接去檢查那一層自己的 stroke 設定——它已經不再被父層繼承或牽動。

04 / 06
fill container 子層改用 border-box 模型
stroke 粗細不同時,內容區才會對齊

當一個 Auto Layout frame 裡有兩個以上子層都設成 fill container、而它們的 padding 和 inside stroke 寬度又不一樣時,新版改變了每個子層能拿到多少內容區。以前 fill container 的子層會平均佔用可用空間(總長扣掉 padding、gap、stroke),結果 stroke 比較粗的那層,實際內容區會明顯比 stroke 細的那層小,即使兩層技術上一樣大。

新版改成照「內容區」而非「外框尺寸」去分空間,對齊 CSS 的 border-box 模型:stroke 粗的那層會多吃一點寬度,好讓它的內容區跟兄弟對齊。這個新行為也會帶進 prototype,反映你的設計在開發環境裡實際會長什麼樣。

INSIGHT
想讓子層不管 stroke 多粗都精準均分空間,官方給的解法是改用 grid 版面流,用 fr(fractional unit)指定每個 track 的大小。
05 / 06
auto gap 不再變負值、子層不再互相重疊
對應 CSS flexbox 的 space-between

一個 gap 設成 auto 的 Auto Layout stack,會把多出來的空間平均塞在子層之間。以前空間不夠時,auto gap 會變成負值,把子層疊在一起。新版裡 auto gap 永遠不會低於 0:塞不下時,子層會 collapse 到 frame 的起點靠齊,維持間隔為零,對應 CSS flexbox 裡 space-between 的行為。

如果你真的想讓子層刻意重疊,設一個明確的負 gap 值就好——這個一直都支援,而且現在更清楚地表達「這個重疊是我故意設的」,而非靠 auto gap 意外擠出來的副作用。

06 / 06
單一子層改成靠起點對齊
升級後最容易看出差異的一種版面

以前一個 gap 設成 auto 的 frame 裡若只有一個子層,預設會置中。新版裡單一子層會靠左(水平流)或靠上(垂直流)對齊。官方特別點名:auto-gap 又只有一個子層的版面,是升級後最可能長得不一樣的一種,複查檔案時把這種排到最前面看。

遷移 /
升級時間表:現在到 2027 年一月
沒有急迫性,趁窗口慢慢還

好消息是沒有急迫性。Figma 會支援兩版切換到 2027 年一月,既有 frame 你想升級隨時可以。要升級:選一個 frame,在 Auto layout 設定的下拉選單挑版本;或用 Actions 選單搜「Update layout version for selection」或「for page」。任何會造成視覺變化的升級(版面位移、容器改尺寸)都能先預覽再確認,不對再 Cmd / Ctrl + Z 退回。

到 2027 年一月,legacy frame 的版本切換會從一個 toggle 變成一顆「Update」按鈕,那之後新建的 frame 就不能再切回 legacy。Component 可以手動升級後重新發布;instance 上則不能覆寫版本。

升級這件事怎麼安排 · 四個節點
01
既有 frame 不動
維持 legacy 版,你不主動升級它就不會變,先安心
02
新 frame 自動吃新版
七月起新建立的 Auto Layout frame 預設就是新版行為
03
隨時手動切換
下拉選單或 Actions 搜 Update layout version,可先預覽再確認
04
2027 / 01 之後
toggle 變成 Update 鈕,新 frame 不能再退回 legacy
整體觀察 /
這幾條放在一起,對你每天的工作代表什麼
畫布開始拒絕那些在真實環境會壞的排版

把六條擺在一起看,它們指向同一件事:Figma 在把畫布的排版數學,一格一格搬到跟瀏覽器同一套規則上。對純視覺出圖的人,這些改動大多無感;對每天要把稿交給工程、或自己用 Dev Mode 出 code 的人,這是少數幾次「你的畫布會開始擋下那些在真實環境本來就會壞的排版」。

過去設計和開發之間那道「看起來一樣、做起來不一樣」的縫,大半就是被這幾個邊角行為撐開的。現在縫補上了,代價是你得花點時間複查既有檔案裡靠舊行為硬撐的地方——尤其是 padding 擠壓、父子層不同 stroke 設定、粗細不一的 fill container 子層,還有只有一個子層的 auto-gap stack。這筆複查的帳遲早要付,趁 2027 一月前的切換窗口慢慢還,比到期被迫一次全升級輕鬆得多。

KEY POINTS · 重點整理
Auto Layout 更新六處行為向 CSS Flexbox 對齊,七月起對新建 frame 預設生效,既有 frame 維持 legacy 版。
padding 一定拿得到空間,frame 不再被壓窄;只有 inside stroke 算進版面,center / outside 照畫但不佔位。
stroke 設定不再往子層傳染;fill container 子層改用 border-box 模型,stroke 粗細不同時內容區才對齊。
auto gap 永遠不會變負值,塞不下就靠齊起點;auto-gap stack 只有單一子層時改靠起點對齊。
兩版切換窗口開到 2027 年一月,之後 legacy 的 toggle 變成 Update 鈕;Dev Mode 出的 code 更直接對應 flexbox。
FIGMA 全攻略
Auto Layout 越像 CSS,越吃你對版面底層的理解
padding、stroke、fill container、border-box——這次每一條改動都在考你懂不懂 frame 底下實際怎麼算空間。Figma 全攻略從底層邏輯把 Auto Layout、component、variables 一次練透,讓你交付的檔案本身就對得上開發那端,升級到新版也知道每個變化在動什麼。
看課程 →
AI 設計覺醒

訂閱制

AI 設計覺醒|RAR 設計攻略訂閱方案

✦ AI 工具實測與工作流分享

✦ 設計師角度的 Prompt 技巧

✦ 每週精選 AI × 設計新知

了解訂閱方案 →