padding 是什么
padding(内边距)是元素内部的空间,位于内容和边框之间。它会显示元素的背景,所以正是这个属性让按钮、卡片或徽标显得不那么拥挤。
蓝色区域是内容。它周围的绿色带是四边各 24px 的内边距,边框位于它的外侧。
padding 简写:1、2、3 或 4 个值
padding 用一条声明设置四条边。值的个数决定每条边取哪个值,从上方开始按顺时针排列:
| 声明 | 上 | 右 | 下 | 左 |
|---|---|---|---|---|
padding: 10px; | 10 | 10 | 10 | 10 |
padding: 10px 20px; | 10 | 20 | 10 | 20 |
padding: 10px 20px 30px; | 10 | 20 | 30 | 20 |
padding: 10px 20px 30px 40px; | 10 | 20 | 30 | 40 |
两个值表示“上下,左右”。三个值表示“上,左右,下”。四个值按顺时针走一圈:上、右、下、左(英文里常用 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.5em | em 随元素的字号缩放 |
| 百分比 | 5% | 相对于包含块的宽度 |
0 | padding: 0 | 不需要单位 |
| 负值 | -10px | 无效,会被忽略 |
auto | auto | 对 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 取代。