问题 具有margin-top的项目在包含框之外具有边距


我有一些这样的效果:

#div {
   background: green; 
   width: 200px;
   height: 100px;
}

h1 {
   margin-top: 100px;
}

(显然有一些HTML可以使用它。)

现在在浏览器中查看时 h1 显示在最顶端 #div 和 100px 保证金是最重要的 #div

任何人都可以提出理由吗?

(代码有点太复杂,无法插入相关部分,所以如果没有人可以给我答案,那么我会发布它,也许有人会发现错误或其他什么。)


4356
2017-08-03 16:29


起源

你能提交你的HTML代码吗? - Jerome Cance
我们需要看到比这更多的代码。您提供的代码应该可以正常工作。 - Jamie Dixon
好的,即将添加代码,但似乎使用填充工作正常。 - Chaim


答案:


尝试添加填充。我以前见过这种问题。如果padding做同样的事情然后尝试放置一个容器div,但#div和h1然后添加边距。如果您只想将h1从#div向下移动,那么填充是最好的选择,因为它将“将h1进一步推入#div'框'”。


2
2017-08-03 16:38



填充将使其工作。出于某种原因,利润率与标题不相符。 - jezza-tan
好的,它确实有效。不确定它是否只是标题,因为我尝试将其更改为div并且它仍然做同样的事情。 - Chaim
是的,当2个元素位于页面的最顶部且元素之间没有时,它似乎发生了很多。仍然没有完全弄明白为什么。很高兴知道padding可以解决这个问题。 - Howdy_McGee
我发布了一个解释问题的答案(在不知道为什么是坏事的情况下应用hack!) - Jerome Cance
我必须承认我不知道为什么(感谢,非常有用),但使用填充而不是保证金几乎不是黑客! - Chaim


这与H1标签无关。这就是我们所说的保证金崩溃。

你可以在这里找到关于这个主题的帖子: http://reference.sitepoint.com/css/collapsingmargins

你有几个解决方案:

  • 改用填充
  • 在父div上添加overflow:auto
  • 将透明顶部边框添加到父div

12
2017-08-03 16:43



我个人会反对使用溢出:自动样式,因为其他浏览器可能会出现问题。这只是个人偏好。 - Howdy_McGee
我同意,这就是我所说的黑客解决方案。最好是阅读关于保证金崩溃的帖子以了解问题,然后找到针对特定案例的更好解决方案 - Jerome Cance
好吧,我现在完全理解,当我最初编写代码时 #div 溢出:隐藏(并没有问题)然后当我改变它然后发生'边缘崩溃'。我只是不确定我改变了什么以产生这种影响。 - Chaim


我能够通过制作所有标题标签来解决这个问题(h1-h6) display: inline-block;。作为具有边距的内联元素,它们可以像这样溢出,但作为内联块,它们与其他块的行为稍微好一些。


0
2017-08-17 02:31