浏览器兼容性经典问题(四) 更好的清除浮动
2012-12-03 08:51
197 查看
问题描述:
在你使用css的过程中,多多少少会遇到清除浮动这个问题。
在一个div容器里面,容器中含有一个浮动的div,在浮动元素后面还有一些块元素。如果浮动的高度大于容器被非浮动元素撑开的高度,那么浮动元素就会超出容器。具体代码如下。
问题代码:
各浏览器的效果图:(左为chrome 中间为firefox 右边为IE6)
![](http://img.my.csdn.net/uploads/201212/03/1354494457_9768.jpg)
注释:
在上面的的浏览器效果图中,能看到,float浮动元素并没有把父级元素contianer撑开,而是非浮动元素把父级元素container撑开,这是因为float元素并不属于文档流而造成的。所以导致了子元素的高度超过了父级元素。
我们其实可以通过人为地设置container的高度而是float元素乖乖得留在container元素中,但是这样设置就很死板,而且对流式布局等产生很多不方便的问题。
那么这时我们就需要清除浮动,让container在不设置高度的情况下自动撑开。
解决方法:
在IE8+以及主流的浏览器中,都支持:after这个伪类,我们可以通过在float浮动元素后面增加一些内容来撑开container,而在IE6 7中,我们则通过一些值的设置来触发IE特有的haslayout属性。
解决代码:
注释:
给需要撑开的父级元素container添加上类class=clearfix,在css中添加以上新的css代码即可。
content:" ";height:0px;visibility:hidden;这三句为了在container后面的内容不可见,
display:block是用于替换掉默认的display:inline,因为clear属性不能用于行内元素,
clear:both是清除浮动
在IE6 7中,利用zoom:1触发haslayout属性即可。
各浏览器效果图:(左chrome 中间firefox 右边IE6)
![](http://img.my.csdn.net/uploads/201212/03/1354495936_6323.jpg)
可见,进行浮动清除后,父级元素container被撑开了,接下来你就可以安心的进行下面的布局了。
总结:
除了这种方法,网上还有很多其他的方法,其中一种比较简单的是:
在float元素后面添加一个<div id="clearbox"></div>的div,然后给这个div设置clear:both;
现在很多人在使用这种方法,但是这种方法我是不推荐的,首先因为这种做法会无端得给dom增加一个元素,其次这种方法也会引起其他一些不必要的问题,比如说IE6下著名的peekaboo捉迷藏问题。
还有一些人用overflow来进行清除,这些都是不推荐的。
浏览器兼容性经典问题(一)
IE6 下双边距问题
浏览器兼容性经典问题(二)
IE6 3像素bug问题
在你使用css的过程中,多多少少会遇到清除浮动这个问题。
在一个div容器里面,容器中含有一个浮动的div,在浮动元素后面还有一些块元素。如果浮动的高度大于容器被非浮动元素撑开的高度,那么浮动元素就会超出容器。具体代码如下。
问题代码:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <style> body{ padding:0px; margin:0px; } #container{ font-size:20px; background-color:#eee; border:solid 3px #ddd; } #float_box{ background-color:#fff; border:solid 3px #bbb; width:80px; height:100px; float:left; } </style> </head> <body> <div id="container"> <div id="float_box">floated element</div> <h>the container</h> </div> </body> </html>
各浏览器的效果图:(左为chrome 中间为firefox 右边为IE6)
![](http://img.my.csdn.net/uploads/201212/03/1354494457_9768.jpg)
注释:
在上面的的浏览器效果图中,能看到,float浮动元素并没有把父级元素contianer撑开,而是非浮动元素把父级元素container撑开,这是因为float元素并不属于文档流而造成的。所以导致了子元素的高度超过了父级元素。
我们其实可以通过人为地设置container的高度而是float元素乖乖得留在container元素中,但是这样设置就很死板,而且对流式布局等产生很多不方便的问题。
那么这时我们就需要清除浮动,让container在不设置高度的情况下自动撑开。
解决方法:
在IE8+以及主流的浏览器中,都支持:after这个伪类,我们可以通过在float浮动元素后面增加一些内容来撑开container,而在IE6 7中,我们则通过一些值的设置来触发IE特有的haslayout属性。
解决代码:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <style> body{ padding:0px; margin:0px; } .clearfix:after{ content:""; height:0px; visibility:hidden; display:block; clear:both; } * html .clearfix{ zoom:1; } #container{ font-size:20px; background-color:#eee; border:solid 3px #ddd; } #float_box{ background-color:#fff; border:solid 3px #bbb; width:80px; height:100px; float:left; } </style> </head> <body> <div id="container" class="clearfix"> <div id="float_box">floated element</div> <h>the container</h> </div> </body> </html>
注释:
给需要撑开的父级元素container添加上类class=clearfix,在css中添加以上新的css代码即可。
content:" ";height:0px;visibility:hidden;这三句为了在container后面的内容不可见,
display:block是用于替换掉默认的display:inline,因为clear属性不能用于行内元素,
clear:both是清除浮动
在IE6 7中,利用zoom:1触发haslayout属性即可。
各浏览器效果图:(左chrome 中间firefox 右边IE6)
![](http://img.my.csdn.net/uploads/201212/03/1354495936_6323.jpg)
可见,进行浮动清除后,父级元素container被撑开了,接下来你就可以安心的进行下面的布局了。
总结:
除了这种方法,网上还有很多其他的方法,其中一种比较简单的是:
在float元素后面添加一个<div id="clearbox"></div>的div,然后给这个div设置clear:both;
现在很多人在使用这种方法,但是这种方法我是不推荐的,首先因为这种做法会无端得给dom增加一个元素,其次这种方法也会引起其他一些不必要的问题,比如说IE6下著名的peekaboo捉迷藏问题。
还有一些人用overflow来进行清除,这些都是不推荐的。
浏览器兼容性经典问题(一)
IE6 下双边距问题
浏览器兼容性经典问题(二)
IE6 3像素bug问题
浏览器兼容性经典问题(三) IE6 不支持min-width属性
相关文章推荐
- 使用zoom、overflow解决IE6、IE7、FF下嵌套容器清除浮动问题
- 关于清除浮动的问题。一招解决
- 浏览器兼容性经典问题(六) text-align的使用
- CSS中关于清除浮动的问题
- clearfix 清除浮动的问题
- 解决float浮动带来的父元素高度没有的问题---清除浮动
- 清除浮动中zoom的问题
- header问题:css清除浮动方法
- 清除因为浮动,DIV的高度不能自动撑开的问题
- 关于清除浮动的问题
- 浏览器兼容性经典问题(一) IE6 下双边距问题
- 高度塌陷问题引发的清除浮动的方法
- CSS中 清除浮动解决“包含问题”
- 清除浮动塌陷的4种经典套路
- 使用zoom、overflow解决IE6、IE7、FF下嵌套容器清除浮动问题
- 清除浮动塌陷的4种经典套路
- web前端面试常见问题三------浮动原理和清除浮动
- 浏览器兼容性经典问题(五) 元素背景色透明
- 关于overflow:auto | hidden清除浮动的一些问题
- 清除浮动,浮动元素的高度自适应问题