关于空白边叠加的问题,原来觉得很简单,现在发现完全不只书上写的几种情况,特别是元素浮动后,在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
分享到:
相关推荐
2. **浮动元素**,如果其中一个盒子模型是浮动的(使用`float`属性),则垂直`margin`不会被折叠,即使是在浮动元素与其子元素之间也是如此。 3. **设置了`overflow`属性的元素**,以及其子元素之间的`margin`不会被...
`margin-collapse`是另一个与`margin`相关的概念,它描述了相邻元素之间外边距如何合并。当两个垂直或水平相邻的元素具有相同的外边距时,它们的外边距可能不会简单相加,而是取其中较大的那个。通过`margin-...
为了在IE中正确处理`float`元素的`margin`问题,可以通过设置`display: inline;`来模拟内联行为: ```css #box { float: left; width: 100px; margin: 0 0 0 100px; display: inline; /* 使IE正确计算margin */ ...
- 同一BFC内,相邻的块级元素的margin会发生垂直塌陷(margin collapse)。 - 每个元素的margin不会与BFC的边界重叠。 - BFC不会与浮动元素重叠。 - BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会...
在HTML5中,CSS盒模型是构建网页布局的核心概念,它决定了元素框处理元素内容(content)、内边距(padding)、边框(border)以及外边距(margin)的方式。在给定的文件内容中,涉及到了CSS盒模型的三个主要学习...
在IE6中,当元素同时应用了`margin`和`float`属性时,可能会遇到布局错位的问题,即所谓的“Margin Collapse”现象。通过将`display`属性设置为`inline`,可以在一定程度上解决这一问题。 #### 2. Padding与高度...
- **子元素负边界的问题**:子元素负`margin`的影响。 - **列表的默认显示问题**:列表项的默认样式如何消除。 - **IE6中的问题**:解决IE6特有的问题。 - **IE7中的问题**:解决IE7特有的问题。 - **兼容问题实例**...
11. **table边框问题**:在表格布局中,可以通过`border-collapse`属性合并单元格边框,`border-spacing`设置边框间距,`border`设置边框宽度和样式。 这些是HTML和CSS的基础知识,熟练掌握它们能帮助你更好地构建...
以下是一些关于CSS兼容性问题及其解决方案的详细说明: 1. **浮动元素与高度塌陷**: 在IE6中,如果一个父容器内的元素有浮动(如`float:left`或`float:right`),而父容器没有设置固定高度,其高度不会自动扩展以...
9. **浮动**:浮动元素(`float`属性设置为`left`或`right`)会脱离标准流,移到指定方向并与其他浮动元素顶端对齐。浮动元素不保留原来的位置,可能导致父元素高度塌陷。为了避免这种问题,通常需要清除浮动。 10....
需要注意的是,当应用`float`时,元素会脱离文档流,可能会导致父元素高度塌陷的问题。解决方法之一是使用`clear`属性或添加一个清除浮动的元素。 #### 2. 外边距(Margin) **HTML属性:** `marginwidth="0"`, `...
- `float`:使元素浮动。 - `overflow`:控制内容溢出元素框的行为。 - `position`:定义元素的定位类型(如static、relative、absolute、fixed)。 - `vertical-align`:设置元素的垂直对齐方式。 - `...
在学习CSS的过程中,会涉及到很多基础概念,比如盒模型(Box Model)、浮动(Float)、清除浮动(Clear)、边距合并(Margin Collapse)等,这些概念对于创建结构化和布局良好的网页至关重要。理解盒模型可以帮助...
触发BFC的条件包括定位元素(除static之外的position)、浮动元素(float属性的值不为none)、绝对定位元素的包含块(即其父元素为position属性值为absolute或fixed的元素)、display为inline-block、table-cell、...
解决方法包括使用margin-collapse、padding、border等。 3. 清除浮动的方法 浮动(float)可以使元素脱离文档流,但可能会引起浮动元素的父元素高度塌陷。清除浮动的方法有:使用clear属性、使用overflow属性、...
CSS2.0的盒模型是网页布局的核心,它包括元素的content、padding、border和margin四个部分。盒模型决定了元素的大小和位置,可以设置内外边距和边框宽度,从而精确控制元素的展示。 **三、定位机制** 1. 相对定位...
**40、IE 的双边距 BUG:块级元素 float 后设置横向 margin,ie6 显示的 margin 比设置的较大。解决:加入 _display:inline** 此 bug 在 IE6 中较为常见,解决方法是在元素上添加 `_display: inline` 或使用其他 ...
为了解决这一问题,通常会在项目开始时使用CSS复位技术,即将所有元素的默认样式清除或重置到一个统一的状态,确保跨浏览器的一致性。本文档提供了一套全面的CSS复位代码,并在此基础上进行详细的解析。 #### 二、...