前言
在CSS中,每个元素都被视为一个矩形盒子,这个盒子由四个部分组成:内容(content) 、内边距(padding) 、边框(border) 和外边距(margin) 。理解这些部分如何协同工作,是掌握CSS布局的关键。
一 、文档流与盒子占位
在正常文档流中,元素按照从上到下,从左到右的顺序排列。盒子在页面中的实际占位空间由以下因素决定:
bash
.box {
width: 200px; /* 内容宽度 */
height: 100px; /* 内容高度 */
padding: 20px; /* 内边距 */
border: 2px solid #333; /* 边框 */
margin: 10px; /* 外边距 */
}
1.标准盒子模型 (content-box)
默认情况下,CSS使用标准盒子模型(box-sizing: content-box)。在这种模式下:
width和height只定义内容区域的大小- 盒子的总宽度 =
width+左右padding+左右border+左右margin - 盒子的总高度 =
height+上下padding+上下border+上下margin
计算示例
bash
.box {
width: 600px;
height:200px;
padding: 10px;
border: 2px solid #000;
margin: 20px;
box-sizing: content-box; /* 默认值 */
}
实际占位宽度:600px + 10px×2 + 2px×2 + 20px×2 = 664px
weight 和height 只决定盒子的内容大小 
2.怪异盒子模型 (border-box)
box-sizing: border-box被称为怪异盒模型,也叫IE盒模型,它的计算方式更加直观:
width和height包含内容 + padding + border- 盒子的总宽度 =
width+左右margin - 盒子的总高度 =
height+上下margin
计算示例
bash
.box {
box-sizing: border-box;
width: 600px;
height: 200px;
padding: 10px;
border: 2px solid #000;
margin: 20px;
}
实际占位宽度:600px + 20px×2 = 640px内容区域宽度:600px - 10px×2 - 2px×2 = 576px

3.二者对比
bash
*{
margin: 0;
padding: 0;
}
.box{
width: 200px;
height: 100px;
padding: 20px;
border: 5px solid black;
margin: 20px;
}
.border-box{
background-color: lightblue;
box-sizing: border-box;
}
.content-box{
background-color: red;
box-sizing: content-box;
}

从以上图片可见相同的样式下,二者大小存在明显差异

怪异盒模型尤其在多列式布局和移动端开发中有着显著优势
二在多列布局中的应用
1.inline-block布局
bash
.container {
font-size: 0; /* 消除inline-block间隙 */
}
.column {
width: 50%;
padding: 20px;
border: 1px solid #ccc;
box-sizing: border-box;
display: inline-block;
vertical-align: top;
font-size: 16px; /* 重置字体大小 */
}
2.Flexbox布局
bash
.container {
display: flex;
}
.column {
flex: 1;
padding: 20px;
border: 1px solid #ccc;
box-sizing: border-box;
}
实际开发建议
- 全局设置border-box
bash
* {
box-sizing: border-box;
}
html {
box-sizing: border-box;
}
*, *::before, *::after {
box-sizing: inherit;
}
- 响应式布局优势
bash
.card {
box-sizing: border-box;
width: 25%; /* 始终占1/4宽度,不受padding影响 */
padding: 20px;
}
- 避免布局错乱
bash
/* 不推荐 */
.element {
width: 100%;
padding: 20px; /* 导致溢出 */
}
/* 推荐 */
.element {
box-sizing: border-box;
width: 100%;
padding: 20px;
}
总结
理解并正确使用盒子模型是CSS布局的基石。border-box模型通过将padding和border包含在设定的宽度内,让布局计算更加直观和可控。在现代网页开发中,建议全局使用border-box模型,这将大大提高布局开发的效率和可维护性。关键要点:
- 标准模型:width/height = 内容大小
- 怪异模型:width/height = 内容 + padding + border
- 多列布局中,border-box更具优势
- 建议全局设置为border-box
掌握盒子模型的不同计算方式,能够帮助你在实际开发中更加游刃有余地处理各种布局需求。