CSS 盒模型深度解析

简单 🟢CSS 布局
3 个标签
预计阅读时间:4 分钟
CSS盒模型布局基础

CSS 盒模型深度解析

CSS 盒模型是网页布局的基础,理解盒模型对于掌握 CSS 布局至关重要。

📦 盒模型的组成

标准盒模型:

content:内容区域,显示文本和图像
padding:内边距,内容与边框之间的空间
border:边框,围绕内边距的线
margin:外边距,边框外部的空间

盒模型的计算:

标准盒模型:width = content width
IE 盒模型:width = content + padding + border
box-sizing 属性控制盒模型类型

box-sizing 属性:

content-box:标准盒模型(默认值)
border-box:IE 盒模型,更直观的尺寸计算
inherit:继承父元素的值

💻 代码示例:盒模型对比

cssCode
/* 标准盒模型(默认) */
.box-standard {
  box-sizing: content-box;
  width: 300px;
  padding: 20px;
  border: 5px solid #000;
  /* 实际占用宽度 = 300 + 20*2 + 5*2 = 350px */
}

/* IE 盒模型 */
.box-border {
  box-sizing: border-box;
  width: 300px;
  padding: 20px;
  border: 5px solid #000;
  /* 实际占用宽度 = 300px(包含 padding 和 border) */
  /* 内容宽度 = 300 - 20*2 - 5*2 = 250px */
}

全局设置 border-box

cssCode
/* 推荐的全局设置 */
*,
*::before,
*::after {
  box-sizing: border-box;
}

/* 这样所有元素都使用 border-box,计算更直观 */
.container {
  width: 100%;
  padding: 20px;
  border: 1px solid #ccc;
  /* 实际宽度就是 100%,padding 和 border 包含在内 */
}

外边距折叠示例

cssCode
/* 相邻兄弟元素的外边距折叠 */
.box1 {
  margin-bottom: 20px;
}

.box2 {
  margin-top: 30px;
  /* 实际间距 = max(20px, 30px) = 30px,不是 50px */
}

/* 防止外边距折叠的方法 */
.parent {
  margin-top: 20px;
  padding-top: 1px; /* 方法1:添加 padding */
  border-top: 1px solid transparent; /* 方法2:添加 border */
  overflow: hidden; /* 方法3:创建 BFC */
  display: flex; /* 方法4:使用 flex 布局 */
}

.child {
  margin-top: 30px;
  /* 现在不会折叠,总间距 = 20px + 30px = 50px */
}

最佳实践

统一使用 border-box 盒模型
理解 margin 的折叠行为
合理使用 padding 和 margin
注意百分比值的计算基准
使用开发者工具调试盒模型