Menu

CSS padding 内边距:简写、单边设置、百分比与示例

padding 是元素内部的空间,位于内容和边框之间。本文讲解 1 到 4 个值的 padding 简写、单边属性、逻辑内边距、百分比,以及 padding 如何改变元素的尺寸。

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

padding 是什么

padding(内边距)是元素内部的空间,位于内容和边框之间。它会显示元素的背景,所以正是这个属性让按钮、卡片或徽标显得不那么拥挤。

蓝色区域是内容。它周围的绿色带是四边各 24px 的内边距,边框位于它的外侧。

padding 简写:1、2、3 或 4 个值

padding 用一条声明设置四条边。值的个数决定每条边取哪个值,从上方开始按顺时针排列:

声明上右下左
padding: 10px;10101010
padding: 10px 20px;10201020
padding: 10px 20px 30px;10203020
padding: 10px 20px 30px 40px;10203040

两个值表示“上下,左右”。三个值表示“上,左右,下”。四个值按顺时针走一圈:上、右、下、左(英文里常用 TRouBLe 这个词来记)。

在下面输入任意简写。盒子会重新绘制,浏览器会报告每条边得到的值:

试试 8px、8px 24px、0 0 40px 和 1em 5%。无效的值(例如 -10px)会被忽略,盒子保持上一次有效的内边距。

一次设置一条边

每条边都有自己的属性,如果只想修改其中一条,这比写四个值的简写更清楚:

.card {
  padding-top: 16px;
  padding-right: 24px;
  padding-bottom: 16px;
  padding-left: 24px;
}

先写简写再写单边属性是一种常见的写法:先设置全部,再调整其中一条。

.card {
  padding: 16px;
  padding-bottom: 32px; /* only the bottom changes */
}

这里顺序很重要:如果把 padding 简写写在 padding-bottom 之后,下内边距就会被重置回 16px。

逻辑内边距:padding-inline 与 padding-block

padding-left 和 padding-right 是物理属性:在任何语言中都固定在同一侧。逻辑属性则跟随书写方向,如果你的网站也会以从右到左的方式显示,这正是你需要的:

逻辑属性英文(从左到右)阿拉伯文(从右到左)
padding-inline-start左右
padding-inline-end右左
padding-inline左和右右和左
padding-block上和下上和下

padding 会让盒子变大(除非使用 border-box)

默认情况下,width 只是内容的宽度,内边距会额外加上去。一个 width: 200px 的盒子加上 padding: 20px,实际宽度是 240px:

box-sizing: border-box 让盒子保持 200px,内边距从内部扣除。完整的计算方法见盒模型页面。

百分比内边距

百分比内边距是相对于父元素的宽度计算的,四条边都是如此,包括上和下:

以前给 16:9 视频盒子用的“padding-top: 56.25%”技巧就是这么来的。如今 aspect-ratio: 16 / 9 可以直接实现同样的效果。

按钮和链接上的 padding

要让链接或按钮变大,用 padding 是正确的做法,因为内边距属于元素本身,也就属于可以点击或触摸的区域。用外边距只会增加空间,并不会扩大点击目标。

.btn {
  display: inline-block; /* lets vertical padding take space in the line */
  padding: 10px 18px;    /* a comfortable touch target */
}

padding 可以取的值

值示例说明
长度12px、1rem、0.5emem 随元素的字号缩放
百分比5%相对于包含块的宽度
0padding: 0不需要单位
负值-10px无效,会被忽略
autoauto对 padding 无效(对 margin 有效)

常见错误

  • 四个值的简写顺序写错。 顺序是上、右、下、左,按顺时针。
  • 添加内边距后盒子变大了。 设置 box-sizing: border-box。
  • 用 padding 分隔两个元素。 元素之间的空间是外边距;内边距是一个元素内部的空间。见 margin 与 padding 的区别。
  • 行内链接的垂直内边距和其他行重叠。 把它改成 inline-block。
  • 负的 padding 或 padding: auto。 两者都无效,会被悄悄忽略。

常见问题

CSS 中的 padding 是什么?

padding(内边距)是元素内容和边框之间的空间。它属于元素本身,所以会显示元素的背景色,也会让链接或按钮的可点击区域变大。

padding 简写中各个值的顺序是什么?

从上方开始按顺时针:padding: top right bottom left;。三个值时依次是上、左右、下;两个值时依次是上下、左右;一个值时作用于四条边。

padding 会让元素变大吗?

在默认的 box-sizing: content-box 下会:padding 会加到 width 和 height 上。使用 box-sizing: border-box 时,padding 从宽度内部扣除,元素保持你设置的尺寸。

百分比 padding 是相对于什么计算的?

四条边都相对于包含块的宽度计算。padding-top: 50% 是父元素宽度的一半,而不是高度的一半,这就是以前的宽高比技巧使用垂直内边距的原因。

padding 可以是负值吗?

不可以。负的 padding 值是无效的,这条声明会被忽略。如果想把内容往外拉,请改用负外边距。

如何在 HTML 中添加 padding?

通过 CSS,写在样式表里或 style 属性中:<div style="padding: 16px;">。HTML 没有给一般元素用的 padding 属性;表格上旧的 cellpadding 属性已经废弃,由 td 和 th 上的 padding 取代。

Coddy 编程语言插图

和 Coddy 一起学编程

开始