Appearance
CSS Box Model
一、盒模型基础概念
CSS盒模型是CSS布局的核心理论,所有HTML元素都可以看作一个矩形盒子,浏览器渲染页面时,会根据盒模型规则计算每个元素的大小、位置和间距,实现页面的布局排版。
盒模型的本质是:元素由内容区域、内边距、边框、外边距四个部分构成,这四个部分层层包裹,共同决定元素在页面中占据的空间。
二、盒模型的四大组成部分
1. Content(内容区域)
- 定义:盒子的核心区域,用于存放元素的实际内容,比如文本、图片、子元素等。
- 尺寸控制:通过
width(宽度)和height(高度)属性设置,默认情况下,width和height仅作用于内容区域。 - 注意:行内非替换元素(如
\<span>)默认无法直接设置宽高,需转换为块级/行内块元素。
2. Padding(内边距)
- 定义:内容区域与边框之间的空白区域,属于元素自身的空间,会撑大元素的视觉大小。
- 属性设置:
- 单边内边距:
padding-top、padding-right、padding-bottom、padding-left - 简写属性:
padding: 上 右 下 左;(顺时针);padding: 上下 左右;(简写);padding: 数值;(四边相同)
- 单边内边距:
- 特性:内边距区域会显示元素的背景色/背景图,无负值。
3. Border(边框)
- 定义:包裹内边距的边框线,属于元素自身的一部分,默认无宽度。
- 属性设置:
- 边框三要素:
border-width(宽度)、border-style(样式,必填,如solid实线、dashed虚线)、border-color(颜色) - 简写属性:
border: 宽度 样式 颜色;(如border: 1px solid #ccc;) - 单边边框:
border-top、border-right等
- 边框三要素:
- 特性:边框会占据元素空间,可通过
box-sizing调整计算规则。
4. Margin(外边距)
- 定义:元素与元素之间的空白距离,用于控制元素的间距,不属于元素自身,不显示背景。
- 属性设置:
- 单边外边距:
margin-top、margin-right、margin-bottom、margin-left - 简写属性:
margin: 上 右 下 左;,规则同padding
- 单边外边距:
- 特性:支持负值(可实现元素重叠);存在外边距折叠现象(块级元素垂直方向外边距合并)。
三、盒模型的两种类型
CSS中有两种盒模型,核心区别在于width和height的计算范围,通过box-sizing属性切换。
1. 标准盒模型(content-box,默认值)
- 语法:
box-sizing: content-box; - 计算规则:
- 元素总宽度 =
width(内容宽度) +padding-left+padding-right+border-left+border-right - 元素总高度 =
height(内容高度) +padding-top+padding-bottom+border-top+border-bottom
- 元素总宽度 =
- 特点:设置的宽高仅针对内容区,添加内边距和边框会让元素整体变大,容易导致布局溢出。
2. 怪异盒模型(border-box,推荐)
- 语法:
box-sizing: border-box; - 计算规则:
- 元素总宽度 =
width(包含内容、内边距、边框) - 内容宽度 =
width- 左右内边距 - 左右边框
- 元素总宽度 =
- 特点:设置的宽高就是元素最终占据的空间,内边距和边框不会撑大元素,布局更直观、易控制,是前端开发主流用法。
四、外边距折叠(Margin Collapsing)
1. 触发条件
仅发生在普通文档流中块级元素的垂直方向,水平方向不会折叠;行内元素、浮动元素、绝对定位元素、固定定位元素不触发。
2. 三种折叠场景
- 相邻兄弟元素:上下相邻的两个块级元素,上方元素的
margin-bottom和下方元素的margin-top折叠,取较大值作为最终间距。 - 父子元素:父元素无顶部边框、无顶部内边距、无内联元素分隔,子元素的
margin-top会传递给父元素,导致父元素一起下移。- 解决方法:给父元素加
border-top/padding-top、设置overflow: hidden、转为弹性盒/网格布局。
- 解决方法:给父元素加
- 空块级元素:自身无内容、无边框、无内边距,
margin-top和margin-bottom会折叠,取较大值。
3. 折叠规则
- 正数值:取两者中的较大值
- 一正一负:取数值之和
- 负数值:取更负的那个值
五、盒模型相关常用属性
box-sizing:切换盒模型类型,全局推荐设置:css* { box-sizing: border-box; }margin: 0 auto;:块级元素水平居中(需设置固定宽度)outline:外轮廓,不占据盒模型空间,不影响布局,常用于表单元素聚焦样式max-width/min-width:限制元素最大/最小宽度,适配响应式布局overflow:控制内容溢出内容区的显示方式,visible(默认)、hidden(隐藏)、scroll(滚动)、auto(自动)
六、盒模型可视化调试
浏览器开发者工具是调试盒模型的利器:
- 打开浏览器,按
F12或右键选择「检查」打开开发者工具 - 选中页面元素,切换到「Elements」-「Styles」,底部会显示盒模型可视化面板
- 面板中清晰标注
content、padding、border、margin的数值,可直接修改调试
七、注意事项
1. 行内元素(如 <span> 、 <a> )的上下内边距、上下外边距不影响垂直布局,仅左右生效 2. 替换元素(如 <input> )的盒模型规则和块级元素一致,可直接设置宽高 3. 浮动、绝对定位、固定定位的元素,不会触发外边距折叠,且盒模型计算规则不变 4. 内联块元素( inline-block )兼具行内元素和块级元素特点,可设置宽高、内边距、外边距,且不会触发外边距折叠