【CSS 教學】什麼時候該使用 margin 、padding?前端都該要懂的盒模型!

更新 發佈閱讀 5 分鐘

說到網頁、前端最基礎、面試也最應該要準備的問題就是:到底什麼是所謂的 CSS Box Model(盒模型)呢?

在我初學網頁開發的時候曾抱有一種心態,那就是:「不論是什麼作法,能動就是好辦法。」

然而這個想法到了要建置 RWD 網站的時候可讓我吃了不少悶虧,尤其是在 CSS Box Model 這一塊。

對於前端初學者來說,在切版時會出現很多規則、不規則的網頁區塊,這時候我們會嘗試用各種相對定位、絕對定位、margin 或是 padding 的方式來進行網頁區塊的推擠。

然而沒有進行良好的推擠時,很有可能會讓使用者縮放網頁大小時,而產生不良的破版效果。

會有這樣的問題在於:你可能對於 CSS Box Model 很不熟!


➤ CSS Box Model 到底是什麼?



CSS Box Model 是針對每一個 HTML 元素在網頁上所佔空間計算的一種模型,其中會影響到 HTML 元素的空間要素,從外至內包含:margin、border、padding 及元素主要內容:

raw-image

這裡針對每個 Box Model 中的要素來進行簡單的介紹:

  • Margin:與外層元素的間距。
  • Border:元素的邊界。
  • Padding:元素邊界至主要內容的間距。

Box Model 中的要素,會影響到整個元素的大小,舉例來說:有一個 font-size 為 50px 的 h1 標籤,目前上下各有 25px 的 padding,請問現在 h1 的高度是 50px 還是 100px 呢?

我相信你應該知道答案是後者了,只要是 Box Model 中包含的要素,都會直接影響到元素本身的大小。


➤ 切版好幫手:box-sizing


然而另外一個問題又來了,如果我們網頁元素會一直隨著 Box Model 中的 margin、border、padding 改變的話,我要怎麼很精準的控制網頁元素的大小呢?

這時候我們可以使用一 CSS 個語法:

raw-image

所有盒模型的內的元素會以我們定義的 width 作為盒模型的大小,一旦元素中會有需要使用任何空間上的推擠,盒模型依然會以我們定義的 width 大小為準。

舉例來說:

透過上方的程式碼,你會發現不論內層元素怎麼推擠,應用了 box-sizing: border-box; 的所有元素都不會因為其他空間的推擠導致整體大小大於 300px。


➤ 到底什麼時候用 margin & padding ?


最後一個只要是身為開發者,都會曾感到困惑的一個問題:到底什麼時候用 padding?什麼時候用 margin 呢?

其實我們可以在一個我們想要開發的網頁元素上,以「功能性」為單位,套上 Box Model 思考看看,這一個功能的邊界是在哪裡?

如果是邊界(border)以外的地方,就會使用 margin 來創造「元件與元件」之間的距離,這一點可會在使用框架時更顯而易見。

因為我們不能確定當我們引入該元件後,此元件與其他元件的間距會是多少,所以都會在引入元件後,再把間距(maring)加上去,舉例來說:


raw-image

紅色箭頭的地方我們就會使用 margin 來推擠出功能區塊語區塊間的距離(通常會是上下的地方,橫向的部分為了避免破版使用 Flex box 來排列會更合適),也就是我們常講的外距了。

讓我們來看看另外一個例子:


raw-image



藍色箭頭的地方是屬於邊界(border)以內的距離所以我們會向內使用 padding 來推擠出內距,以平面設計的概念來說,就有點像是創造出血線的感覺。

對於初學者來說,確實要判斷何時使用 margin 與 padding,確實需要花一段時間累積。

如果想要加快自己對於網頁切版的概念的話,其實可以試著做以下練習:

  • 找一個你喜歡的網站
  • 按右鍵「檢查」進到瀏覽器中的開發者工具
  • 觀察其他開發者是怎麼進行頁面的排版

如果是有想要求職的朋友,也可以嘗試自己撰寫一篇關於 Box Model 的文章或是筆記,這個概念可以說是前端非常重要,也是面試常常會出現的考題,過自己撰寫、練習過一遍,非常有助於自己釐清不懂的地方。

如果你很疑惑,自己為什麼無法正確控制 HTML 元素的寬高,你還可以參考:


希望今天的文章有幫助到正在閱讀的你,如果你喜歡我的文章的話,可以留下你的愛心或是收藏我的文章,也或者可以點選「贊助」,你的一杯咖啡絕對是我持續寫下去的動力!或是透過拍拍手,用你小小的行動支持我的創作!

我是Vivian,我們下次見。


關於我:

2019年從英文系畢業,2021下定決心開啟轉職工程師的新生活,相信不斷學習會有成長的一天。

|Instagram: Vivian Yeh|vivian_enlife

|聯絡我:vivian.enlife@gmail.com

留言
avatar-img
留言分享你的想法!
avatar-img
Vivian Yeh - 跨領域轉職的軟體工程師
457會員
103內容數
為了追求可以窩在座位上、可以心無旁騖思考問題、座位可以亂七八糟沒關係、不需要到處哈腰點頭跑客戶,不用腳踩十公分、連妝都可以不用化的職場人生,文組少女毅然決然踏上RD的養成日常。
2023/06/07
說到 HTML 元素的換行效果,在前端有滿多種實作方式的最常見的方式是使用 <br /> 這個 HTML 元素來進行換行 ⋯⋯
Thumbnail
2023/06/07
說到 HTML 元素的換行效果,在前端有滿多種實作方式的最常見的方式是使用 <br /> 這個 HTML 元素來進行換行 ⋯⋯
Thumbnail
2022/04/28
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
2022/04/28
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
2022/03/23
相信透過之前的介紹,大家對於 CSS 選擇器(CSS selector)已經不陌生了,今天我們要來聊聊兩個在實務上非常好用的偽類(pseudo class )語法,他們分別是 :nth-child() 與 :nth-of-type(),在了解這兩個語法之前,我們首先要先來聊聊什麼是「偽類」呢?
Thumbnail
2022/03/23
相信透過之前的介紹,大家對於 CSS 選擇器(CSS selector)已經不陌生了,今天我們要來聊聊兩個在實務上非常好用的偽類(pseudo class )語法,他們分別是 :nth-child() 與 :nth-of-type(),在了解這兩個語法之前,我們首先要先來聊聊什麼是「偽類」呢?
Thumbnail
看更多
你可能也想看
Thumbnail
「沒有醜女人,只有懶女人。」但我已經是個成熟的大人了,偷懶和漂亮我全都要!!推薦幾款我的保養跟美妝愛用,讓你躺著就把美麗掙了! 雙11在蝦皮爆買了一波,來開箱分享我的懶人系保養及美妝品。趁雙12蝦皮購物一起用優惠囤好物!文末還有「蝦皮分潤計畫」讓你邊花錢邊賺零用錢!
Thumbnail
「沒有醜女人,只有懶女人。」但我已經是個成熟的大人了,偷懶和漂亮我全都要!!推薦幾款我的保養跟美妝愛用,讓你躺著就把美麗掙了! 雙11在蝦皮爆買了一波,來開箱分享我的懶人系保養及美妝品。趁雙12蝦皮購物一起用優惠囤好物!文末還有「蝦皮分潤計畫」讓你邊花錢邊賺零用錢!
Thumbnail
嗨~各位不倒嗡,我是嗡嗡嗡的蜂聲 這個月點詩機主題是「購物清單」,想跟大家聊聊「慾望」這件事。 或許你點開這篇文章的時候,剛好在你心裡閃過類似的念頭 「我好想買那個喔。」 「這真的有必要嗎?」 「我是不是又開始亂花錢了?」 放心,我完全懂。 因為我也是在理性與慾望之間跳恰恰
Thumbnail
嗨~各位不倒嗡,我是嗡嗡嗡的蜂聲 這個月點詩機主題是「購物清單」,想跟大家聊聊「慾望」這件事。 或許你點開這篇文章的時候,剛好在你心裡閃過類似的念頭 「我好想買那個喔。」 「這真的有必要嗎?」 「我是不是又開始亂花錢了?」 放心,我完全懂。 因為我也是在理性與慾望之間跳恰恰
Thumbnail
大家都知道要補充膠原蛋白,但步入中年後的我,肌膚的變化不只是「流失變快」,連狀態也開始慢慢改變。 後來才明白,原來膠原蛋白的補充不只要「吃對」,更要「吃對時間」。 就像肌膚保養會分成早晚程序,膠原的補充其實也需要「分時」進行,才能更貼近需求,效果也更好。 BEAUTY CLUB 讓我養成了「早
Thumbnail
大家都知道要補充膠原蛋白,但步入中年後的我,肌膚的變化不只是「流失變快」,連狀態也開始慢慢改變。 後來才明白,原來膠原蛋白的補充不只要「吃對」,更要「吃對時間」。 就像肌膚保養會分成早晚程序,膠原的補充其實也需要「分時」進行,才能更貼近需求,效果也更好。 BEAUTY CLUB 讓我養成了「早
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
本篇習作內容進入到 CSS 排版實作,一起瞭解 Flexbox,開始第一個網頁排版吧 💪🏻!
Thumbnail
本篇習作內容進入到 CSS 排版實作,一起瞭解 Flexbox,開始第一個網頁排版吧 💪🏻!
Thumbnail
box-sizing 是 CSS 屬性的一種,它使我們可以改變盒模型的計算方式。
Thumbnail
box-sizing 是 CSS 屬性的一種,它使我們可以改變盒模型的計算方式。
Thumbnail
本篇習作加強自我對 CSS Box Model 的觀念,也是在實作練習中發現自己雖然看似理解了盒模型,但其實在應用上尚不熟悉,因此藉由筆記重新梳理和練習,將 CSS Box Model 的基礎觀念整理並釐清,一起來看看吧!
Thumbnail
本篇習作加強自我對 CSS Box Model 的觀念,也是在實作練習中發現自己雖然看似理解了盒模型,但其實在應用上尚不熟悉,因此藉由筆記重新梳理和練習,將 CSS Box Model 的基礎觀念整理並釐清,一起來看看吧!
Thumbnail
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
在 Modern Web 的世界中,已經有非常多的套件、語法、框架,可以解決大部分網頁排版問題。 以我近期的觀察來說,在專案開發時,大部分公司會為了讓下一個接手、維護的開發者能更快上手專案架構,而採取原生的 CSS 寫法,而不是仰賴快速又方便的套件。
Thumbnail
都市傳說:「網頁跑版時,設定 box-sizing: border-box一切搞定!」
Thumbnail
都市傳說:「網頁跑版時,設定 box-sizing: border-box一切搞定!」
Thumbnail
相信大家在一開始接觸 CSS 時,一定會很疑惑為什麼除了 width 外,還會有 max-width 及 min-width 語法呢? 當要開發響應式網頁時,到底要使用什麼語法來控制「斷點」?
Thumbnail
相信大家在一開始接觸 CSS 時,一定會很疑惑為什麼除了 width 外,還會有 max-width 及 min-width 語法呢? 當要開發響應式網頁時,到底要使用什麼語法來控制「斷點」?
Thumbnail
對於前端初學者來說,在切版時會出現很多規則、不規則的網頁區塊,這時候我們會嘗試用各種相對定位、絕對定位、margin 或是 padding 的方式來進行網頁區塊的推擠。
Thumbnail
對於前端初學者來說,在切版時會出現很多規則、不規則的網頁區塊,這時候我們會嘗試用各種相對定位、絕對定位、margin 或是 padding 的方式來進行網頁區塊的推擠。
Thumbnail
在 pxCode 裡,我們也建議應用相同的概念 —— 在切版前先進行一輪的【思考切版】。當有了結構概念之後,再動手執行,會更有效率!
Thumbnail
在 pxCode 裡,我們也建議應用相同的概念 —— 在切版前先進行一輪的【思考切版】。當有了結構概念之後,再動手執行,會更有效率!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News