视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
关于内层DIV设置margin-top不起作用的解决方案
2020-11-27 18:50:51 责编:小采
文档

(一)

近日在做另外一个站点的时候,又遇到这个问题,决定好好的研究解决一下。

代码如下:

<p>上部层</p>

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

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

百思不得其解,求助google,得到如下的一句:

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

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

解决的办法有两个:

1、使用浮动来解决,即将子层代码改为:<p style="margin-top:200px;float:left";>子层</p>

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

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

(二)

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

<style>

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

<p class="ap">
<p class="bp"></p>
<p class="cp"></p>
</p>

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

1、把margin-top改成padding-top,不过,前提是内层的p没有设置边框
2、给外层的p加padding-top
3、给外层p加:

A、float: left或right

B、position: absolute

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

D、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>

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

<p class="clear"></p>

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

下载本文
显示全文
专题