`
koolC
  • 浏览: 19358 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Firefox浏览器BUG:解析margin-top出现双边距

阅读更多
<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gbk">
        <title>火狐浏览器的怪癖</title>
        <style>
            *{ margin:0; padding:0; }
            body{ font:12px/1.5 tahoma,arial,\5b8b\4f53; border: 1px dotted red; }
            .clearfix:after{ clear:both; content:''; display:block; height:0; }/* 如果设置overflow:auto/hidden,该现象消失 */
            .clearfix{ zoom:1; }/* 如果设置overflow:auto/hidden...(非visible),该现象消失 */
            ul li{ float:left; margin-right:30px; }
            .box{ margin:auto; width:900px; }
            .bottom{ margin-top:100px; }
        </style>
    </head>
    <body>
        <div class="box"><!-- 不要给box设置border/padding,否则这种现象就不会出现了 -->
            <ul class="clearfix"><!-- 块状元素 -->
                <li><!-- 设置浮动 -->
                    WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
                </li>
                <li><!-- 设置浮动 -->
                    QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
                </li>
            </ul>
            <div class="bottom"><!-- 调节bottom的margin-top值,你会很容易发现这种现象 -->
                PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
            </div>
        </div>
    </body>
</html>

    最近,我在做网页时发现一个唯独在火狐(在IE6~9、Firefox、Chrome下均测过)下出现的怪问题——垂直margin双倍外边距问题。注意这不是大家常谈的margin-top失效问题(即collapsing margins,margin折叠/合并问题 ),我想这应该算是火狐的一个BUG,或者不知名的机制造成,出问题的代码如上,具体在火狐显示效果如下:

图1



 图2



 图3

    大家可以通过不断调节.bottom的margin-top值更深刻地感受一下火狐送给我们的“美味”!再在其他浏览器(如Chrome、IE)试验一下,是不是这个现象就没了呢?

    其实,这种解决这个火狐下问题的办法倒是多种多样,如通过padding、border、overflow、inline或height等方法都能解决,而且可以审时度势地采取办法,对于最终的页面效果倒是没什么影响。

    但是,我不想只知其所以然,而不知为何然。通过举出这个例子,只是想探究火狐依赖的是什么机制才这样解析的,这到底是不是火狐的BUG呢?或者说,这是火狐的亮点呢,还是缺点?

    这个问题已经困扰我好久了,查了很多资料却没有这方面的。亲爱的网友们,如有对这方面感兴趣的,知道这个问题答案的同志,还请不吝赐教!小弟敬候佳音!

 

  • 大小: 83.9 KB
  • 大小: 127.5 KB
  • 大小: 90 KB
0
0
分享到:
评论
2 楼 beowulf2005 2012-02-20  
.box{ margin:auto; width:900px; } 
auto的问题, 把 auto改成0试下
1 楼 koolC 2012-02-20  
javaEEdevelop 写道
什么firefox version啊,把你html代码发过来瞧瞧啊,

代码在这篇blog上,火狐常用版本都可以,只要不是特别特别低的就行~~~

相关推荐

    CSS种针对浏览器兼容问题的解决方法

    在计算元素的实际宽度时,IE 和 Opera 使用的公式是 `(margin-left) + width + (margin-right)`,而 Firefox 和 Mozilla 使用的是 `(margin-left) + (border-left-width) + (padding-left) + width + (padding-right...

    css 多浏览器兼容解决方案 下载

    IE和Firefox对BOX模型的解析不同,IE使用“怪异盒模型”(包含边框和内填充的总宽度和高度),而Firefox等其他浏览器遵循“标准盒模型”(仅计算内容区域的宽度和高度)。解决办法是在CSS中使用`box-sizing:border-...

    DIV+CSS浏览器兼容方法的总结

    - 当一个元素设置了`float`属性并且具有`margin`时,在IE6中可能会出现双边距bug。 - 解决方案是将`float`元素的`display`属性设为`inline`。 - 示例代码: ```css div { float: left; margin-left: 10px; ...

    浏览器兼容代码大全

    这些代码片段利用CSS的特性,为Firefox、Safari、Chrome和Opera浏览器设置了不同的宽度值。通过特定的CSS选择器和媒体查询,可以针对不同浏览器进行个性化定制。 ##### IE条件注释 ```html &lt;!--[if lte IE 6]&gt; &lt;!...

    H5 面试题总结

    ### H5前端面试题知识点详解 ...##### 1. 测试过的浏览器及其内核 ...- IE6/7/8 的特定问题(如双边距 bug)。 以上内容涵盖了H5前端面试题中的核心知识点,希望能帮助你在面试过程中更加自信地应对各种问题。

    面试宝典之吊打面试官系列

    - **问题**: IE的双边距BUG:块级元素float后设置横向margin,ie6显示的margin比设置的较大。 - **答案**: 这是IE6的一个bug,可以通过添加额外的负margin或使用CSS hack来解决。 **38. HTML与XHTML的区别** - **...

    web前端面试宝典

    - **Firefox**: Gecko引擎 - **Safari**: WebKit引擎 - **Edge (旧版)**: EdgeHTML引擎 - **IE**: Trident引擎 - **Opera**: Blink引擎 **测试覆盖要点**: - 布局的一致性 - 功能的完整性 - 性能和渲染速度 - 兼容...

    DIV+CSS解决各浏览器兼容问题

    IE6存在一个著名的双边距BUG,即当元素设置为`float`属性后,其左右`margin`会出现加倍现象。解决此问题可以通过添加!important声明来覆盖IE6的错误计算: ```css margin-left: 10px !important; /* IE7, IE8, FF ...

    css_bug与解决方法

    当元素设置为`float`后,在IE6/7中会出现margin双边距问题,即元素的左边距或右边距被加倍计算。这种现象在示例代码中通过设置`float:left`和`margin-left:10px`得以体现,IE6/7下实际应用的`margin-left`值会超过...

    前端面试题汇总

    - **兼容性问题**: 如IE6双边距BUG。 - **解决方法**: 使用条件注释或特定浏览器的CSS Hack。 **44. display属性** - **值**: `block`, `inline`, `inline-block`, `flex`, `grid`等。 - **作用**: 控制元素的显示...

    CSS兼容性问题解决方案[归类].pdf

    在 IE 中,可以使用 border:2px outset 来实现双边框,而在 Firefox 中,可以使用 -moz-border-top-colors: #d4d0c8 white; 等属性来实现双边框。 9. 浏览器 bug 浏览器 bug 是一个常见的问题。在 IE 中,存在双边...

    前端面试题

    - **Firefox**:Gecko内核。 - **Chrome**:Blink内核。 - **Opera**:Presto内核。 - **IE6 BUG解决方法**: - **双边距BUG**:使用`display`属性来解决`float`引起的问题。 - **3像素问题**:使用`display:...

    2015前端面试题(含答案)1

    - **IE6双边距bug**:浮动元素的宽度计算问题,可使用负margin或`display:inline-block`解决。 此外,前端开发者还需了解: - **Web标准**:理解W3C标准,关注语义化HTML和CSS规范。 - **浏览器内核差异**:处理...

    javascript面试题

    **40、IE 的双边距 BUG:块级元素 float 后设置横向 margin,ie6 显示的 margin 比设置的较大。解决:加入 _display:inline** 此 bug 在 IE6 中较为常见,解决方法是在元素上添加 `_display: inline` 或使用其他 ...

    前端开发面试题.pdf

    - IE6双边距bug:可以使用`_display:inline;`修复。 - 渐进增强和回退策略:使用条件注释或CSS hack处理不同IE版本的差异。 - 自定义属性和事件对象属性:统一使用`getAttribute()`获取自定义属性,并处理`event`...

    web前端面试题

    - IE6 的双边距 bug 是指当块级元素设置 float 并同时设置横向 margin 时,IE6 下的 margin 会出现双倍的现象。 **38. HTML 与 XHTML ——二者有什么区别?** - HTML 是一种更为宽松的标记语言规范。 - XHTML 是 ...

    CSS 多浏览器兼容性问题及解决方案

    需要注意的是,`margin`属性主要针对IE浏览器,而`padding`则针对Firefox浏览器。 - 在处理CSS透明度时,可以为IE浏览器和Firefox分别设置不同的属性:`filter: progid:DXImageTransform.Microsoft.Alpha(style=0,...

    iebug总结jar包

    1. **IE6的渲染引擎**:IE6使用的是Trident渲染引擎,它与现代浏览器(如Chrome、Firefox等)使用的WebKit或Blink引擎存在较大差异,导致HTML和CSS的解析方式不同,从而产生兼容性问题。 2. **盒模型问题**:IE6对...

Global site tag (gtag.js) - Google Analytics