CSS: CSS 边距

最后更新:2026-10-13

CSS 中的边距分为两种:内边距(padding)和外边距(margin)。它们是控制元素"内部留白"和"外部间距"的关键属性。

边距属性速查表

属性 常用值 作用
padding 16px, 10px 20px, 10px 5px 15px 20px 内边距(上右下左)
padding-top/right/bottom/left 16px, 5% 单边内边距
margin 20px, 0 auto, 10px 0 20px 0 外边距(上右下左)
margin-top/right/bottom/left 10px, auto 单边外边距
auto margin: 0 auto 块级元素水平居中
💡 margin 简写规则: 4 值(上右下左)→ 3 值(上+左右+下)→ 2 值(上下+左右)→ 1 值(四边相等)。

本节涉及属性: padding margin

1. 内边距 padding

padding 是内容区域到边框之间的空间,相当于元素的"内留白"。

▶ 示例

▶ 试一试

(1) 可以分别设置四个方向

▶ 示例

▶ 试一试

(2) padding 简写规则

💡 记忆口诀: padding/margin 简写从"上"开始顺时针——上 右 下 左。记不住就记"从12点钟方向顺时针转一圈"。两个值时分别是"上下 左右"。

CSS
/* 一个值:四边相同 */
padding: 20px;

/* 两个值:上下 左右 */
padding: 10px 20px;

/* 三个值:上 左右 下 */
padding: 10px 20px 30px;

/* 四个值:上 右 下 左(顺时针) */
padding: 10px 20px 30px 40px;

(3) padding 的常用场景

▶ 示例

▶ 试一试

(4) padding 的注意事项

📌 行内元素注意: <span>、<a> 等行内元素的 padding 只在水平方向有效。如果你想让行内元素有完美的点击区域,可以设 display: inline-block。


2. 外边距 margin

margin 是元素边框外侧与其他元素之间的空间,相当于元素的"外交距"。

▶ 示例

▶ 试一试

(1) margin 简写规则

和 padding 完全一样:

CSS
margin: 20px;            /* 四边相同 */
margin: 10px 20px;       /* 上下 左右 */
margin: 10px 20px 30px;  /* 上 左右 下 */
margin: 10px 20px 30px 40px; /* 上 右 下 左 */

(2) margin 的常用场景

▶ 示例

▶ 试一试

(3) margin: auto 实现居中

margin: 0 auto 可以让块级元素在父容器中水平居中:

▶ 示例

▶ 试一试

3. 外边距合并(Margin Collapse)

⚠️ 经典坑: 垂直方向相邻的两个外边距会合并为较大的那个,这叫"外边距合并"(Margin Collapse)。最简单解决方法是给父元素加 overflow: hidden 或 padding: 1px。放入 flex 容器也能避免。

这是 CSS 中一个重要的概念——垂直方向上相邻的两个外边距会合并为一个,取其中的较大值。

(1) 场景一:相邻兄弟元素

▶ 示例

▶ 试一试

(2) 场景二:父子元素

当父元素没有 padding、border 或内容时,子元素的 margin 会"穿透"到父元素外部:

▶ 示例

▶ 试一试

避免方法:

(3) 场景三:空元素

一个没有内容、padding、border 的块级元素,它的上下 margin 也会合并。

(4) 不会合并的情况


4. padding vs margin 的选择

场景 用哪个
让按钮文字不贴边 padding
让两个卡片保持距离 margin
让内容与边框有距离 padding
让容器在页面居中 margin: auto
背景区域的大小控制 padding

一个简单判断方法:background 是否应该覆盖这个区域? 如果应该,用 padding;如果不应该,用 margin。


本节涉及属性: padding margin

❓ 常见问题

Q margin 塌陷(Margin Collapse)是什么?
A 垂直方向上相邻的两个外边距会合并为较大的那个,这叫外边距塌陷。比如一个元素 margin-bottom: 30px,下一个元素 margin-top: 20px,实际间距是 30px 不是 50px。给父容器加 overflow: hidden 或改 flex 布局都能避免。
Q padding 会撑大元素怎么办?
A 全局设置 box-sizing: border-box。这样 padding 和 border 会包含在元素的总宽高中,不会撑大。几乎所有现代项目都会做这个设置。
Q margin: 0 auto 居中需要什么条件?
A 元素必须有明确的宽度(不能是 auto),且必须是块级元素(display: block)。行内元素和没有设置宽度的块级元素无法用 margin: auto 居中。

📖 小节

📝 作业

  1. 创建一个"卡片组"页面,包含 3 张卡片,使用 margin 控制卡片之间的间距。
  2. 创建一个导航栏,使用 padding 控制每个导航项内部的文字与边界的距离。
  3. 演示"外边距合并"现象,并在代码中用至少两种方法解决它。
  4. 使用 margin: 0 auto 让一个 800px 宽的容器在页面中水平居中。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏