我尝试在另一个div内的一个div上添加边缘值。所有工作都很好,除了顶部值,它似乎被忽略了。但是为什么呢?

我的期望是:

我得到的是:

代码:

#{外 宽度:500 px; 身高:200 px; 背景:# FFCCCC; Margin: 50px auto 0 auto; 显示:块; } #{内部 背景:# FFCC33; Margin: 50px 50px 50px 50px; 填充:10 px; 显示:块; } < div id = "外" > < div id = "内部" > 你好世界! < / div > < / div >

W3Schools没有解释为什么margin会这样。


当前回答

我想将#inner div的位置属性设置为相对也可以帮助实现这个效果。但无论如何,我尝试了粘贴在IE9和最新的谷歌Chrome浏览器上的问题的原始代码,他们已经给出了理想的效果,没有任何修改。

其他回答

只是为了快速修复,尝试像这样将子元素包装成div元素-

<div id="outer">
   <div class="divadjust" style="padding-top: 1px">
      <div id="inner">
         Hello world!
      </div>
   </div>
</div>

内部div的边距不会因为外部和内部div之间1px的填充而崩溃,所以逻辑上你会有1px的额外空间以及内部div的现有边距。

没有回答“为什么”(必须是w/边距折叠的东西),但似乎最简单/最合乎逻辑的方法来做你正在尝试做的事情,将只是添加padding-top到外部div:

#{外 宽度:500 px; 身高:200 px; 背景:# FFCCCC; Margin:50px auto 0 auto; padding-top: 50 px; } #{内部 背景:# FFCC33; Margin:0px 50px 50px 50px; 填充:10 px; } < div id = "外" > < div id = "内部" > 你好世界! < / div > < / div >

注意:没有必要将div设置为display:block;除非你的代码中有其他东西告诉它不是block。

我想将#inner div的位置属性设置为相对也可以帮助实现这个效果。但无论如何,我尝试了粘贴在IE9和最新的谷歌Chrome浏览器上的问题的原始代码,他们已经给出了理想的效果,没有任何修改。

尝试使用display: inline-block;在内部div上,就像这样:

#outer {
    width:500px; 
    height:200px; 
    background:#FFCCCC;
    margin:50px auto 0 auto;
    display:block;
}
#inner {
    background:#FFCC33;
    margin:50px 50px 50px 50px;
    padding:10px;
    display:inline-block;
}

不知道为什么你没有工作,但你可以添加overflow: auto;到外部div。