说说你对 CSS 盒模型 (Box Model) 的理解

2023年1月20日

💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

若你正在准备海外前端面试,可以阅读本篇的英文版《What is the CSS Box Model?》

CSS 盒模型 (Box Model)

浏览器引擎在布局文档(document) 时,会根据 CSS 的 Box Model 把每个元素视为长方形状的 Box,这个 Box 是由内容(content)、内距(padding)、边框(border) 和外距(margin) 所组成。

W3C and Internet Explorer box models
W3C and Internet Explorer box models
圖片來源:MDN 上的 Box Model 示意图

内容是指元素真实的内容,例如文字或图片的真实内容,我们可以透过 widthheight 等来调整内容的宽与长。在边框以内的是内距(padding),如果调高内距,会让内容与边框之间的距离变大;而在边框以外的会是外距(margin),假如想跟其他元素之间隔出距离,就需要透过设定外距来达成。

事实上,在浏览器历史中,盒子模型有两种,一是 content-box (W3C 标准盒子模型)、另一个是 border-box (IE 盒子模型)。目前已经可以透过 css 的 box-sizing 来自由设定盒子模型,如果不设定,预设值都会是 content-box (毕竟 IE 都已经退场了)。

这两者的区别在于,两种的盒子模型计算盒子的宽和高时标准不一样。 content-box 盒子的 width 和 height 只会包含 content,不包含 padding 和 border; 但 border-box 的盒子模型会包含 content、padding 和 border,如下图所示。

W3C and Internet Explorer box models
W3C and Internet Explorer box models
圖片來源:https://en.wikipedia.org/wiki/CSS_box_model
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們