天天看点

清除浮动的本质及方法

引 为什么要清除浮动?

元素浮动在网页开发中十分常见,但很多时候会发现,浮动的元素会影响其他元素的排列。这是因为浮动元素会脱离标准流,不再占据原来的位置,其后面的标准流元素会补上浮动元素空出来的位置,从而会影响其后面的标准流。

一 清除浮动的本质

先来看一下浮动会产生的影响:

清除浮动的本质及方法
清除浮动的本质及方法

所以,清除浮动的本质是清除浮动元素造成的影响,若父元素本身有高度,则不需要清除浮动。清除浮动后,父级就会根据浮动的自盒子自动检测高度,父级有了高度,就不会影响其后面的标准流了。

二 清除浮动的方法

清除浮动主要有四种方法:额外标签法、给父元素添加overflow属性、给父元素添加after伪元素、给父元素添加双伪元素

1. 额外标签法

额外标签法也称隔墙法 ,是W3C推荐的做法 。其原理在浮动元素末尾添加一个空标签(只能是块级元素),对添加的空标签设置清除浮动样式clear:both/left/right,将浮动元素与后面标准流隔开,从而清除浮动对其后面标准流产生的影响。

  • 优点:通俗易懂,书写方便。
  • 缺点:但是添加无意义的标签会造成结构化相对较差

注:这个添加空元素只能是块级元素。

2. 给父元素添加overflow属性

给其父元素设置overflow:hidden/auto/scroll也可以实现清除浮动。该方法 代码简洁,但是会使溢出内容受到影响。

3. 给父元素添加after伪元素

该方法是额外标签法的升级,给其父元素增加clearfix类。百度、淘宝网、网易官网均使用了该方法

.clearfix::after {
            content: '';
            display: block;
            height: 0;
            clear: both;
            visibility: hidden;
        }
        /*兼容IE6、7 */
        .clearfix {
            *zoom: 1;
        }
           
  • 优点:额外标签法的升级 ,没有增加标签,结构更简单
  • 缺点:有兼容性问题,需要照顾低版本浏览器

4. 给父元素添加after伪元素

该方法是通过给浮动元素开头与末尾均增加一个伪元素,将浮动元素限定在一个区域内,从而清除浮动对标准流造成的影响。

清除浮动的本质及方法
.clearfix::before,.clearfix::after {
            content: '';
            display: table;
        }
        /*兼容IE6、7 */
        .clearfix {
            *zoom: 1;
        }
           

该方法代码相对更加简洁,存在有兼容性问题。小米、腾讯官网都使用了该方法。

总结

  1. 清除浮动的本质是清除浮动元素造成的影响,父元素有了高度便无需清除浮动。
  2. 清除浮动主要有额外标法、父元素添加overflow属性、伪元素、双伪元素4种方法。