对一个元素运用float后,该元素将脱离正常文档流,这意味着:

1. 运用float后,该元素不再影响父元素的高度,如果一个元素的所有子元素都是float的话,那么该元素的高度是0,这样后面元素渲染的时候就会见缝插针,在该元素留下的一切空白中渲染,这个时候就需要清除浮动。关于清除浮动,首先要明白的是,什么是清除浮动。清除浮动实际上是指,撑开父元素的高度,让后面的元素渲染时,不再见缝插针地跑到它留下的空白中。这有很多现成的解决方法,需要明确的一点是:这些方法有些是作用在浮动元素的父元素上的,有些是直接作用在浮动元素本身的(吐一个槽:很多介绍清除浮动的文章都不说明是加在父元素还是浮动元素本身上的,让读者云里雾里)。

2. 运用float后,该元素虽然脱离了文档流,但后面元素在渲染的时候,还是会为它留下显示的空间。这也是它和position: absolute脱离文档流的区别所在,后者连显示空间也不会留下。
关于只留下显示空间,这一点比较微妙。一图胜千言,如下图,

div1向左浮动,剩下的p元素在它右边周围排布,那么,这时候p的宽度是多少呢?是不是总宽度减去div1的宽度呢?不是,这时p的宽度仍然是100%,不信的话,可以给p设置一个margin-left:10px。结果会发现,p的左边仍然是紧贴着div1的,因为p的宽度是100%,它的border还在最左边,因此,区区10px的margin当然不会让它过去,这就是只留下显示空间,但不影响其它一切渲染的真正含义。实际上,它们的关系大概是如上图中的虚线所示。

明白了塌陷的原因自然也就明白了如何清除浮动。

塌陷的原因是父元素的所有子元素都脱离正常流而导致父元素失去高度。那么只要找到让父元素重新找回自信,不,是重新找回高度的办法就可以了。最简单的,给父元素设置一个固定高度,浮动不就清除了吗,但这样坏处明显,因为你子元素的高度是不固定的,可能会造成溢出或掩藏。复杂一点的,给父元素末尾添加一个子元素,再给子元素设置clear:both,那么后面的元素就都回归正常流了,高度也就有了。更干净点的,因为不能添加结构来完成样式,即不能用HTML的方式来修补样式,所以要用到一个.clearfix:after的伪类,用它来模拟一下添加的一个额外的子元素,再给它设置clear:both,这样就两全其美了,当然不要忘了给它设置其它一些属性(yi dian tiao jiao),以便让它心里能接受clear:both这样的设定,比如display:table;content:'';height:0之类的。最后,还要注意低版本IE下的hack,即*zoom:1。

最新文章

  1. .NET基础架构方法—DataTableToList通用方法
  2. js 类型转换学习
  3. 搭建nginx+tomcat+Java的负载均衡环境
  4. iOS 当请求到的数据是double类型,会失去精准度,并且去掉小数点后的0
  5. Web应用安全之文件上传漏洞详解
  6. window平台下的MySQL快速安装。(不好意思,未完成待续,请飘过)
  7. [Elixir007] on_definition规范函数定义时的各种潜规则
  8. 交叉报表列头排序时遇到的oracle问题—oracle ORA-12704:字符集不匹配、varchar2转化为nvarchar2字符缺失、case when else后的字符类型要一致
  9. android之datepicker控件用法
  10. ASP.NET MVC4 学习系统三(控制器Controller)
  11. BootstrapDialog自动加<br> BUG处理
  12. Lucene:QueryParser
  13. 【HPP开发】让所有中小企业拥有自己的APP
  14. FineUI布局应用(二)
  15. 关于Application Cache
  16. 【HTML】让<pre>标签文本自动换行
  17. 由于losf引起的pxc启动报错处理
  18. Retinex图像增强算法代码
  19. 解决SpringSecurity阻止ajax的POST和PUT请求,导致403Forbidden的问题
  20. SpaceVim中vimproc的vimproc_linux64.so未找到

热门文章

  1. JavaScript--小白入门篇1
  2. 登录deepin 15.9后不显示任务栏,无法操作
  3. linux sar-系统运行状态统计工具
  4. 使用scrapy 爬取酷狗音乐歌手及歌曲名并存入mongodb中
  5. Boundary Conditions
  6. Vue.Draggable实现拖拽效果(采坑小记)
  7. 洛谷 3178 [HAOI2015]树上操作
  8. 九度oj 题目1049:字符串去特定字符
  9. J2EE 课件2
  10. Mutual Training for Wannafly Union #5