Menu

CSS margin 和 padding 的区别:并排对比

padding 是元素边框以内的空间,margin 是边框以外的空间。先在同一个盒子上实时并排看看两者,再了解背景、点击区域、元素间距和居中分别该用哪一个。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

一张图看懂区别

padding 在边框以内,margin 在边框以外。 下面两个盒子的内容相同,数值都是 24px,只有属性不同。灰色是它们后面的容器。

用 padding 时,这 24px 是蓝色的:它是盒子的一部分,位于边框内部,盒子会变大。用 margin 时,这 24px 是灰色的:盒子紧贴着文字,外面的空间把容器的边缘推开。

在同一个盒子上试试两者

拖动两个滑块。padding 让蓝色盒子变大;margin 让盒子离开灰色边缘,但盒子本身不变。

留意显示尺寸的那一行:拖动 padding 滑块时它会变化,拖动 margin 滑块时它保持不变。

margin 与 padding 一览

padding(内边距)margin(外边距)
位置边框以内边框以外
背景显示元素的背景始终透明
属于点击区域是否
增大元素尺寸是,在 content-box 下否
可以取 auto否可以(margin: 0 auto 用来居中)
可以取负值否可以
垂直方向会合并从不会,相邻的垂直外边距会合并
百分比相对于包含块的宽度包含块的宽度
典型用途按钮、卡片、输入框内部的空间元素之间的空间、居中

每个属性都有单独的一页介绍所有细节:CSS padding 和 CSS margin。

该用哪一个

问自己一个问题:这段空间是属于元素本身,还是位于元素之间?

  • 按钮文字周围的空隙、卡片的内部、输入框文字与边框之间的距离:用 padding。它会带上背景,并让可点击的目标变大。
  • 两个段落之间、卡片之间、一个区块周围的空间:用 margin,或者当父元素是 flex 或 grid 容器时用 gap。

点击区域是最需要做出正确选择的地方。下面两个链接在页面上占用的空间相同,但第一个的空间来自 padding,第二个的空间来自 margin。只有第一个容易点中:

琥珀色虚线轮廓就是元素的边缘,也就是响应点击和触摸的区域。第二个链接周围的外边距只是什么都不做的空白。

元素之间的间距:margin 还是 gap

对于一行或一组网格中的元素,在 flex 或 grid 父元素上使用 gap,通常比给每个子元素加外边距更干净:它只出现在元素之间,从不出现在第一个元素之前或最后一个元素之后,所以不需要再做任何抵消。

这里灰色容器使用 padding(容器内部的空间,灰色),各个元素使用 padding(每个元素内部的空间,绿色),而 gap 负责它们之间的空间。

常见错误

  • 用 margin 做需要上色的空间。 margin 是透明的。如果这段空间需要显示背景,那就是 padding。
  • 用 margin 让链接变大。 点击区域到边框为止;请用 padding。
  • 以为两个 20px 的垂直外边距会得到 40px。 相邻的垂直外边距会合并成 20px。padding 永远不会合并。
  • 尝试用 padding: auto 居中。 只有 margin 接受 auto。
  • 忘了 padding 会让盒子变大。 加上 box-sizing: border-box,让 width 把它包含在内。

常见问题

margin 和 padding 有什么区别?

padding 是元素内容与边框之间的空间,位于元素内部。margin 是边框以外的空间,位于元素与相邻元素之间。padding 会显示元素的背景,margin 则始终是透明的。

什么时候该用 padding 而不是 margin?

属于元素自身的空间用 padding:按钮文字周围的空隙、卡片的内部,以及任何需要共享背景或可以点击的部分。独立元素之间的空间用 margin(在 flex 和 grid 中也可以用 gap)。

padding 或 margin 会增大元素的尺寸吗?

padding 会,在默认的 box-sizing: content-box 下,它会加到宽度和高度上。margin 永远不会计入元素的尺寸,它只在元素周围增加空间(width: auto 的块级元素甚至会变窄,因为外边距占用了一部分可用宽度)。使用 box-sizing: border-box 时,padding 则从宽度内部扣除。

padding 能像 margin 一样取负值吗?

不能。负的 padding 是无效的,会被忽略;而负的 margin 是允许的,可以让元素互相重叠。padding 也不能取 auto,这就是居中要用 margin: 0 auto 的原因。

Coddy 编程语言插图

和 Coddy 一起学编程

开始