padding 在 inline 元素上下方向视觉无效,因不生成独立盒模型;改用 inline-block、flex 子项或设置 box-sizing: border-box 可解决。
这是最常见也最容易被忽略的情况:padding 对 display: inline 元素(如 、)的上下方向(padding-top / padding-bottom)**视觉上无效**——不是没加,而是浏览器根本不渲染它占据的空间,文字行高不会因此撑开。
padding 通常能显示,但可能被父容器裁剪或与其他内联元素重叠padding 不影响行高计算background-color,会发现上下 padding 区域没有背景色把 display 改为 inline-block,既能保持水平排列,又能让 padding 完全生效(上下左右都起作用),且不会像 block 那样强制换行。
inline-block 元素间会因 HTML 换行/空格产生约 4px 间隙,可用 font-size: 0 或注释掉换行来消除vertical-align: middle(默认是 base
.btn {
display: inline-block;
padding: 8px 16px;
vertical-align: middle;
}当元素是 display: flex 容器的子项时,padding 本身一定生效,但常被误认为“不生效”,实际是父容器的 align-items 或子项的 margin 干扰了视觉效果。
align-items: stretch(默认)会让子项拉伸填满容器高度,此时 padding 看起来被“吞掉”了height 或 min-height,padding 会向外撑开,但可能溢出或触发滚动align-items: flex-start 或 align-items: center 来明确控制对齐默认 box-sizing: content-box 下,width 和 padding 是相加关系。比如设了 width: 100px + padding: 10px,最终元素总宽是 120px,可能超出预期容器,造成布局错乱,让人误以为 padding “没加进去”。
* { box-sizing: border-box; }
box-sizing: border-box,此时 width 包含 padding 和 border、)默认是 content-box,且部分浏览器不继承 box-sizing,需单独设置padding 是否生效,本质是看元素是否拥有可渲染的盒模型空间。inline 元素天生缺这个空间,强行加 padding 只是“画在空气里”。真正要改的不是 padding 值,而是 display 类型或父容器的布局逻辑。