css float清理clear方法
2013-11-10 23:22
246 查看
问题: 当一个容器内包含使用了float属性的元素时, float元素高度高于容器其他元素时会超过容器界限, 容器不会扩展来包裹float元素, 这将对界面布局造成影响, 例如
在firefox下显示为:
![](http://images.cnitblog.com/blog/472709/201311/06223320-db4711dd2c714e43901a105e3f16fca9.png)
解决办法:
在容器最底部放置一个空<div>, <p> 等高度为0的元素, 为其设置clear样式,
显示正常如下:
![](http://images.cnitblog.com/blog/472709/201311/06223904-e777a25d79e248b1992ee5038702ee92.png)
个人认为这样做简单粗暴有效, 将问题解决在局部, 简单方便, 理论上的缺陷是添加了多余的标签, 这似乎有点学院派吹毛求疵了, 适当添加标签用于布局太普遍了
给容器设置float样式也可以达到这个效果, 但是这会使容器也浮动, 相当于把问题转移了, 后续总得有一个元素进行必要的清理, 有人把所有元素浮动了. 然后使用footer进行清理. 这样应该说让布局更难了, 如果容器没有设置高度(以前依赖于它的contain block), 现在宽度还得受内部元素影响, 如果你遇到了ie6之类的浏览器, 那简直就是灾难
显示如图:
![](http://images.cnitblog.com/blog/472709/201311/06230050-5d0e4f916eb346aabe094c1a40332b7a.png)
给容器设置属性: overflow:hidden, 这个方法书上说会对容器内position为absolute的元素产生影响,我没有试过具体什么影响,
最好的方法来了:
<!DOCTYPE html PUBLIC > <html> <head> <title>float</title> <style> #wrapper { background: #EEEDD9; border: 1px solid black; } #sidebar { height: 200px; float: left; width: 40px; border: 1px solid red; } #content { background: #3399FF; border: 1px solid black; } </style> </head> <body> <div id="wrapper"> <div id="sidebar">我是一个浮动元素 </div> <p>这里是普通流中的元素</p> </div> <p id="content">上面#wrapper不能包裹float的#sidebar, 占了我的地盘</p> </body> </html>
在firefox下显示为:
![](http://images.cnitblog.com/blog/472709/201311/06223320-db4711dd2c714e43901a105e3f16fca9.png)
解决办法:
在容器最底部放置一个空<div>, <p> 等高度为0的元素, 为其设置clear样式,
<!DOCTYPE html PUBLIC > <html> <head> <title>float</title> <style> #wrapper { background: #EEEDD9; border: 1px solid black; } #sidebar { height: 200px; float: left; width: 40px; border: 1px solid red; } #content { background: #3399FF; border: 1px solid black; } .clear { clear: left; } </style> </head> <body> <div id="wrapper"> <div id="sidebar">我是一个浮动元素 </div> <p>这里是普通流中的元素</p> <div class="clear"></div> <!-- 设置了清理元素 --> </div> <p id="content">井水不犯河水</p> </body> </html>
显示正常如下:
![](http://images.cnitblog.com/blog/472709/201311/06223904-e777a25d79e248b1992ee5038702ee92.png)
个人认为这样做简单粗暴有效, 将问题解决在局部, 简单方便, 理论上的缺陷是添加了多余的标签, 这似乎有点学院派吹毛求疵了, 适当添加标签用于布局太普遍了
给容器设置float样式也可以达到这个效果, 但是这会使容器也浮动, 相当于把问题转移了, 后续总得有一个元素进行必要的清理, 有人把所有元素浮动了. 然后使用footer进行清理. 这样应该说让布局更难了, 如果容器没有设置高度(以前依赖于它的contain block), 现在宽度还得受内部元素影响, 如果你遇到了ie6之类的浏览器, 那简直就是灾难
<!DOCTYPE html PUBLIC > <html> <head> <title>float</title> <style> #wrapper { background: #EEEDD9; border: 1px solid black; float: left; } #sidebar { height: 200px; float: left; width: 40px; border: 1px solid red; } #content { background: #3399FF; border: 1px solid black; } </style> </head> <body> <div id="wrapper"> <div id="sidebar">我是一个浮动元素 </div> <p>这里是普通流中的元素,#wrapper没有设置宽度, 宽度受影响</p> </div> <!-- 我也浮动, 而且还得设置宽度 --> <p id="content">城门失火殃及池鱼, 我不使用</p> </body> </html>
显示如图:
![](http://images.cnitblog.com/blog/472709/201311/06230050-5d0e4f916eb346aabe094c1a40332b7a.png)
给容器设置属性: overflow:hidden, 这个方法书上说会对容器内position为absolute的元素产生影响,我没有试过具体什么影响,
最好的方法来了:
.clear:after { content: "."; display: block; clear: both; height: 0; font-size: 0; visibility: hidden; }
相关文章推荐
- SQL Server日志文件过大 大日志文件清理方法 不分离数据库
- SVN 清理失败的解决方法
- 系统垃圾清理方法
- 如何快速清理 docker 资源的方法
- 提高磁盘清理速度的方法
- PHP Yii清理缓存的实现方法
- smarty中常用方法(在php文件中使用) append ,clearallassign, clearassign, fetch ,getconfigvars,gettemplatevars
- Hibernate的evict方法和clear方法的区别
- NIO中有关Buffer的几种常用方法比如clear,rewind和flip
- clear方法会把整个map清空吗?
- SQL Server 2008R2清理日志确实有效可用的方法
- 终于找到关闭IE时清理Session的方法了
- Linux下清理内存和Cache方法
- 设置自动清理mysql binlog日志和手动删除的方法
- Hibernate的evict方法和clear方法的区别
- CSS清除浮动常用方法小结 CSS clear both {overflow:auto;zoom:1;}
- asp.net/html清理页面缓存的方法
- Hibernate中session的clear(),flush(),evict()方法详解
- UiAutomator自定义一个一键清理后台的方法