我在嵌套的div中使用 margin-top
时遇到问题——当我将 margin-top
应用于嵌套的div时,边距被应用于父div而不是嵌套的div。
有什么想法吗?
我在嵌套的div中使用 margin-top
时遇到问题——当我将 margin-top
应用于嵌套的div时,边距被应用于父div而不是嵌套的div。
有什么想法吗?
边距会因设计而折叠。添加1px的填充,也应该可以正常工作。
这就是边距的工作原理..边距是下一个具有边距/填充/类似属性元素之间的空间。它的定义并不一定是其父元素。请参考规范。
以下是一些可行的解决方法
这只是意味着你可以使用 padding-top: 10px;
替代 margin-top: 10px;
。这种方法并不适用于所有情况。
我怀疑我不是最初发现这个解决方案的人,但前几天我是这样解决问题的。我有一个 <div id="header" />
,我想给它一个上边距,但它的上边距也将父元素(body
元素)向下推。所以我在 body
元素上这样做...
body {
padding-top: 1px;
margin-top: -1px;
}
这使得我的边距生效了。你也可以尝试使用边框,比如 border: 1px solid #ccc
。
在 CSS 注释中添加说明,解释为什么要使用这种特殊的规则是明智的。我只是添加了 /* this is to stop collapsing margins */
。
更深入地说:
格式化上下文可以是内联的或块级的,只有块级格式化上下文才会折叠其边距。这些格式化上下文形成文档的流程。
块级格式化上下文只是所有块级元素(例如div、p、table)在包含块中垂直地一个接一个地布置,直到文档/容器的末尾或建立新的格式化上下文。
在嵌套的情况下,子元素的margin-top与父元素的margin-top合并,因为两个div都是块级格式化上下文的一部分。通过将overflow设置为auto,父div成为新格式化上下文的容器,而子元素则是其中的第一个块级元素。因此,这两个边距不再“相邻”,因为父div现在是根元素。
希望这有所帮助。
你也可以使用位置属性来固定内部div,例如:
position:fixed;