为何#sibling元素padding为1em而非0em?是否存在类margin折叠的padding折叠?
好问题!咱们一步步拆解这两个点:
问题1:为什么#sibling元素的padding显示为1em而非0em?
核心原因很简单:padding是元素自身盒模型的独立属性,它的取值只由该元素的CSS规则决定,和父元素、兄弟元素的padding不存在“覆盖”或抵消的逻辑。
举个实际场景的例子:
- 父元素的padding作用是拉开自身边框与内部子元素/内容的距离,它不会影响子元素(或兄弟元素)自身的padding取值。
- 如果你的
#sibling元素明确设置了padding: 1em;,浏览器就会严格按照这个规则渲染它的内边距;哪怕父元素有padding,也不会把#sibling的padding“挤成”0。 - 补充一点:padding默认是不继承的,所以父元素的padding值不会自动传给子元素/兄弟元素,除非你主动用
inherit关键字指定继承。
你可能是把padding和margin的行为搞混了——margin会有折叠机制,但padding完全是各算各的,每个元素的padding都会实实在在占据自己的空间,不会被其他元素的padding影响取值。
问题2:是否存在与margin折叠完全相同的padding折叠机制?
答案是完全不存在。
CSS规范里仅针对margin定义了“折叠(collapsing margins)”的规则——比如相邻兄弟元素的垂直margin会合并、父元素与第一个/最后一个子元素的垂直margin会折叠等情况,但padding从来没有类似的折叠逻辑。
不管是相邻的兄弟元素,还是父子元素之间,每个元素的padding都会独立占据空间:比如两个兄弟元素,第一个设padding-bottom: 1em;,第二个设padding-top: 1em;,它们之间的间距就是1em + 1em = 2em,绝对不会像margin那样合并成1em。
内容的提问来源于stack exchange,提问作者user420479
相关产品推荐
相关产品推荐

