欢迎光临
我们一直在努力

CSS | div不能设置magin-top

当两个容器嵌套时,如果外层容器和内层容器之间没有别的元素,firefox会把内层元素的margin-top作用与父元素。

代码如下 :

<div>上部层</div>

<div> <!--父层-->
     <div style="margin-top:200px;">子层</div>
</div>

理想中的效果是父层和上部层贴边显示,子层距离父层顶部有200px的距离,在ie中正常,但是在ff中却出现问题,子层和父层贴边了,而父层和上部层却间隔了200px。

错误原因:当两个容器嵌套时,如果外层容器和内层容器之间没有别的元素,firefox会把内层元素的margin-top作用与父元素。

也就是说因为子层是父层的第一个非空子元素,所以使用margin-top会发生这个错误。

解决的办法有两个:

1、使用浮动来解决,即将子层代码改为:

<div style="margin-top:200px;float:left";>子层</div>

2、使用padding-top来解决,即:

<div style="padding-top:200px;">
    <div>子层</div>
</div>

常常可以碰到这样一个问题,就是外层DIV设置了高与宽,内层DIV如果设置maring-top不起作用(FIREFOX和IE8中测试),原因大致是内层div没有获得布局。

<style>

.aDiv {background:red; width:300px; height:300px; }
.bDiv {background:green; position:relative; width:100px; height:20px; margin-top:10px;}
.cDiv {background:black; position:relative; width:100px; height:20px;}
</style>

<div class="aDiv">
<div class="bDiv"></div>
<div class="cDiv"></div>
</div>

测试发现,bDiv的margin-top不起作用,仍是0px的显示效果。如果在firefox中用firebug查看,可以看到margin-top是有值的,为10px;解决问题如下:

1、把margin-top改成padding-top,不过,前提是内层的Div没有设置边框
2、给外层的Div加padding-top
3、给外层DIV加下面四个的一种:

float: left或right

position: absolute

display: inline-block或table-cell或其他 table 类型

overflow: hidden或auto

比如,可以更改上述代码如下:

<style>

.a {background:red; width:300px; height:300px; float:left; }
.b {background:green; position:relative; width:100px; height:20px; margin:10px;}
.c {background:black; position:relative; width:100px; height:20px;}

.clear{ clear:both;}
</style>

<div class="a">
<div class="b"></div>
<div class="c"></div>
</div>

<div class="clear"></div>

注意:后面要加一个清除浮动。

赞(0) 打赏
未经允许不得转载:散人研 » CSS | div不能设置magin-top
分享到: 更多 (0)

评论 抢沙发

6 + 9 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏