清除浮动的可用方式 (测试浏览器:FF)

<!--正常格式的代码-->
<body>
<div class = "class0 clearfloat"><strong>div0</strong>
    <div class= "class1">div1 </div>
    <div class= "class2"> div2</div>
    <div class= "class3"> </div> 
</div>
<p>this is a paragraph</p>
</body>

显示如下:
图片描述

但是对class1和class2应用float:left后:

图片描述

浮动的影响显而易见

float:left/right/none; 使元素从正常的文档流中删除,但是依旧会占据空间。如果设置float的元素没有设置宽度并且无内容时,会缩成一个圆点。不设置宽度时宽度会随内容的增加而增加。浮动会使当前标签产生向上浮的效果,同时会影响到前后标签父级标签的位置及 width height 属性。而且同样的代码,在各种浏览器中显示效果也有可能不相同。

清除浮动

  1. 对受到影响的元素(一般是紧随其后的同级元素)添加样式clear: both,缺点:一般是加上空标签<div>,如果页面浮动布局多,就要增加很多空div。

                   div.class3{
                       clear:both;
                       }
    
  2. 父级元素设置宽度和overflow:hidden,不能设置height,浏览器会自己捕获高度。
    缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。

  3. 父级div定义宽度和overflow:auto,不能设置height,浏览器会自己捕获高度。

  4. 父级div定义height,直接解决了父级div无法自动获取到高度的问题
    缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题,因此不推荐使用,只建议高度固定的布局时使用

  5. 父级div定义伪类:after和zoom

       
       .clearfloat:after{
           display:block;
           clear:both;
           content:"";
           visibility:hidden;
           height:0}
      .clearfloat{zoom:1}
    

    原理:IE8以上和非IE浏览器才支持:after,原理和方法1有点类似(在末尾设置不显示的块级元 素,并加上clear:both),zoom(IE转有属性)可解决ie6,ie7浮动问题。
    优点:浏览器支持好,不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)。定义公共类后可以减少CSS代码。

总结

清除浮动的方法中,第五种父级div定义伪类具有较好的浏览器兼容性,在大型网站中多有应用,但是代码复杂,要加深理解。


zhangding
358 声望23 粉丝

JavaScript+React+Redux