css样式float造成的浮动“塌陷”问题的解决办法
转⾃blog.csdn/sensui_/article/details/46958661
什么是CSS Float?
定义: float 属性定义元素浮动到左侧或右侧。以往这个属性总应⽤于图像,使⽂本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会⽣成⼀个块级元素,⽽不论它本⾝是何种元素。元素对象设置了float属性之后,它将不再独⾃占据⼀⾏。浮动块可以向左或向右移动,直到它的外边缘碰到包含它的框或另⼀个浮动块的边框为⽌。
fload属性有四个可⽤的值:Left 和Right 分别浮动元素到各⾃的⽅向,None (默认的) 使元素不浮动,Inherit 将会从⽗级元素获取float值。下⾯让我们来详细了解下css float
1.Float的⽤处
除了简单的在图⽚周围包围⽂字,浮动可⽤于创建全部⽹页布局。
浮动对⼩型的布局同样有⽤。例如页⾯中的这个⼩区域。如果我们在我们的⼩头像图⽚上使⽤浮动,当调整图⽚⼤⼩的时候,盒⼦⾥⾯的⽂字也将⾃动调整位置:
同样的布局可以通过在外容器使⽤相对定位,然后在头像上使⽤绝对定位来实现。这种⽅式中,⽂本不会受头像图⽚⼤⼩的影响,不会随头像图⽚的⼤⼩⽽有相应变化。
程序代码
需要⽤到的CSS样式
body{ margin:0px; padding:0px; text-align:center; font:Arial, Helvetica, sans-serif; font-size:12px;}
div,p,ul,li,h2,h3,h4,h5{ padding:0px; margin:0px;line-height:22px;}
h1{ font-size:14px;}
body >div{ text-align:left; margin:10px auto;}
#box{ width:900px; text-align:left;}
.box1{ width:370px;border:1px solid #f00;}
.box3{border:1px solid #f00;}
.box2{ width:370px;border:1px solid #f00;}
.box2:after{display:block;clear:both;content:"";visibility:hidden;height:0;}
.box1_1{ width:100px; height:70px;border:1px solid #6CF;}
.clear{ clear:both; height:0px; width:0px; font-size:0px; line-height:100%; }
.fl{ float:left;}
.fr{ float:right;}
.hidden{overflow:hidden;}
span{ color:#f00; font-weight:bold;}
.
mar{ margin-left:20px;}
.inmar{ display:inline; margin-left:20px;}
.box1_2{ width:200px; float:left; height:100px; background-color:green;}
.box1_3{ width:150px; height:100px; margin-left:200px; background-color:red;}
.box1_4{ width:200px; float:left; height:100px; background-color:green;margin-right:-3px;}
.box1_5{ width:150px; float:left; height:100px; background-color:red;}
.box2_1{  margin-bottom:10px;float:left;width:80px; height:70px;border:1px solid #f00;}
.box2_2{ float:left;width:80px; height:70px;border:1px solid #f00;}
.padbot{ padding-bottom:10px;}
2.float浮动元素不占据正常⽂档流空间
由于浮动块不在⽂档的普通流中,所以⽂档的普通流中的块表现得就像浮动块不存在⼀样。
·
以下是3块div均未加float时在浏览器内显⽰如下图
代码:
<div>网页float是什么意思
<div><span>块1</span></div>
<div><span>块2</span></div>
<div><span>块3</span></div>
</div>
·块1向右浮动,脱离⽂档流并且向右移动,直到它的右边缘碰到包含块的右边缘。如下图
代码:
<div>
<div><span>块1</span> float:right </div>
<div><span>块2</span></div>
<div><span>块3</span></div>
</div>
·块1向左浮动,脱离⽂档流并且向左移动,直到它的左边缘碰到包含块的左边缘;IE8和Firefox中因为它不再处于⽂档流中,所以它不占据空间,实际上覆盖住了块 2,使块2从视图中消失。⽽块2的内容却显⽰在块1未浮动时块2所处的位置。⽽IE6和IE7中紧跟在浮动元素块1的块2也会跟着浮动。如下图
IE8和Firefox
IE6和IE7
代码:
<div>
<div><span>块1</span> float:left </div>
<div >background:#FCC<span>块2</span></div>
<div><span>块3</span></div>
</div>
3.浮动“塌陷”
·使⽤浮动(float)的⼀个⽐较疑惑的事情是他们怎么影响包含他们的⽗元素的。如果⽗元素只包含浮动元素,且⽗元素未设置⾼度和宽度的时候。那么它的⾼度就会塌缩为零。如果⽗元素不包含任何的可见背景,这个问题会很难被注意到,但是这是⼀个很重要的问题。在这⾥我们可以称为“塌陷”。如下图
代码:
<div>
<div><span>块1</span> float:left</div>
<div><span>块2</span> float:left</div>
<div><span>块3</span> float:left</div>
</div>
解决“塌陷”问题有以下三个⽅法
1.在使⽤float元素的⽗元素结束前加⼀个⾼为0宽为0且有clear:both样式的div 如下图
代码:
<div>
<div><span>块1</span> float:left </div>
<div><span>块2</span> float:left</div>
<div><span>块3</span> float:left</div>
<div></div>
</div>
2.在使⽤float元素的⽗元素添加overflow:hidden;如下图
代码:
<div>
<div><span>块1</span> float:left </div>
<div><span>块2</span> float:left</div>
<div><span>块3</span> float:left</div>
</div>
3 .使⽤after伪对象清除浮动如下图
代码:
<div>
<div><span>块1</span> float:left </div>
<div><span>块2</span> float:left</div>
<div><span>块3</span> float:left</div>
</div>
1. IE6双边距问题
·IE6双边距问题:⼀个居左浮动(float:left)的元素放置进⼀个容器盒(box),并在浮动元素上使⽤了左边界(margin-left) 在ie6内便产⽣双倍边距。如下图
IE7、IE8和Firefox
IE6
代码:
<div>
<div><span>块1</span> float:left marin_left:10px; </div>
<div><span>块2</span> float:left marin_left:10px; </div>
<div><span>块3</span> float:left</div>
</div>
这个Bug仅当浮动边界和浮动元素的⽅向相同时出现在浮动元素和容器盒的内边缘之间,在这之后的任意有着相似边界的浮动元素不会呈现双倍边界。只有特定的浮动⾏的第⼀个浮动元素会遭遇这个Bug。像居左的情况⼀样,双倍边界同样神秘地显⽰在居右的相同⽅式。
解决IE6双边距问题: display:inline; 使浮动忽略如下图
代码:
<div>
<div><span>块1</span>float:left; marin_left:10px; display:inline; </div>
<div><span>块2</span> float:left marin_left:10px; </div>
<div><span>块3</span> float:left</div>
</div>
5.IE6⽂本产⽣3象素的bug
·浮动IE6⽂本产⽣3象素的bug时指挨着浮动元素的⽂本会神奇的被踢出去3像素,好像浮动元素的周围有⼀个奇怪的⼒场⼀样。如下图
firefox、IE7、IE8
IE6
代码:
<div>
<div>float:left;width:200px; height:100px; background-color:green;</div>
<div> margin-left:200px; width:150px; height:100px; background-color:red;</div>
</div>
解决浮动IE⽂本产⽣3象素问题以下有两个⽅法
1.左边对象浮动,右边采⽤外补丁的左边距来定位如下图
firefox、IE7、IE8、IE6
代码:
<div>
<div>margin-right:-3px; float:left;width:200px; height:100px; background-color:green;</div>
<div>width:150px; height:100px; background-color:red;</div>
</div>
2.左边对象浮动,右边对象也浮动如下图
firefox、IE7、IE8、IE6
代码:
<div>
<div> float:left; width:200px;height:100px; background-color:green;</div>
<div> float:left;width:150px; height:100px; background-color:red;</div>
</div>
6.IE6,IE7 中,底边距 bug
·IE6,IE7 中,底边距 bug是当浮动⽗元素有浮动⼦元素时,这些⼦元素的底边距会被⽗元素忽略掉。如下图
firefox
IE6、IE7
代码:
<div>
<div> margin-bottom:10px; float:left;</div>
<div> margin-bottom:10px; float:left;</div>
<div> margin-bottom:10px; float:left;</div>
<div> margin-bottom:10px; float:left;</div>
</div>
解决IE6,IE7 中,底边距 bug:⽤⽗元素的底内补⽩(padding)代替。如下图
firefox、IE7、IE8、IE6
代码:
<div>
<div>float:left;</div>
<div>float:left;</div>
<div> float:left;</div>
<div>float:left;</div>
</div>
这个⽅法的缺点是不能换⾏,如果想要换⾏的话,建议将浮动⽗元素的浮动⼦元素设置padding值。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。