转-firefox浏览器下margin-top不起作用的原因和对策

“collapsing
margins”(折叠margin)的意思是:2个或以上盒模型之间(关系可以是相邻或嵌套)相邻的margin属性(这之间不能有非空内容、
padding区域、border边框或使用清除分离方法)结合表示为一个单独的margin。
在css2.1中,水平的margin不会被折叠。

垂直margin可能在一些盒模型中被折叠:
1、在常规文档流中,2个或以上的块级盒模型相邻的垂直margin会被折叠。

最终的margin值计算方法如下:
a、全部都为正值,取最大者;
b、不全是正值,则都取绝对值,然后用正值减去最大值;

c、没有正值,则都取绝对值,然后用0减去最大值。
注意:相邻的盒模型可能由DOM元素动态产生并没有相邻或继承关系。

2、相邻的和模型中,如果其中的一个是浮动的(floated),垂直margin不会被折叠,甚至一个浮动的盒模型和它的子元素之间也是这样。

3、设置了overflow属性的元素和它的子元素之间的margin不会被折叠(overflow取值为visible除外)。

4、设置了绝对定位(position:absolute)的盒模型,垂直margin不会被折叠,甚至和他们的子元素之间也是一样。

5、设置了display:inline-block的元素,垂直margin不会被折叠,甚至和他们的子元素之间也是一样。

6、如果一个盒模型的上下margin相邻,这时它的margin可能折叠覆盖(collapse
through)它。在这种情况下,元素的位置(position)取决于它的相邻元素的margin是否被折叠。

a、如果元素的margin和它的父元素的margin-top折叠在一起,盒模型border-top的边界定义和它的父元素相同。

b、另外,任意元素的父元素不参与margin的折叠,或者说只有父元素的margin-bottom是参与计算的。如果元素的border-top非零,那么元素的border-top边界位置和原来一样。

一个应用了清除操作的元素的margin-top绝不会和它的块级父元素的margin-bottom折叠。

注意,那些已经被折叠覆盖的元素的位置对其他已经被折叠的元素的位置没有任何影响;只有在对这些元素的子元素布局时,border-top边界位置才是必需的。

7、根元素的垂直margin不会被折叠。
浮动的块级元素的margin-bottom总是与它后面的浮动块级兄弟元素(floated next
in-flow block-level sibling)的margin-top相邻,除非那个同级元素使用了清除操作。

动的块级元素的margin-top和它的第一个浮动块级子元素(floated first in-flow block-level
child)的margin-top相邻(如果该元素没有border-top,没有padding-top,并且子元素没有使用清除操作)。

浮动的块级元素的margin-bottom如果符合下列条件,那么它和它的最后一个浮动块级子元素的margin-bottom相邻(如果该元素没有指定padding-bottom或border):

a、指定了height:auto
b、min-height小于元素的实际使用高度(height)

c、max-height大于元素的实际使用高度(height)

果一个元素的min-height属性设置为0,那么它所拥有的margin是相邻的,并且它既没有border-top和border-
bottom,也没有padding-top和padding-bottom,它的height属性可以是0或auto,它不能包含一个内联的盒模型 (line
box),它所有的浮动子元素(如果有的话)的margin也都是相邻的。

当一个元素拥有的margin折叠了,并且它使用了清除操作,那么它的margin-top会和紧随其后的兄弟元素的相邻margin折叠,但结果是它的margin将无法和其块级父元素的margin-bottom折叠。

折叠操作是以padding、margin、border的值为基础的(即在浏览器解析所有这些值之后),折叠后的margin计算将覆盖已使用的不同margin的值。

[复制此代码]CODE:
<div id="d0"
style="background-color:#333333;height:500px;">
<br
style="line-height:0;"/>

//不加入br这一行,在FIREFOX中id1的margin-top:20px将会在d0上作用,使d0上方与body间有20px的间距,d1与d0的上方没有间距,而IE内正常显示

<div id="d1"
style="background-color:#000000;margin-top:20px;height:100px;"></div>

<div id="d2"
style="background-color:#000000;margin-top:20px;height:100px;"></div>

</div>

时间: 2024-11-03 03:35:08

转-firefox浏览器下margin-top不起作用的原因和对策的相关文章

解决SWFUpload在Chrome、Firefox浏览器下session找不到的问题

SWFUpload是一个非常不错的异步上传组件,但是在Chrome.Firefox等浏览器下使用的时候会有问题.问题如下:为了防止跳过上传页面直 接向“接受SWFUpload上传的一般处理程序”(假如是Upload.ashx)发送请求造成WebShell漏洞,我的系统中对于 Upload.ashx进行了权限控制,只有登录用户才能进行上传.在IE下没问题,但是在Chrome下运行报错“用户未登录”. 经过搜索得知:因为SWFUpload是靠Flash进行上传的,Flash在IE下会把当前页面的Co

解决IE、firefox浏览器下JS的new Date()的值为Invalid Date的问题

当我们需要将一串日期字符串转换为具体的Date格式的时候,往往需要用到new Date("xxxx")方法. 当时在IE浏览器下,会遇到这种问题: new Date('2016-01-01 00:00:00') //却返回这个值Invalid Date,转换失败 但是这个方法却在谷歌浏览器上可以返回正确的结果. 解决方式:最终发现是字符串的格式不被某些浏览器失败,而导致的. new Date('2016/01/01 00:00:00') //这下就转换正确了Wed Jan 1 00:0

jquery中ajax在firefox浏览器下“object XMLDocument”返回结果的解决办法

asp.net中借助jquery的ajax处理功能,使用起来很方便.但是在firefox下获得的data报错object XMLDocument.这是因为默认的情况下把datatype用html来解析了,所以只要设置一下datatype就可轻松解决了. $.ajax({ type: "get", cache: false, url: "/bubuko_checkLogin.aspx", data: "", dataType: "text

firefox浏览器播放音频

之前做的系统,在firefox浏览器下有更好的使用体验.因此要求客户统一使用firefox浏览器,前段时间客户要求在系统中加入音频效果. 在网上查了下,主要用到的标签有<bgsound>, <embd>, <audio>等等.其中<audio>标签是html5中新加入的对声音定义的标签.<bgsound>是IE的专用标签,只适用于IE浏览器.<embd>标签在firefox下,会要求你安装相关的插件.还好目前的新版本firefox浏览

IE浏览器下Fiddler无法本地调试的问题

首先我们应该了解,这个无法本地调试的问题并不是个BUG,微软官方是有给出过解释的,这是源于IE浏览器和.NET框架对于本地请求是不走代理 的,因而Fiddler无法检测数据.当然,你也可以使用Firefox浏览器进行调试,目前fiddler的最新版本已经支持Firefox.不过这里 我们也给出了在IE浏览器下的解决方案. 1.使用机器名代替localhost或者12.7.0.1,例如,你之前使用http://localhost:8081/mytestpage.aspx来访问,那换成 http:/

(转)如何让ActiveXObject( &quot;Microsoft.XmlDom &quot;)对象在非IE浏览器下显示数据?firefox(火狐)

如何让ActiveXObject( "Microsoft.XmlDom ")对象在非IE浏览器下显示数据?firefox(火狐) 2013-09-10 16:01 2152人阅读 评论(0) 收藏 举报 在IE浏览器下,xmlDom对象一般这样被定义: [html] view plaincopy var xmlDom= new ActiveXObject("Microsoft.XMLDOM"); 为了兼容Firefox,需要修改为: [html] view plai

IE下及标准浏览器下的图片旋转(一)——滤镜,CSS3

关于图片的旋转,一般来说有3种解决方案:(1)滤镜 (2)css3 (3)canvas.接下来逐一讲解. 为了方便理解,我们主要以90度整倍数讲解,兼顾其他角度. 1. 滤镜(IE专属) 1.1 旋转滤镜 语法如下: filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=i); rotation取值0(0或360度),1(90度),2(180度),3(270度).取其他数无效. 旋转90度示例: css: #box {     

IE浏览器下常见的CSS兼容问题

[1]IE6-浏览器下子元素能撑开父级设置好的宽高 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> body{ margin: 0; } ul{ margin: 0; padding: 0; list-style: none; } .list{

IE下margin:0 auto为什么不居中?

http://blog.sina.com.cn/s/blog_68c6be330101k7kn.html 我们经常用DIV+CSS布局网页的时候,正常情况下需要将div居中显示时,使用Css样式:margin:0 auto就可以了,但有时使用margin:0 auto后在FireFox浏览器.谷歌Chrome浏览器里能居中,而在IE678里却不能不居中. 例如以下代码: <style type="text/css"> #con{width:980px;martin:0 au