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!

相关推荐
傻小胖29 分钟前
22.ETH-智能合约-北大肖臻老师客堂笔记
笔记·区块链·智能合约
浅念-1 小时前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
吃杠碰小鸡1 小时前
高中数学-数列-导数证明
前端·数学·算法
kingwebo'sZone1 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word
xjt_09011 小时前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
我是伪码农2 小时前
Vue 2.3
前端·javascript·vue.js
张人玉2 小时前
VisionPro 定位与卡尺测量学习笔记
笔记·学习·计算机视觉·vsionprp
songyuc2 小时前
【BiFormer】BiFormer: Vision Transformer with Bi-Level Routing Attention 译读笔记
笔记·transformer
夜郎king2 小时前
HTML5 SVG 实现日出日落动画与实时天气可视化
前端·html5·svg 日出日落
觉醒大王2 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法