`
jianhan513
  • 浏览: 20730 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于float元素的margin collapse问题

阅读更多

关于空白边叠加的问题,原来觉得很简单,现在发现完全不只书上写的几种情况,特别是元素浮动后,在IE各版本的浏览器下存在比较大的显示差异。虽然影响不大,但由于经常会用到,决定把问题整理出来。先把我测试的部分结果列出来,慢慢再找所以然吧!拿个具体的eg来看:
 <style>
body{margin:0;padding:0;font-size:12px;line-height:18px;}
.container { clear:both; float:left; width:500px; margin:10px; display:inline; background-color:#eee;}

.fl{ float:left; width:100%;margin:10px auto; background:#FF3366;color:#eee;}
.nof{ clear:both; background:#FF3366; color:#eee; margin:10px auto; }
.c {  clear:both; }
</style>

 

<div class="container">
  <div class="fl">float left,margin:10px auto</div>
  <div class="nof" onclick="alert(this.offsetHeight)">no float,margin:10px auto</div>
 </div>
 <div class="container">
  <div class="fl">float left,margin:10px auto</div>
  <div class="fl">float left,margin:10px auto</div>
 </div>
 <div class="container">
  <div class="nof">no float,margin:10px auto</div>
  <div class="fl">float left,margin:10px auto</div>
 </div>

第一种情况,float元素在上,非float元素在下

 <div class="container">                                             
     <div class="fl">float left,margin:10px auto</div> <!--div1--> 
     <div class="nof">no float,margin:10px auto</div><!--div2-->
 </div> 

在IE6,IE7下,两个div之间的margin为20px,而ff和IE8为10px,如果在两个div元素之间加<div class="c"></div>则IE各版本和ff均为20px;

a:如果 div2去掉clear:both;按照盒模型的解释, div1从正常文档流中拿出,但仍保留其空间,而div2是和div1从同一位置开始,即两者的margin-top起始位置是重合的,然后是div1的内容高度和margin-bottom,最后再加上div2的内容高度和margin-bottom;

即div2不清除浮动时,ie7,ie8,ff实际占据空间高度为:

margin-top(max(div1,div2))+height(div1)+margin-bottom(div1)+height(div2)+margin-bottom(div2)

可用<div class="nof" onclick="alert(this.offsetHeight)">验证,

ie6下div2则完全从margin-top(div1)+height(div1)+margin-bottom(div1)之后开始 

b:如果 div2带clear:both;ie6、ie7下

div2则完全从margin-top(div1)+height(div1)+margin-bottom(div1)之后开始,不发生margin collapse;

ie8,ff下

div2从div1的内容高度结束位置开始,发生margin collapse

c:在div1和div2之间加:<div class="c"></div>,ie6,ie7,ie8,ff显示一致,div1和div2之间为20px

 

第二种情况,两个float元素

<div class="container">                                        
  <div class="fl">float left,margin:10px auto</div>
  <div class="fl">float left,margin:10px auto</div>
 </div>                                                                   

主要是IE7下,最后一个浮动元素margin-bottom失效的bug

 

第三种情况,非float元素在上,float元素在下 

<div class="container">                                           
  <div class="nof">no float,margin:10px auto</div><!--div5-->
  <div class="fl">float left,margin:10px auto</div><!--div6--> 
 </div>

ie6下比较诡异,div6下面多出了div5的margin-bottom高度,如果为div5加一个包裹的div,并设置样式width:100%,ie6正常,ie7下却又出现了同第二种情况相同的现象——div6的margin-bottom失效                                                                     

 

以上三种情况在浏览器下的显示效果

ff:

 

ie6:


 

ie7:

  • 大小: 5.8 KB
  • 大小: 6.4 KB
  • 大小: 7.8 KB
  • 大小: 8.1 KB
0
0
分享到:
评论

相关推荐

    Firefox下margin-top会出错

    2. **浮动元素**,如果其中一个盒子模型是浮动的(使用`float`属性),则垂直`margin`不会被折叠,即使是在浮动元素与其子元素之间也是如此。 3. **设置了`overflow`属性的元素**,以及其子元素之间的`margin`不会被...

    margin(CSS语法)-.rar

    `margin-collapse`是另一个与`margin`相关的概念,它描述了相邻元素之间外边距如何合并。当两个垂直或水平相邻的元素具有相同的外边距时,它们的外边距可能不会简单相加,而是取其中较大的那个。通过`margin-...

    最全的CSS浏览器兼容问题.txt )

    为了在IE中正确处理`float`元素的`margin`问题,可以通过设置`display: inline;`来模拟内联行为: ```css #box { float: left; width: 100px; margin: 0 0 0 100px; display: inline; /* 使IE正确计算margin */ ...

    HTML-bfc初探

    - 同一BFC内,相邻的块级元素的margin会发生垂直塌陷(margin collapse)。 - 每个元素的margin不会与BFC的边界重叠。 - BFC不会与浮动元素重叠。 - BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会...

    第16章 CSS盒模型[下].pdf

    在HTML5中,CSS盒模型是构建网页布局的核心概念,它决定了元素框处理元素内容(content)、内边距(padding)、边框(border)以及外边距(margin)的方式。在给定的文件内容中,涉及到了CSS盒模型的三个主要学习...

    通杀所有浏览器兼容问题

    在IE6中,当元素同时应用了`margin`和`float`属性时,可能会遇到布局错位的问题,即所谓的“Margin Collapse”现象。通过将`display`属性设置为`inline`,可以在一定程度上解决这一问题。 #### 2. Padding与高度...

    div+css有实例,易学易懂

    - **子元素负边界的问题**:子元素负`margin`的影响。 - **列表的默认显示问题**:列表项的默认样式如何消除。 - **IE6中的问题**:解决IE6特有的问题。 - **IE7中的问题**:解决IE7特有的问题。 - **兼容问题实例**...

    html+css笔记总结1

    11. **table边框问题**:在表格布局中,可以通过`border-collapse`属性合并单元格边框,`border-spacing`设置边框间距,`border`设置边框宽度和样式。 这些是HTML和CSS的基础知识,熟练掌握它们能帮助你更好地构建...

    关于css兼容性问题及一些常见问题汇总

    以下是一些关于CSS兼容性问题及其解决方案的详细说明: 1. **浮动元素与高度塌陷**: 在IE6中,如果一个父容器内的元素有浮动(如`float:left`或`float:right`),而父容器没有设置固定高度,其高度不会自动扩展以...

    css常见的方法.docx

    9. **浮动**:浮动元素(`float`属性设置为`left`或`right`)会脱离标准流,移到指定方向并与其他浮动元素顶端对齐。浮动元素不保留原来的位置,可能导致父元素高度塌陷。为了避免这种问题,通常需要清除浮动。 10....

    HTML属性以及相对应的CSS方法

    需要注意的是,当应用`float`时,元素会脱离文档流,可能会导致父元素高度塌陷的问题。解决方法之一是使用`clear`属性或添加一个清除浮动的元素。 #### 2. 外边距(Margin) **HTML属性:** `marginwidth="0"`, `...

    CSS样式所有属性.pdf

    - `float`:使元素浮动。 - `overflow`:控制内容溢出元素框的行为。 - `position`:定义元素的定位类型(如static、relative、absolute、fixed)。 - `vertical-align`:设置元素的垂直对齐方式。 - `...

    经典css教程(适合初学者)

    在学习CSS的过程中,会涉及到很多基础概念,比如盒模型(Box Model)、浮动(Float)、清除浮动(Clear)、边距合并(Margin Collapse)等,这些概念对于创建结构化和布局良好的网页至关重要。理解盒模型可以帮助...

    前端面试题

    触发BFC的条件包括定位元素(除static之外的position)、浮动元素(float属性的值不为none)、绝对定位元素的包含块(即其父元素为position属性值为absolute或fixed的元素)、display为inline-block、table-cell、...

    css面试题.docx

    解决方法包括使用margin-collapse、padding、border等。 3. 清除浮动的方法 浮动(float)可以使元素脱离文档流,但可能会引起浮动元素的父元素高度塌陷。清除浮动的方法有:使用clear属性、使用overflow属性、...

    关于CSS2.0的最新版本

    CSS2.0的盒模型是网页布局的核心,它包括元素的content、padding、border和margin四个部分。盒模型决定了元素的大小和位置,可以设置内外边距和边框宽度,从而精确控制元素的展示。 **三、定位机制** 1. 相对定位...

    javascript面试题

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

    css复位全部代码

    为了解决这一问题,通常会在项目开始时使用CSS复位技术,即将所有元素的默认样式清除或重置到一个统一的状态,确保跨浏览器的一致性。本文档提供了一套全面的CSS复位代码,并在此基础上进行详细的解析。 #### 二、...

Global site tag (gtag.js) - Google Analytics