yihau

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

       float 属性会使元素脱离标准文档流(当然已经被绝对定位的元素除外)。但和绝对定位的脱离文档流并不相同,虽然脱离了文档流但是还是会占据那部分空间,其后的块级元素的linebox会占据那部分空间,但文字会被拦到那部分空间之外,行内元素直接被拦到那部分空间之外,这样自然就实现了文字的环绕效果。


       再说如果一个元素的子元素都添加了浮动,那么这个元素的行高会变为0.我觉得这是因为float使得元素脱离了标准文档流的关系,既然都不在文档流中了,自然没办法通过其占据空间来撑开父元素的高度。就像被绝对定位的元素也撑不开父元素的高度一样。


      所以说浮动元素的那部分空间只在对于文字环绕时存在,而其他情况都是脱离了文档流。
接下来再说说清除浮动,
1、父元素设置overflow:hidden;overflow本是修剪溢出的元素,不过这里可以使父元素紧贴子元素,这里好像浮动离开文档流的那部分空间又回来了。
2、clear:both;可以再全是float子元素的父元素尾部增加一个空的div,对这个元素设置clear属性就可以达到清除浮动对父元素的影响。
3、after伪类元素,这个方法比较复杂,不过不会影响html的语义性;给需要清除浮动的元素加上clearfix的类。
.clearfix:after{
  content:".";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;  
  }
  通过CSS伪元素在容器的内部元素最后添加了一个看不见的空格"020"或点".",并且赋予clear属性来清除浮动。
  总结:浮动本来就是为了实现文字环绕效果,但是由此引入了布局的应用,也带来了很多人们“不喜欢”的效应,浮动元素的那部分空间只在对于文字环绕时存在,而其他情况都是脱离了文档流。我认为这是不喜欢的效应出现的原因。不过现在有这么多种清除浮动的方法,也算圆满。

posted on 2016-03-18 16:58  yihau  阅读(251)  评论(0编辑  收藏  举报