盒子模型是 CSS 布局的核心概念,它将 HTML 元素视为一个矩形盒子,由四个部分组成:
内容(Content):元素的实际内容(如文本、图片)。
内边距(Padding):内容与边框之间的透明区域。
边框(Border):围绕内容和内边距的线条。
外边距(Margin):边框外部的透明区域,用于控制与其他元素的间距。
尺寸计算:width
和 height
仅表示 内容的宽高,总元素尺寸需加上内边距、边框和外边距。
公式:
text复制总宽度 = width + padding-left + padding-right + border-left + border-right + margin-left + margin-right 总高度 = height + padding-top + padding-bottom + border-top + border-bottom + margin-top + margin-bottom
尺寸计算:width
和 height
包含 内容 + 内边距 + 边框,外边距仍单独计算。
触发方式:
在 IE5/6 中默认使用此模式。现代浏览器可通过 CSS 的 box-sizing: border-box
切换至此模式。
box-sizing
**box-sizing: content-box
(默认)**:
使用标准盒子模型,width/height
仅定义内容尺寸。
**box-sizing: border-box
:
使用 IE 盒子模型,width/height
包含内容、内边距和边框的尺寸。
优点**:
更直观的尺寸控制(如直接设置 width: 100%
时,不会因内边距或边框导致溢出)。
常见于全局样式重置:
css复制* { box-sizing: border-box; /* 统一现代项目的盒子模型 */}
现象:
垂直方向上相邻的两个块级元素的外边距会合并为一个,取两者中的较大值。
示例:
html运行复制<div style="margin-bottom: 20px"></div><div style="margin-top: 30px"></div><!-- 实际间距为 30px,而非 20+30=50px -->
解决方案:
使用 padding
替代外边距。
使用 Flex/Grid 布局(容器内子元素的外边距不会合并)。
通过 overflow: hidden
或 display: flow-root
创建 BFC(块级格式化上下文)。
内联元素(如 <span>
)的 width
和 height
无效,其尺寸由内容决定。
垂直方向的内边距和外边距不会影响布局(可能覆盖其他元素,但不会撑大空间)。
使用 border-box
模式,避免百分比宽度因内边距/边框被撑破容器:
css复制.container { width: 80%; padding: 20px; box-sizing: border-box; /* 总宽度仍为 80% */}
在 Chrome DevTools 中,选中元素后可在 Computed 面板中直观看到盒子模型的四层结构。
https://i.imgur.com/4HjFQkY.png
盒子模型是 CSS 布局的基石,决定了元素尺寸和间距的计算方式。
标准模式下,width/height
仅定义内容尺寸;border-box
模式下,包含内容、内边距和边框。
优化实践:
全局设置 box-sizing: border-box
简化布局计算。
注意外边距合并问题,合理使用 BFC 或 Flex/Grid 布局规避。
结合开发者工具调试,精准控制元素尺寸和间距。