FF的margin-top bug 其实不是bug…2008-07-25 10:00:23| 分类: WEB标准化 | 标签:css 标准化 |字号大中小 订阅 .
在这个说明中,“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的值。
分享到:
相关推荐
在上述代码中,`.errorstyle`元素的`margin-top`在Firefox和IE8中会导致意外的样式效果。为了解决这个问题,我们可以采用以下两种常见策略: 1. **使用浮动布局(float)**: 将`.errorstyle`的`display`属性设置...
在 Firefox 中,`padding` 属性可以接受四个值来分别设置上下左右的内边距,但在 IE 中则不支持这种写法。为了兼容这两种浏览器,应分别设置每个方向上的内边距: ```css padding-top: 5px; padding-right: 4px; ...
- **消除列表缩进**:在消除`ul`、`ol`等列表的缩进时,`margin`属性对IE有效,`padding`属性对FireFox有效。 - **样式**:`list-style: none; margin: 0px; padding: 0px;` 5. **CSS透明度与圆角支持** - **...
- **问题描述**:在水平方向上,如果一个浮动的容器没有定义宽度,那么在Firefox中,内容可能会撑开容器的宽度;而在IE中,容器会优先考虑内容折行。 - **解决办法**:为了解决这个问题,对于可能出现撑破情况的浮动...
在IE中,元素的实际宽度等于`margin-left + width + margin-right`,而在Firefox/Mozilla中,实际宽度则等于`margin-left + border-left-width + padding-left + width + padding-right + border-right-width + ...
Firefox (FF) 会限制容器的高度,即使指定了 `height`,内容也不会撑高容器,而 IE 则相反。因此,避免对容器设定固定的高度,除非你能确保内容不会超过这个高度。 3. **横向撑破容器**: 在 FF 下,没有设定宽度...
在 IE 中,设置 margin:0px 可以去除列表的上下左右缩进、空白以及列表编号或圆点,而在 Firefox 中,设置 margin:0px 只能去除上下的空白,需要同时设置 padding:0px 以及 list-style:none 才能达到最终效果。...
在不同浏览器上,margin有时也会表现出不同的效果,比如在早期的IE浏览器中与标准浏览器(如Firefox、Chrome)中的表现就可能不同。开发者在调试时需要对这些细节有所了解,并在必要时使用浏览器特定的前缀或者兼容...
然而,这种方法在Firefox中会导致`margin-top`无效,因此当图像和文本框高度一致时,它们在Firefox中能够完美对齐。 对于水平方向的对齐,Firefox浏览器中两个元素可以靠得很紧,但在IE浏览器中,它们之间会存在...
- **问题描述**:当使用`float`布局时,如果未定义宽度,则Firefox中容器的宽度可能会被内容撑开,而在IE中则可能会自动换行。 - **解决方案**:对于可能被内容撑破的浮动容器,最好明确指定宽度(例如`width: 100...
- **Firefox/Mozilla**:对象的实际宽度 = (margin-left) + (border-left-width) + (padding-left) + width + (padding-right) + (border-right-width) + (margin-right)。 #### 四、鼠标手势支持 - **FireFox** 的...
**问题描述**:在Firefox中,如果为容器设置了`height`属性,则该容器的尺寸将不会被内部内容撑大,即使内容超过了容器的高度限制。但在IE下,容器会被内容撑大,高度限定变得无效。 **解决方案**:尽量避免给容器...
6. **镜像边距bug**(mirror margin bug):IE6中,如果外层元素包含浮动元素,并且设置了`margin-top`,会自动生成`margin-bottom`。解决方案是为外层元素添加`border`或`float`属性。 7. **吞吃现象**:IE6有时会...
4. Firefox 中标签的居中问题可以使用 *{margin:0px auto;} 来解决。 解释:在 CSS 中,可以使用 * 选择器来选择所有元素,并使用 margin:0px auto; 来实现居中布局。 5. XHTML 和 CSS 的注释方法是使用 /* 注释...
4. Firefox 中标签的居中问题的解决方法是使用 {*margin:0px auto;}。 5. XHTML 和 CSS 的注释方法是 <!--注释内容--> 或者 /*注释内容*/。 6. 写出 1px 直线灰色,上面无边框的矩形边框样式可以使用 border:1px ...
DIV-CSS-必考题 CSS面试题目解析 1. 超链接访问过后 hover 样式不出现的问题...知识点解析:在 Firefox 中,嵌套 div 标签的居中问题可以使用 margin:auto 的方法来解决。这样可以在 Firefox 中实现 div 的居中放置。
在Firefox中,如果容器定义了height属性,那么边框外形确定后不会被内容撑大,而在IE中则会根据内容进行撑大。因此,在定义容器高度时要小心,尽量避免使用height属性,或者可以使用min-height来代替,这样能够保证...