多个div嵌套时,内部div的上间距(margin-top)会带动外围div一起,怎样解决这种问题呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个div嵌套时,内部div的上间距(margin-top)会带动外围div一起,怎样解决这种问题呢?相关的知识,希望对你有一定的参考价值。

参考技术A 不要用margin 用padding 给外面的盒子加padding-top 参考技术B 给父元素加 overflow:hidden; 有问题请追问

jQuery,切换 div,CSS 间距问题

【中文标题】jQuery,切换 div,CSS 间距问题【英文标题】:jQuery, toggling div, CSS spacing issue 【发布时间】:2011-01-18 00:27:32 【问题描述】:

我有这个标记:

<div class="myToggledDiv">
    <div>content</div>
</div>

<div style="margin-top: 10px;">
    content
</div>

通过 jQuery,我正在使用 .slideToggle 来显示/隐藏顶部 div。

我希望两个 div 之间始终保持 10px 的空间,无论是折叠还是展开。

然而,当顶部 div 向下滑动时,10px 边距仍然存在,但一旦顶部 div 完成向下滑动,10px 边距就会消失。这似乎是一个保证金崩溃问题。

我想出的解决方案是这样的:

<div class="myToggledDiv">
    <div>content</div>
</div>

<div style="font-size: 1px">&nbsp;</div>

<div style="margin-top: 10px;">
    content
</div>

 是关键,因为 div 中需要有内容来“分离”两者并保留 10px 的边距。

我也尝试了 .clearfix:after 方法,但这在这种情况下不起作用,所以这可能是一个以 jQuery 为中心的问题。有没有人遇到过这个问题并找到了比额外的 div 更优雅的解决方案?

【问题讨论】:

【参考方案1】:

信不信由你,您只需在父容器顶部添加一个1px 填充。问题是,在slideToggle 的末尾,第一个div 设置为display:none,这会导致第二个div 对父级进行轻拍。现在,它只是一个 CSS 错误。如果父项上没有设置padding,则子项的边距将移到父项的外部,并将两个项向下推。通过对父元素应用1px 边距,可以强制margin 留在元素内:

<body style="padding-top: 1px">
  <div class="myToggledDiv">
      <div>content</div>
  </div>

  <div style="margin-top: 10px;">
      content
  </div>
</body>

显然,您希望删除所有这些内联样式并根据需要使用单独的样式表和 id/类。

如果您需要抵消额外的填充(取决于您的布局),您也许可以使用这个:

 margin-top: -1px; padding-top: 1px 

【讨论】:

【参考方案2】:

有点奇怪的解决方法,但您可以为第二个 div 设置以下规则:

 position:relative; top:10px; 

在线演示:http://jsbin.com/enala/edit

我也鼓励您考虑Doug's Answer。如果在父容器上设置填充会产生不希望的结果,您可以使用此解决方案作为替代方案。

【讨论】:

是的,这也有效。我喜欢 CSS 有多种解决问题的方法!

以上是关于多个div嵌套时,内部div的上间距(margin-top)会带动外围div一起,怎样解决这种问题呢?的主要内容,如果未能解决你的问题,请参考以下文章

div和div之间的空隙如何设置

18-CSS问题-让多个div横排显示并设置间距解决方案

怎么让两个div之间没有间距?

div中设置背景图片,这个div中再嵌套一个div,并且设置margin-top为啥嵌套的块会移出去

div 之间的间距(边距?)

嵌套div的margin-top使用注意