CSS Box Model 完全圖解:Padding、Margin、Border 的差異、使用時機與設定方法
CSS Box Model 是瀏覽器把每個元素當成矩形盒子來計算尺寸的模型,由內而外分為 Content、Padding、Border、Margin 四層;其中 Padding 與…
Box Model 全解析:Padding、Margin、Border 的差異與設定
CSS Box Model 是瀏覽器把每個元素當成矩形盒子來計算尺寸的模型,由內而外分為 Content、Padding、Border、Margin 四層;其中 Padding 與 Border 會被背景色覆蓋,Margin 不會,而 CSS 預設的 box-sizing 採 content-box,會讓 padding 與 border 額外加在設定寬度之上(依 MDN Web Docs 對盒模型的定義)。掌握「背景色是否延伸」與「是否計入寬度」這兩個判準,就能在 padding 與 margin 之間正確選擇。
重點先看:Padding 會把背景色撐開、Margin 不會;真正讓版面爆掉的元凶是 box-sizing 預設值,先全域套用 border-box 再留白才不會越調越亂。
在 WordPress 頁面編輯器 裡拉一個按鈕、調一段文字的間距,背後其實都是這個盒模型在運作。很多人卡住,真正的原因是分不清兩者到底差在哪、會不會把元素撐大、在 Elementor 或 Divi 裡又要去哪裡調。這篇會把這些問題一次講清楚,並補上多數教學漏掉的決策關鍵:背景色延伸與 box-sizing。
盒模型的四層結構:Content、Padding、Border、Margin
CSS Box Model 是瀏覽器用來計算每個元素佔用空間的規範,由內而外分成 Content、Padding、Border、Margin 四層,每一層都會影響元素最終的尺寸與視覺留白。有了這個前置觀念,padding、margin、border 這三條語法才會串得起來,你也才看得懂為什麼明明只加了 padding,元素卻突然變寬。
Content 是最內層,放的是文字、圖片、影片等實際內容,大小由內容本身決定。往外包覆的是 Padding,再來是 Border,最外層是 Margin。一個重點要記住:Padding 與 Border 會被元素的背景色覆蓋,Margin 不會。這條規則是整篇文章的核心,後面所有的判斷都從這裡長出來。依 MDN 對盒模型的規範定義,在預設的 content-box 模式下,元素實際佔用的寬度會等於 content 加上 padding、border、margin 的總和。
要先講盒模型再講 padding 怎麼寫,原因很實際:很多新手在 網頁設計完整入門指南 都還沒讀完的情況下,就照著教學把 padding 加上去,結果版面整個跑掉,接著開始逐個調 margin 補救,越調越亂。真正的關鍵在於:padding 加進去之後到底算不算進寬度裡,padding 本身從來沒有問題。下表把四層的特性攤開來比,padding 跟 margin 真正的分界,是背景色會不會跟著延伸,「一個在內一個在外」只是表面的位置差。
| 層級 | 由內而外順序 | 背景色是否覆蓋 | 是否計入元素尺寸(content-box 下) |
|---|---|---|---|
| Content | 第 1 層(最內) | 是 | 是(即設定寬度) |
| Padding | 第 2 層 | 是 | 是(額外加在寬度上) |
| Border | 第 3 層 | 是(邊框本身有顏色) | 是(額外加在寬度上) |
| Margin | 第 4 層(最外) | 否(透明) | 否(推開外部空間,不算入元素寬度) |
Padding:內容與邊框之間的帶色緩衝
Padding 是元素邊框以內、內容以外的空間,作用是拉開內容與邊框的距離。它最關鍵的特性是會跟著元素的背景色一起延伸,所以最適合用在需要帶色塊的留白、以及放大點擊範圍這兩種情境。簡單說,只要你想留白的地方還要看得到背景色,就用 padding。
舉個最常見的例子:你在 Divi 主題架站全攻略 裡做了一個卡片區塊,卡片有底色,文字卻貼著邊緣,讀起來很擠。這時候你要的是讓文字跟邊框之間多一點呼吸空間,而且這塊空間要跟卡片一樣是底色,並不需要把卡片整個放大。padding 做的就是這件事,它會把背景色連同留白一起撐開,視覺上變得更乾淨,也更容易分辨不同區塊。
Padding 還有一個被低估的用途:擴大按鈕的點擊範圍。Apple 在其 Human Interface Guidelines 裡建議觸控目標至少要有 44pt 左右的大小(來源:Apple HIG 官方文件),對手機使用者來說,按鈕大一點就代表更容易點中。很多站長只把按鈕文字放大,卻忘了加 padding,結果文字變大、可點擊的範圍卻沒跟著變大,這在 Landing Page 銷售頁製作教學 裡會直接傷害轉換率。設定 padding 的同時,記得也檢查 CTA 行動呼籲按鈕設計指南 裡提到的點擊熱區原則。
語法上,padding 支援一到四個值,也能分上下左右單獨設定。下列寫法在 CSS 基礎語法入門教學 裡都視為標準用法。想把這類重複性的 CSS 交給工具產出,可以參考 Codex AI 程式助理 的輔助寫法。
.box{ padding: 10px; } /* 四邊皆 10px */
.box{ padding-top: 10px; } /* 僅上方 */
.box{ padding: 10px 20px; } /* 上下 10px、左右 20px */
.box{ padding: 10px 20px 30px 40px; } /* 上、右、下、左 */
padding 看起來像萬用留白工具,卻有一個會咬人的特性:在某些情況下會讓元素變寬。問題的根源出在 box-sizing 這個設定,後面會單獨一節拆開講。先記住一個判斷方向:留白之後若整個版面位移、寬度爆掉,第一個該檢查的是有沒有設 box-sizing: border-box,padding 的數值先放一邊。
Margin:邊框以外的透明間隔
Margin 是元素邊框以外的空間,作用是推開其他元素。它跟 padding 最大的差別在於:margin 區域沒有元素的背景色,是透明的。所以當你只想要純粹的間隔、不想要出現色塊時,就該用 margin,例如段落之間、區塊與區塊之間的呼吸空間。
很多人會把 margin 想成「往外推」,這個直覺沒錯,但不夠精確。更準確的說法是:margin 推開的是周圍的元素,自己的背景範圍不會跟著往外擴張。當你給一個區塊 margin,它的背景色不會跟著延伸到外面,所以如果母元素有底色、子區塊用 margin 推開彼此,你會看到底色從子區塊的縫隙透出來,這正是你要的效果。這在 網頁版面設計與排版攻略 裡是很常用的分隔手法。
舉個實際場景:一個 Hero 區塊裡有文字和圖片兩個子區塊,母區塊有底色。你想讓文字和圖片之間有間距,但又不想讓這塊間距變成子區塊的顏色。這時候在兩個子區塊上用 margin 來拉開距離,間距會透出母區塊的底色,視覺上就會乾淨一致。這個判斷在 網頁設計必備關鍵元素 的留白章節也能找到對應原則。
Margin 還有一個經典用法是水平置中。把固定寬度元素的左右 margin 設成 auto,就能讓它在水準方向置中,這是 CSS 早期最常用的置中手法(來源:MDN margin 語法說明)。這個方法現在還能用,只是現代版面多半改用 RWD 響應式網頁設計實戰 裡的 Flex 或 Grid 來對齊,程式碼更乾淨,也更不容易在縮放時跑位。它談不上過時,只是有了更合適的工具。
Margin 有一個會讓新手嚇一跳的行為:相鄰區塊的垂直 margin 會發生 margin collapse(重疊)。兩個上下相鄰的區塊,上面的 margin-bottom 和下面的 margin-top 不會相加,而是取較大的那個值(來源:MDN margin collapse 定義)。這就是為什麼你有時候明明設了兩邊各 20px,間距卻只有 20px 而不是 40px。這個現象只發生在垂直方向、且只發生在一般區塊元素之間,Flex 與 Grid 的子項目不會觸發。
Margin collapse 的觸發條件與破解方法
把 collapse 想成只會在垂直方向、且只會在「完全相鄰」成立時發生,會比死記結論更實用。它出現在三類間距路徑上:母元素與第一個或最後一個子元素之間、相鄰的兄弟區塊之間、以及空區塊自己的 margin-top 與 margin-bottom 互相吞掉。這三類的共同點是,上下兩端的 margin 之間沒有任何實體東西擋著,所以瀏覽器直接取較大值。反過來說,只要在這條路徑上插入任何會破壞「完全相鄰」的東西,實體間隔、新的格式化脈絡、或不同的排版模型,重疊就會失效。
理解了觸發條件,破解手段其實是同一件事的不同變體。最直接的是在母元素加上 padding-top 或 border-top,憑空多出一層實體間隔。結構性更乾淨的作法是把母元素設成 Flex 或 Grid 容器,子項目一旦進入這兩種排版脈絡,垂直 margin 就會照實相加;或讓母元素觸發新的區塊格式化脈絡(block formatting context),例如把 overflow 設成 hidden 或 auto、或套用 display:flow-root。這幾種手段的共通原理都是「在間距路徑上截斷相鄰性」,選哪一種只看哪個對你的版型副作用最小。
| 情境 | 會不會 collapse | 原因 |
|---|---|---|
| 兩個相鄰的 div,垂直 margin | 會 | 區塊元素垂直相鄰 |
| Flex 容器的兩個子項目 | 不會 | Flex 子項目不在一般區塊脈絡 |
| Grid 容器的兩個子項目 | 不會 | Grid 子項目不在一般區塊脈絡 |
| 母元素 overflow:hidden 包住子元素 | 不會 | 母元素建立了新格式化脈絡 |
| 兩個區塊之間有 padding 或 border | 不會 | 間距路徑被實體間隔截斷 |
| 兩個 inline-block 元素的水平 margin | 不會 | 水平方向本來就不重疊 |
實務上最省心的做法是排版時就採用單向 margin 原則,例如只設 margin-bottom、不設 margin-top,讓所有間距往同一個方向累積,從源頭避開重疊判斷。碰到需要精準控制的版型,直接把容器切成 Flex 或 Grid 是最穩的選擇,因為這兩種脈絡從結構上就關掉了 collapse,省下逐個排查的時間。
.box{ margin: 10px; }
.box{ margin: 0 auto; } /* 固定寬度元素水平置中 */
.box{ margin-top: 10px; }
.box{ margin-left: -10px; } /* 負值可讓元素往外溢出 */
順帶一提,margin 可以吃負值,這在特殊排版時很好用,例如讓一個區塊稍微往左溢出母區塊、或重疊在另一個區塊上。不過這屬於進階技巧,新手在 網頁設計自學路線圖 的前期階段,建議先把正值搞熟,再碰負值,才不會一個不小心把整個版面拉得亂七八糟。
Border:夾在留白與間距之間的框線
Border 是包在 padding 外側的邊框線,用來劃分元素主體與外部空間。它的位置剛好夾在 padding 與 margin 之間,寬度會直接計入元素佔位,所以通常設成 1 到 5px 的細線就好,設太粗容易讓版面位移。
Border 的標準語法是三個值一組:粗細、樣式、顏色。最常見的組合是 1px solid 加一個色碼,這在 排版設計與字體行距技巧 裡的卡片設計幾乎都看得到。樣式除了 solid 實線,還有 dashed 虛線、dotted 點線等選擇,也能搭配 border-radius 做圓角,讓邊框看起來柔和一點。
.box{ border: 1px solid #000; } /* 粗細 樣式 顏色 */
.box{ border: 2px dashed #e0e0e0; } /* 虛線 */
.box{ border-radius: 8px; } /* 圓角 */
.box{ border-bottom: 2px solid #ff6600; } /* 只設單邊 */
Border 常見用途落在卡片外框、區隔同類內容、步驟區塊的分隔線這幾種。它的好處是視覺界線明確,缺點是每加一條線就多一份視覺負擔,所以在 自架網站常見設計錯誤 裡,過度使用邊框被列為新手容易犯的毛病。實務上的取捨是:能用間距分開的就不用線,真的需要框線時也只設 1px、顏色壓淡,避免邊框喧賓奪主。
要注意一個地雷:border 的寬度在預設 content-box 下會額外加進元素尺寸。一個設成 200px 寬的元素,如果加上左右各 2px 的 border,實際寬度會變成 204px,這在排版要求精準的時候會出問題。解法一樣是 box-sizing: border-box,這也是為什麼後面會特別拉一節來談。
三者差別比較:依決策鏈挑選而非平行羅列
判斷該用哪一個,依序看兩件事:要不要帶背景色(要就用 padding,不要就用 margin),以及要不要畫出一條線(要就用 border)。三者構成的是一條由內而外的決策鏈,平行挑選反而會選錯:先問留白要不要色塊決定 padding 還是 margin,再問要不要一條明確界線決定要不要 border,至於要不要計入寬度則交給 box-sizing 處理。這也是 CSS 留白設計原則 的核心,把判準想清楚,語法只是照著填。
| 比較維度 | Padding(內距) | Margin(外距) | Border(邊框) |
|---|---|---|---|
| 位置 | Content 與 Border 之間 | Border 之外(最外層) | Padding 與 Margin 之間 |
| 是否含背景色 | 是,背景色延伸至此 | 否,透明 | 邊框本身有顏色 |
| 是否計入尺寸(content-box) | 是,額外加在寬度上 | 否 | 是,額外加在寬度上 |
| 典型用途 | 內部留白、放大點擊範圍 | 段落間距、區塊間隔 | 卡片外框、視覺分隔 |
| 可否為負值 | 否 | 是 | 否 |
| 會不會重疊 | 不會 | 垂直方向會(margin collapse) | 不會 |
九成以上的留白選擇都被「要不要色塊」這第一條規則解決了。真正會讓人猶豫的,是 padding 會不會撐大元素,而這正好是下一節的主題。
box-sizing:padding 撐爆版面的真正成因
明明只加了 padding,元素卻變寬了,問題出在 CSS 預設的 box-sizing 採 content-box。在這個模式下,padding 與 border 會額外加在你設定的寬度之上。把 box-sizing 設成 border-box,padding 與 border 就會被算進設定寬度內,元素不再越調越寬。
這是新手最常踩的排版地雷,也是 padding 看起來會撐大元素的真正原因。你設了一個 300px 寬的卡片,加了左右各 20px 的 padding,content-box 會把實際寬度算成 340px,於是整排卡片就爆掉了。要為版面位移負責的是那個預設值,padding 本身沒做錯什麼。MDN 對 box-sizing 的定義很清楚:content-box 把 padding 與 border 算在設定寬度之外,border-box 則算在裡面(來源:MDN box-sizing 規範)。
| box-sizing 值 | 實際寬度計算(設定寬度 300px、padding 左右各 20px、border 左右各 2px) | 結果 |
|---|---|---|
| content-box(預設) | 300 + 40 + 4 | 344px,元素變寬 |
| border-box | 300(padding 與 border 包含在內) | 300px,寬度不變 |
解法很簡單:在專案全域套用 box-sizing: border-box。多數現代主題與 reset CSS 已經預設幫你套好了,例如你在 Astra 主題免費版教學 或 Bricks Builder 視覺化編輯器教學 開一個新專案,通常不需要自己加。但如果你是純手刻、或是用了一個較舊的主題,記得手動補上這段:
*, *::before, *::after {
box-sizing: border-box;
}
box-sizing: border-box 對 RWD 的影響也不小。手機螢幕窄,元素寬度常常是百分比,如果 padding 還會額外墊寬,排版在不同裝置上會很難預測。把它設成 border-box 之後,你設定多少寬度就是多少寬度,padding 與 border 自動往內壓,這也是 網頁排版設計範例 裡幾乎都會套用的前置設定。
如果你只能記住整篇的一句話,就記這句:先處理 box-sizing,再談留白。順序對了,後面的一切才會順。
box-sizing 的邊界情況:百分比寬度與 max-width
box-sizing 解決了多數尺寸問題,但有兩種邊界情況仍會讓人困惑。第一種是寬度用百分比時:border-box 下,一個設成 width: 50% 加 padding 的欄位,padding 會從那 50% 裡面往內壓縮,content 變窄但整體仍佔一半,這正是 RWD 多欄排版敢放心設百分比的原因;換成 content-box,padding 會疊加在 50% 之外,總寬度可能超過容器,導致欄位掉到下一行。第二種是 max-width 的互動:當元素同時有 width: 100% 與 max-width: 600px 時,border-box 確保 padding 不會把元素推超過 600px,content-box 則可能讓實際寬度突破上限。
判斷原則很簡單:只要版面用到百分比寬度或上限寬度,border-box 幾乎是必選,否則你會花大量時間反推 padding 到底吃了多少空間。多數 reset CSS 與現代框架的預設值都把全域 border-box 當作標準,這個共識背後正是來自上述邊界情況的痛苦經驗。
建立留白節奏:用間距系統取代憑感覺
單獨看 padding 與 margin 都不難,難的是把它們組合成一致的節奏。業界通用的做法是訂一套間距系統(spacing scale),讓所有留白都從同一組數字挑選,而不是每次調版面都重新決定。這套系統通常以 4 或 8 為基底倍數,往上遞增出 4、8、12、16、24、32、48、64、96 這類刻度,少數專案會用更密的 4px 基底。
| 刻度名稱 | 數值 | 典型用途 |
|---|---|---|
| xs | 4px | 圖示與文字之間的微距 |
| sm | 8px | 表單欄位內的細微留白 |
| md | 16px | 卡片內部的基本內距 |
| lg | 24px | 段落之間的垂直間距 |
| xl | 32px | 區塊與區塊之間 |
| 2xl | 48px | 主要 section 之間的呼吸 |
| 3xl | 64px | 首屏與第二屏的區隔 |
| 4xl | 96px | 大型章節斷點 |
用刻度的關鍵在於一致性,數字本身可以微調。一旦你決定卡片內距走 md、區塊間距走 xl,整個網站的留白就會自然帶出統一的視覺語言,讀者不會察覺數學規律,只會覺得版面乾淨、節奏穩定。反過來說,若每個區塊的 padding 都是隨機數字,再講究的配色與字體也救不回鬆散的觀感。
把間距系統落實到 WordPress 與 CSS
在純 CSS 裡,最常見的做法是把刻度寫成自訂屬性或預處理器變數,需要留白時引用變數、避免逐處填寫固定數字。這套寫法在 SASS SCSS 預處理器教學 裡有完整說明,好處是將來想整體放大或縮小留白,只要改一處變數就能全站生效。
:root {
--space-sm: 8px;
--space-md: 16px;
--space-lg: 24px;
--space-xl: 32px;
}
.card { padding: var(--space-md); }
.section + .section { margin-top: var(--space-xl); }
在 WordPress 生態裡,Gutenberg 的區塊編輯器本身就內建一套以 4px 為基底的間距刻度,可透過主題支援(theme.json)定義自訂間距 preset,讓你在區塊設定面板直接挑選刻度名稱,而不必手填 px。多數現代區塊主題如 Blocksy、Astra 也都採用類似的間距選單,這也是 RWD 響應式網頁設計實戰 在談論一致排版時的前提。
間距系統的決策矩陣:何時收緊、何時放鬆
同一套刻度在不同情境會需要微調,把「裝置」與「內容密度」兩個維度交叉,就能快速判斷該往哪個方向調。行動裝置因為螢幕窄,過大的留白會讓一頁只能容納極少內容,需要適度收緊;桌面端空間充裕,可以放鬆到接近設計稿的原始數值。
| 情境 | 建議刻度 | 調整方向 |
|---|---|---|
| 桌面端,內容稀疏(如 Landing Page) | xl 至 3xl | 放鬆,強調呼吸感 |
| 桌面端,內容密集(如表格、列表) | md 至 lg | 收緊,提升掃讀效率 |
| 行動端,內容稀疏 | lg | 適度收緊,避免單頁資訊太少 |
| 行動端,內容密集 | sm 至 md | 大幅收緊,但要保留可點擊範圍 |
| 按鈕與互動元件(任一裝置) | 不低於 md | 優先滿足觸控目標下限 |
這張表的核心訊息是:間距本身是一組會隨裝置與內容伸縮的關係,固定下來的只是基底刻度。只要基底刻度一致,調整時就是整組往大或往小搬動,視覺語言依然統一。
Divi 與 Elementor 裡的 Padding 與 Margin 設定
不會寫 CSS 的人,在主流 WordPress 編輯器裡一樣能調 padding 與 margin。Divi 在元素的 Design 分頁下的 Spacing 區塊可分別調整 Padding 與 Margin,支援上下、左右同步連動;Elementor 則在進階頁面的邊界(Margin)與邊框間距(Padding)調整,能一鍵同步四邊,但無法上下左右分開連動。
Divi 的位置在元素設定的 Design 分頁下方 Spacing,點開會看到 Padding 和 Margin 兩組欄位,上下左右各一個輸入框。若希望上下或左右數值同步,點兩個輸入框中間的連結圖示即可讓它們連動,改一邊另一邊跟著變,不用設兩次;單位則支援 px、%、em、rem,搭配 Divi 手機版排序調整 可針對不同裝置分別設定。這個設計比 WordPress 頁面編輯器比較 裡多數對手更靈活,細節可參考 Divi 5 新介面解析。
Elementor 的位置稍微不一樣。選好元素後,點進階(Advanced)分頁,會看到邊界(Margin)與邊框間距(Padding)兩個區塊,各有一個四邊的輸入介面。Elementor 的同步按鈕是四邊一起連動,點下去之後上下左右會設成同一個值,想分開就只能取消連動再手動填。就彈性來說略低於 Divi,但對多數新手已經夠用。更完整的操作可看 Elementor Pro 購買與功能指南 與 Elementor 頁首頁尾設計教學。
| 編輯器 | 設定路徑 | 同步方式 | 彈性 |
|---|---|---|---|
| Divi | Design → Spacing | 可同步上下、或同步左右 | 較高 |
| Elementor | 進階 → 邊界 / 邊框間距 | 四邊一起同步 | 中 |
| Gutenberg 原生 | 區塊設定 → 尺寸 / 間距(視區塊而定) | 視區塊支援 | 較低,可搭配 Gutenberg 區塊編輯器外掛 補強 |
不管用哪個編輯器,有一個原則都適用:先決定整體留白的節奏,再回頭微調單一元素。很多人一進編輯器就開始逐個元素調 margin,調到最後每個間距都不一樣,版面反而亂掉。比較好的做法是先定好一套間距規範,例如段落間距固定 24px、區塊間距 48px,再讓所有元素對齊這套規範,這也是 Bento Grid 網格排版設計 背後的邏輯。同一套留白節奏套用到內容產出,也是 文章排版入門指南:服侍讀者的眼球,提升文章完讀率 在強調的事。換個角度想,留白靠的是規矩,憑感覺往往調不穩。
如果你是用 WordPress 架站新手教學 裡介紹的佈景主題直接架站,多半也會在主題選項裡找到全域留白設定,那會比逐個元素調更有效率。設定完之後,別忘了用 網站速度優化全攻略 的方式檢查載入表現,過多的留白與框線有時也會影響首屏的視覺穩定度。
實戰注意事項:從留白到效能的串聯
把 padding、margin、border 當成同一套盒模型的延伸,還會牽動其他幾個面向。其中一個是按鈕的點擊範圍:padding 能擴大觸控區域,這在 Elementor Hero 區塊輪播教學 這類強調轉換的頁面尤其重要。Apple HIG 建議觸控目標約 44pt(來源:Apple Human Interface Guidelines),換算成 padding 通常代表按鈕的上下內距至少 10 到 12px。設太小手指點不準,設太大又會佔太多版面,這中間需要取捨。
另一個面向是視覺穩定度與 Core Web Vitals。元素的留白若會導致載入時跳動,會直接影響 Core Web Vitals SEO 指標優化 裡的 CLS(累計版面位移)。這跟 Lazy Loading 延遲載入指南 的圖片預留空間是同一類問題:先給元素固定的尺寸與 padding,內容載入完成後才不會把下面的東西往下擠。Core Web Vitals 對體驗與轉換的影響有實際案例佐證,例如 Vodafone 在 LCP 改善 31% 後銷售提升 8%,The Economic Times 通過 Core Web Vitals 門檻後跳出率改善 43%(來源:〈web.dev (Google) - Why does speed matter?〉〈https://web.dev/articles/why-speed-matters〉〈2026〉)。
以這類使用舊主題、沒有全域套用 border-box 的內容站為例,常見的狀況是文章頁一載入,廣告或圖片區塊因為 padding 與 border 額外墊寬而把下方內容往下推,導致 CLS 落在約 0.15 到 0.25 之間,已經高於 Google 建議的 0.1 門檻。依這類站的典型表現幅度,把 box-sizing 改成 border-box、並為圖片與嵌入元件預留固定寬高之後,CLS 通常會降到約 0.05 到 0.1 之間,版面跳動的回報也會明顯減少。要特別留意的是,CLS 的改善幅度會被廣告版位數量、字型載入方式、第三方腳本多寡等其他變數干掉一部分,盒模型只是其中一條成因,單靠它不一定能把分數壓到綠色。實務上值得採取的決策是:先把 border-box 設成全站預設、再針對會跳動的區塊補上固定尺寸,這兩步幾乎零成本卻能解掉大半位移問題,剩下的再交給廣告與字型的預留空間處理。
配色與邊框的搭配是另一個容易被忽略的環節。Border 的顏色要跟整體配色計畫一致,否則一條突兀的線會破壞視覺。這部分可以參考 網頁配色計畫實戰指南 與 色彩學與配色技巧指南,先把主色與輔色定下來,border 的顏色自然有依據,不用每次都憑感覺。字體與行距也跟留白有關:Padding 給的是區塊與文字之間的距離,文字本身的行距是 line-height 的事,兩者不要混為一談,留白負責撐出呼吸感、行高負責讓單行文字好讀,分工清楚才不會互相打架。
版型選擇也會改變留白需求。一頁式網頁要靠 margin 把每個 section 拉開;作品集常用 border 做卡片;品牌官網則傾向用 padding 維持大面積的乾淨感(可對照 一頁式網頁設計攻略、作品集網站設計指南、品牌官網設計全攻略)。先確定版型,再決定留白策略,才不會白忙一場。當版面穩定下來,下一步往往是回頭分析訪客行為,這時 RFM 分析介紹 能幫你把留白調整的效益對應到分群結果上。
工具與資源:把留白觀念落進工作流程
觀念落實需要工具輔助,重點是把規範固化下來,避免每次都從頭憑感覺重調。設計階段,Figma 的網格系統是規劃留白的好工具,在 Figma 網格系統與響應式排版 裡可以設定欄間距與邊界,這些數值會直接對應到後來的 padding 與 margin;要做好跨裝置留白,Figma 響應式設計教學 裡的斷點觀念也要一起看,才知道手機上要把哪個 padding 收緊。架站階段,選對編輯器會省很多事:Divi 陣營的 Divi 標題設計技巧、必裝 Divi 外掛推薦 能補強留白細節,Elementor 陣營有 Elementor 外掛推薦清單,Astra 使用者可看 Astra Pro 主題完整教學 了解主題層級的全域留白設定。
效能補強方面,CDN 網站加速原理與服務、快取 Cache 設定與清除、網站速度慢的診斷與解法、圖片壓縮工具實測推薦 是一組配套,留白規劃得當加上這些優化,版面的視覺穩定度才撐得起來。對想長期經營品牌的人,SASS SCSS 預處理器教學 把留白寫成變數、跨專案重複使用,會讓這套判準跟著你走;越早固定下來,後面重做的次數就越少。
盒模型除錯清單:版面跑掉時依序排查
當版面突然位移、寬度爆掉或間距不如預期,依照固定順序排查會比漫無目的地亂調快很多。這份清單把前面幾節的判準收斂成可操作的檢查步驟,遇到問題時由上往下檢查,多數狀況都能在第三步以前定位。
- 檢查 box-sizing 是否全域設成 border-box,沒有就先補上
*, *::before, *::after { box-sizing: border-box; }。 - 打開瀏覽器開發者工具,點選跑掉的元素,在 Computed 面板看它的 content、padding、border、margin 四層實際數值,確認哪一層超出預期。
- 核對寬度單位。如果是百分比寬度加 padding,確認是不是 content-box 殘留造成的溢出。
- 檢查垂直間距是不是被 margin collapse 吃掉,特別是母元素包住第一個子元素、或兩個相鄰區塊的情況。
- 確認負值 margin 沒有把鄰近元素拉偏,負值常見於進階排版,也常是位移的隱形元兇。
- 檢查 Flex 或 Grid 容器是否誤把 gap 與 margin 同時使用,造成間距重複累加。
- 在行動裝置檢視模式下重新看一次,確認縮放後的留白節奏沒有失衡。
常見留白反模式與修正
| 反模式 | 症狀 | 修正方向 |
|---|---|---|
| 用 margin 撐卡片底色 | 底色沒有延伸到留白區,出現透明縫隙 | 改用 padding,讓背景色跟著延伸 |
| 忘記設 border-box | 加 padding 後整排卡片寬度爆掉 | 全域套用 box-sizing: border-box |
| 逐個元素憑感覺調 margin | 間距數字不一致,版面鬆散 | 改用間距系統刻度,全部對齊 |
| 用 border 當間距 | 每條線都成為視覺負擔,畫面雜亂 | 能用間距分開就不用線,border 留給真正需要的界線 |
| 按鈕文字放大卻沒加 padding | 觸控範圍沒變大,手機使用者點不準 | 同步加大 padding,讓點擊熱區符合下限 |
把這張表當成除錯時的對照表,症狀對得上就直接套用修正方向,能省下大量試錯時間。多數版面問題的重複性很高,記住這幾種反模式,往後遇到類似狀況幾乎都能一眼辨識。
Padding、Margin、Border 常見問題
這裡集中回答實作時容易卡住的問題,只收錄正文沒有直接給答案、或需要快速對照數字的情境。
margin auto 為什麼能置中?現在還推薦用嗎?
把固定寬度元素的左右 margin 設成 auto,瀏覽器會自動把剩餘空間平均分配,達到水平置中。它仍然可用,只是現代版面多半改用 Flex 或 Grid 對齊,語法更直覺。
Elementor 的邊界和邊框間距對應 padding 還是 margin?
Elementor 進階分頁裡的「邊界」是 margin,「邊框間距」是 padding。前者控制元素之間的距離,後者控制內容與邊框的距離,兩者都不需寫程式。
border 要設多粗才不會影響排版?
通常設成 1 到 5px 的細線就夠了。border 的寬度會計入元素尺寸,設太粗容易讓版面位移,搭配 box-sizing: border-box 可以避免這個問題。
padding 上下左右要怎麼分開設定?
用 padding-top / right / bottom / left 分別指定,或用一個到四個值的簡寫:四個值依序是上、右、下、左。Divi 與 Elementor 也都在介面提供獨立的四邊輸入框。
為什麼設了 margin 卻沒有間距?
最常見的原因是 margin collapse。當兩個區塊在垂直方向相鄰,上下 margin 不會相加,而是取較大值。另一個原因是母元素與子元素之間的 margin 被母元素的邊界吞噬,這時可在母元素加 padding 或 border、或讓母元素成為 Flex 與 Grid 容器來排除。
padding 可以設成負值嗎?
padding 不接受負值,寫成負值會被瀏覽器忽略。需要讓元素往內收縮或往外溢出時,應改用負值 margin,負值 margin 在特殊排版可以讓元素重疊或跨越母區塊。
結語:把盒模型內化成直覺
Padding、Margin、Border 看起來是三個獨立的屬性,其實是同一個盒模型由內而外的三層空間。只要抓住背景色是否延伸、以及 box-sizing 是否把 border 與 padding 算進寬度這兩個判準,你就能在多數情境下正確選擇,而不必死背語法。真正會讓版面爆掉的,常常是那個還沒設成 border-box 的 box-sizing,padding 本身一向不是元凶。
把這套觀念套進你正在做的任何 WordPress 專案,先處理 box-sizing、再決定留白節奏,排版就會穩下來。盒模型不難,難的是把它內化成直覺,而這只要多調幾次版面就會發生。