css 如何解决margin-top使父元素margin失效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了css 如何解决margin-top使父元素margin失效相关的知识,希望对你有一定的参考价值。

怎么失效。你是说父子元素的margin合并吧。
子元素的margin-top如果是20px
父元素的是10px
那么合并之后的效果就是20px。
感觉好像父元素的margin-top=10px不起作用了

如果你想避免发生父子间的margin合并现象。
就必须要给父元素设置padding。或者border
把父子的margin之间隔开。

一般来说,为父元素设置一个1px的padding-top就可以了。
参考技术A 定义了margin,然后把margin-top的值写在人家屁股后面,前面的margin就失灵了。。嗯,应该说是它被覆盖了、、因为对于同一个样式值,只会调用最后面的那一个。。

嗯,希望对你有所帮助。。

CSS显示:inline-block不接受margin-top?

【中文标题】CSS显示:inline-block不接受margin-top?【英文标题】:CSS display: inline-block does not accept margin-top? 【发布时间】:2011-11-28 11:44:21 【问题描述】:

我有一个带有 display: inline-block 的元素,但它似乎不接受 margin-top。这是因为该元素仍被视为内联元素吗?

如果是,有没有人有解决方法?


编辑#1

我的 CSS 很简单:

.label 
  background: #ffffff;
  display: inline-block;
  margin-top: -2px;
  padding: 7px 7px 5px;

我最终将内容包装在另一个 div 中并给它一个 margin-top。但这会导致大量额外的标记并使我的代码不太清晰。

编辑#2

inline-block 元素上的margin-topmargin-bottom 似乎只适用于正值。

【问题讨论】:

确定可以,如果您需要我们的帮助,请发布您遇到问题的标记和 css 否,为了进一步提供帮助,我们需要查看您的代码。这是一个有用的链接虽然blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block 我有几个布局,内联块元素使用边距定位,甚至是顶部边距 【参考方案1】:

您也可以尝试将负边距替换为

.label
    position:relative;
    top:-2px;

除了你的 .label 风格的其余部分

【讨论】:

position: relative 会将元素相对于其位置向上移动 2px,但不会移动其下方的其余内容。还是谢谢。 你可以添加margin-bottom:-2px.label来平衡它,你不必添加额外的div。但是,如果您想将所有内容从标签向下移动,那么在 .label 之前的任何内容上设置 margin-bottom:-2px 会不会更容易? 内联块元素的负边距顶部或底部不起作用,正如我们之前发现的那样。 :) 不是一个好的解决方案。 position:relative; 总是占用空间。你最终在下面有不必要的2px【参考方案2】:

我使用了display: table。它具有 inline-block 的内容拟合属性,但也支持负边距,从而将跟随它的内容一起移动。可能不是您应该如何使用它,但它确实有效。

.label 
  background: #ffffff;
  display: table;
  margin-top: -2px;
  padding: 7px 7px 5px;

【讨论】:

对与否,我不知道,但它也解决了我的问题。 @baohouse 太棒了!【参考方案3】:

你可以像这样尝试vertical-align

.label 
  background: #ffffff;
  display: inline-block;
  margin-top: -2px;
  vertical-align: 2px;
  padding: 7px 7px 5px;

我在 jsfiddle 上做了一个例子:http://jsfiddle.net/zmmbreeze/X6BjK/. 但垂直对齐在 IE6/7 上效果不佳。还有一个opera(11.64)渲染bug。

所以我建议改用position:relative

【讨论】:

2018年在em(或%)中使用vertical-align的可靠性如何?【参考方案4】:

确实如此。您可以使用填充来代替边距。另一种解决方案是为元素使用容器 div。您将那个 div 设为inline-block,并将您当前的元素设为该容器内的一个块。然后,您可以为元素设置边距。

如果你有一个具体的例子会有所帮助,最好是在 jsfiddle.net 左右。它也将有助于更具体的答案,而不是像我在这里那样只包含一般描述。 ;)

【讨论】:

它似乎在 chrome 和 IE8 中运行良好。这是浏览器特定的问题吗? jsfiddle.net/PeNks 我需要一个负边距,它似乎确实适用于正边距。 :( lteIE7仅在应用于inline元素时支持inline-block,不支持s等块元素。

以上是关于css 如何解决margin-top使父元素margin失效的主要内容,如果未能解决你的问题,请参考以下文章

bottom没有效果,css 设置margin-top或margin-bottom失效不取作用的解决方法

CSS清除浮动使父级元素展开的三个方法

怎样能使父元素随子元素的高度变化而变化(css样式

CSS总结

CSS显示:inline-block不接受margin-top?

子元素的margin-top影响父元素原因和解决办法