CSS盒子模型:网页布局的基石与艺术

一、什么是盒子模型?

每个HTML元素在浏览器中都被渲染为一个矩形盒子。CSS盒子模型描述了这些盒子如何构成:从内容区域开始,依次添加内边距、边框和外边距。理解盒子模型是掌握CSS布局的第一步。

想象一下俄罗斯套娃:

  • 最内层:内容(你真正想展示的东西)

  • 第二层:内边距(内容与边框之间的缓冲空间)

  • 第三层:边框(盒子的边界)

  • 最外层:外边距(盒子与其他盒子之间的距离)

二、盒子模型的组成部分

1. 内容区域(Content)

盒子最核心的部分,包含文本、图片等实际内容。

css 复制代码
div {
  width: 200px;      /* 内容区域的宽度 */
  height: 150px;     /* 内容区域的高度 */
  background: #f0f0f0;
}

2. 内边距(Padding)

内容区域与边框之间的空间,背景色会延伸到内边距区域

css 复制代码
div {
  padding: 20px;     /* 简写:四个方向都是20px */
  
  /* 分别设置各边内边距 */
  padding-top: 10px;
  padding-right: 15px;
  padding-bottom: 10px;
  padding-left: 15px;
  
  /* 简写的不同形式 */
  padding: 10px;                /* 上右下左都是10px */
  padding: 10px 20px;           /* 上下10px,左右20px */
  padding: 10px 20px 15px;      /* 上10px,左右20px,下15px */
  padding: 10px 20px 15px 5px;  /* 上10px,右20px,下15px,左5px */
}

3. 边框(Border)

围绕内容和内边距的边界线,可以设置样式、宽度和颜色。

css 复制代码
div {
  /* 边框的三个属性 */
  border-width: 2px;      /* 边框宽度 */
  border-style: solid;    /* 边框样式:solid, dotted, dashed, double等 */
  border-color: #333;     /* 边框颜色 */
  
  /* 简写形式 */
  border: 2px solid #333;
  
  /* 分别设置各边边框 */
  border-top: 1px dashed red;
  border-right: 2px solid blue;
  border-bottom: 3px dotted green;
  border-left: 4px double orange;
  
  /* 圆角边框 */
  border-radius: 10px;
  border-radius: 50%;     /* 圆形 */
}

4. 外边距(Margin)

盒子与其他盒子之间的空间,始终是透明的,不会显示背景。

css 复制代码
div {
  margin: 20px;      /* 四个方向都是20px */
  
  /* 简写与padding相同 */
  margin: 10px 20px;  /* 上下10px,左右20px */
  
  /* 特殊值 */
  margin: 0 auto;     /* 水平居中(左右auto平均分配) */
  margin-top: -10px;  /* 负外边距,元素会重叠 */
}

三、标准盒子模型 vs 替代盒子模型

这是盒子模型中最关键的区别!

1. 标准盒子模型(content-box)【默认】

元素的widthheight只包含内容区域的尺寸。

css 复制代码
.box {
  box-sizing: content-box; /* 默认值 */
  width: 200px;
  height: 100px;
  padding: 20px;
  border: 5px solid black;
  margin: 10px;
}

实际占据空间计算:

  • 总宽度 = width + 左右padding + 左右border + 左右margin

    • = 200 + 20*2 + 5*2 + 10*2 = 270px
  • 总高度 = height + 上下padding + 上下border + 上下margin

    • = 100 + 20*2 + 5*2 + 10*2 = 170px

2. 替代盒子模型(border-box)

元素的widthheight包含内容+内边距+边框的尺寸。

css 复制代码
.box {
  box-sizing: border-box;
  width: 200px;      /* 这个200px包含了内容+padding+border */
  height: 100px;
  padding: 20px;
  border: 5px solid black;
  margin: 10px;
}

实际占据空间计算:

  • 总宽度 = width + 左右margin

    • = 200 + 10*2 = 220px
  • 总高度 = height + 上下margin

    • = 100 + 10*2 = 120px

内容区域实际尺寸:

  • 内容宽度 = width - 左右padding - 左右border

    • = 200 - 20*2 - 5*2 = 150px
  • 内容高度 = height - 上下padding - 上下border

    • = 100 - 20*2 - 5*2 = 50px

推荐使用border-box!

相关推荐
里欧跑得慢36 分钟前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
IT_陈寒1 小时前
Vue的computed属性把我坑惨了,原来我一直用错姿势
前端·人工智能·后端
小灰灰搞电子1 小时前
Rust+Slint 实现温度计源码分享
前端·rust·slint
计算机魔术师2 小时前
面壁智能 OpenBMB 推出 MathForm,面向 Lean 4 数学自动形式化的开源框架、数据集与模型
前端
NeilCarmack2 小时前
Deepseek-harness增加桌面版端序列:第 2 讲 · spawn Electron:当前进程如何“交棒“
前端·javascript·electron
@Mike@2 小时前
09-数据库学习笔记(数据库索引与过滤器)
数据库·笔记
一米阳光86612 小时前
软考(中级)软件设计师核心笔记(9)算法——背包问题
笔记·算法·职场发展·软考·软件设计师·中级职称
Chris _data2 小时前
WPF 上位机开发学习笔记 - 第四天
笔记·学习·wpf
上海魁鲸科技有限公司3 小时前
APS高级排产系统到底有什么用?一文讲清功能、选型与落地建议
前端·microsoft·excel
陈随易3 小时前
Bun v1.4 更新总结:把浏览器、图片、定时任务和工程工具都装进一个运行时
前端·后端·程序员