css margin-top 属性仅在声明边框时才有效[重复]

Posted

技术标签:

【中文标题】css margin-top 属性仅在声明边框时才有效[重复]【英文标题】:css margin-top property only works if border is declared [duplicate] 【发布时间】:2011-06-29 04:53:57 【问题描述】:

嗯,

自从这件事不断出现以来已经有一段时间了,我从来没有时间问为什么:

这是我非常简单的 html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Page Title</title>
  <style>
    div
      width: 200px;
      background: green;
        
    p
      background: yellow;
      margin: 40px;
    
  </style>
</head>
<body>
  <div>
    <p>Testing</p>
  </div>
</body>
</html>

没什么特别的,只是一个简单的页面,里面有一个 div 和一个段落。

但是您可以注意到,在 css 中,我声明该段落远离 div 边界 40px...并且发生了这种情况

没错...上边距和下边距被忽略...

但是如果我在div 上添加一个 1px 的红色边框,例如:

div
  width: 200px;
  background: green;
  border: 1px solid red;

这是我得到的:

所以是的,这对我来说真的很奇怪...这发生在 safari 中,但我确信它会在其他浏览器上发生同样的情况...我的问题是..为什么会这样?

有什么办法可以解决吗?

提前致谢

【问题讨论】:

见:***.com/questions/4910060/… 【参考方案1】:

如果你添加:

overflow: auto;

对于您的 div 的 CSS,它应该解决这个问题。

【讨论】:

【参考方案2】:

我认为您看到了一个折叠边距的示例,您可以阅读有关 here 的更多信息

【讨论】:

This is also an old but good article Eric Meyer 讲述正在发生的事情以及如何阻止它。

以上是关于css margin-top 属性仅在声明边框时才有效[重复]的主要内容,如果未能解决你的问题,请参考以下文章

第17章 CSS边框与背景(上)

解决margin-top塌陷问题的六种方法

CSS:仅在包含特定元素时才选择元素[重复]

学习css 在用margin进行布局的时候,内层使用margin-top应该是相对于父层边框定位,为啥连父层也一起移动

ASP.NET - 如何仅在尚未包含 CSS 时才包含它?

css 仅在存在URL参数时才显示第一部分