关于清除浮动与闭合浮动

   在给HTML添加样式的构成中,css是必不可少的的,然而css中有一些功能的实现可以通过不同的方法实现,通过效果查看好像并没有什么不同,那它们之间到底有什么本质区别呢,又有哪些概念被我们无意的忽略或者无视了呢,突然想总结总结这一类的问题,本篇随笔算是本人对于“清除浮动”的归纳吧.

   

 为什么要清楚浮动

在布局的时候我们经常希望某些内容能够水平排布,水平排布后,由于内部内容不确定,高度不能简单的给一个定值。而如果不给高度,子元素又都浮动了,父盒子就会因为没有子盒子的支撑而塌陷。

1. 清除浮动的方法

其实在根本上来说,清除浮动主要有二个方法: 清除周围的浮动元素(闭合浮动), 清除子元素浮动对父元素的影响(清除浮动)。

但这两种方法可以用不同的方法实现,那我想简单介绍一下他们的利弊。

1.1.1. 额外标签法

原理:单独使用一个标签加上clear:both跑到浮动元素下面,从而消除子盒子浮动造成的父盒子塌陷。

典型网站:京东

优点:通俗易懂,容易掌握

缺点:添加很多无意义的空标签,不符合结构与表现分离的原则,不利于后期维护

1.1.2. 父元素设置overflowhidden

原理:让父盒子形成BFCBFC的特性之一就是可以承载浮动元素

优点:不存在结构和语义化问题,代码量极少

缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素

1.1.3. 单伪元素

.clearfix:after {
    content: "";
    height: 0;
    visibility: hidden;
    overflow: hidden;
    dispaly: block;/*不是inline就行*/
    clear: both;
}
.clearfix {
    *zoom: 1;/*IE67*/
}

1.1.4. 双伪元素

.clearfix:before, .clearfix:after {
    content: "";
    display: table;/*不是inline就行*/
}/*在有该类的元素内部元素的前面和后面添加元素*/

.clearfix:after {
    clear: both;
}/*只要after两侧有浮动元素,after就会跑到最下面,从而撑开带有该类名的父盒子*/

.clearfix {
    *zoom: 1;
} /*用于兼容IE/7/6*/

 display:table是因为display:block伪元素仍然有宽度

加了一个before是为了防止外边距合并。

原文地址:https://www.cnblogs.com/canday/p/6089820.html