说到清除浮动的方法,我想网络上应该有不下7,8的方法,介绍这些方法之前,想下为什么清除浮动?

再次回到float这个属性,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联盒子(通常是文本)的排列。

这就产生了一个问题:浮动元素所在父元素不会自动伸长以便闭合浮动元素,任其“红杏出墙”,这显然不符合我们的“伦理观”,所以要“抓回来”施以家法;那么如何抓呢?

提起css,提起(x)html,首先进入脑海的是楚楚动人的页面吗?不,首先应该是这楚楚动人的页面的背后的“楚楚冻人”吧,那些可恨的梦魇般的浏览器兼容!!!

浏览器中可以自动完成闭合浮动元素的情况:

标准浏览器中可以自动完成闭合浮动元素的方法,在标准浏览器中,这称之为Block-Formatting-Contexts(块格式化上下文):

a.浮动元素;

b.拥有绝对定位属性的元素;

c.设置inline-block元素;

d.table-cell元素;

e.设置了overflow的元素,比如:auto/hidden。

【注】CSS3中,将Block-formatting-contexts 叫做 flow root。

对于触发方式也做了修改:The value of ‘position’ is neither ‘static’ nor ‘relative’;

那么在IE/win中,就依靠那个“hasLayout”了,触发“layOut”的方法有:

a.浮动元素

b.绝对定位元素

c.display:inline-block

d.zoom:比如常见的设置zoom:1;

e.width/height,比如设置height:1%的方法;

f.overflow/overflow-x/overflow-y [IE7 新增];

g.max/min-width/height [IE7 新增];
      
        以上种种方法,要么IEonly,要么cross的情况不理想,于是就产生了适用性方法的需求,尽管有时你可能需要些许hack;

(1)空标签法:

       这种方法应该说是最简单的一种了,W3C建议在容器的末尾增加一个“clear:both"的元素,

  强迫容器适应它的高度以便装下所有的float,并没限制使用什么样的标签,有用

<br style="clear:both" />

的,有用空

  1. <div style="clear:both"></div>

的;比如:

    <div>
<div style ="float:left; width:40%;" >
<p> Some content </ p >
</div>
<p> Text outside the float </p>
<div style ="clear:both;" ></div>
</div>

     (2)父元素使用overflow的方法:
       通过设置父元素overflow值设置为hidden或者auto;不过,在<=IE6中使用这个方法,还需要haslayout,

  还有,使用overflow=hidden的时候,一旦你有定位需求可能会因此而难以实现,使用这种方法前你应该至少确定:

a.父元素的height是自适应的;

b.浮动元素的宽度不大于父元素的宽度,即没有溢出需求;所以,这种方法也有它的局限性;

<div style ="overflow:hidden; width:100%;">
<div style ="float:left;width:30%;">
<p>the widths of the combined floats never exceed the width of the container</p>
</div>
</div>

(3)伪类:after

       这种方法应该说是目前应用最广泛的方法,它的优势:没有多余的标记添加到容器中;通过使用:after产生的content不能接受某些属性,包括'position','float',列表属性,表格属性,但是clear属性可以被接受。

不过,不幸的是,IE不支持:after方法,但又幸运的是,回顾前面,如果IE在父容器拥有Width/Height等layout状态下,会完成自动闭合,称之为“auto-clearing”;那么,对于IE/win,我们使用设定zoom:1的方法的方法来实现和:after一样的效果.于是

一个类似这样的样式出现了:

    .clearfix:after{content:".";display:block;height:;clear:both;visibility:hidden;}
.clearfix{zoom:;}
<div class="clearfix"><div style ="float:left;width:30%;" ><p>take :after</p></div>

css清除浮动各方法与原理的更多相关文章

  1. CSS清除浮动的方法

    CSS清除浮动的方法有哪些呢?经常性地会使用到float,很多邪门的事儿都有可能是浮动在作怪,清除浮动是必须要做的,而且随时性地对父级元素清除浮动的做法也被认为是书写CSS的良好习惯之一.下面看今天的 ...

  2. 前端开发CSS清除浮动的方法有哪些?

    在前端开发过程中,非IE浏览器下,当容器的高度自动,并且容器内容中有浮动元素(float为left或right),此时如果容器的高度不能自适应内容的高度,从而使得内容溢出破坏整体布局,这种现象叫做浮动 ...

  3. CSS清除浮动float方法总结

    使用浮动造成的BUG: 使用浮动前:(子节点是将父节点撑开了) 代码如下 <div class="box"> <div class="d1"& ...

  4. 8种CSS清除浮动的方法优缺点分析

    为什么清除CSS浮动这么难? 因为浮动会使当前标签产生向上浮的效果,同时会影响到前后标签.父级标签的位置及 width height 属性.而且同样的代码,在各种浏览器中显示效果也有可能不相同,这样让 ...

  5. CSS清除浮动的方法及优缺点

    浮动是CSS布局里面用的比较多的属性.浮动的框向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 因为浮动会使当前元素产生向上浮的效果,所以浮动的元素会脱离正常的文档流,它包围的内容在 ...

  6. css清除浮动的方法总结

    在各种浏览器中显示效果也有可能不相同,这样让清除浮动更难了,下面总结8种清除浮动的方法,测试已通过 ie chrome firefox opera,需要的朋友可以参考下     清除浮动是每一个 we ...

  7. css清除浮动的方法汇总

    这是在其他地方看到的一篇文章,汇总的不错,摘过来做个记录. 引用地址 : http://www.cnblogs.com/ForEvErNoME/p/3383539.html ------------- ...

  8. CSS清除浮动各种方法

    当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象.这个现 ...

  9. css清除浮动float方法

    转载:http://www.cnblogs.com/ForEvErNoME/p/3383539.html 什么是CSS清除浮动? 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的 ...

随机推荐

  1. neo4j的搭建和实例使用

    一. 简介 neo4j是当今最流行的图数据库,基于 节点+关系 的架构,保存了图形数据的基本元素.同时,数据库也支持通过基础数据元素和独特的CQL查询语法,快速方便的检索.构建复杂的图表关系结果. 二 ...

  2. https://blog.csdn.net/qq_33169863/article/details/82977791

    https://blog.csdn.net/qq_33169863/article/details/82977791 ** 查看设备连接  adb devices ** 列出手机已安装的包名 adb ...

  3. 玩转xargs

    xargs命令可以把标准输入数据转换成命令行参数.也可以将单行或多行文本输入转换成其他格式,是构建单行命令的重要组件之一. xargs命令应该紧跟在管道操作符之后,以stdin作为主要的源数据流,使用 ...

  4. Tuxera ntfs软件如何删除干净

    sudo /Library/Filesystems/fusefs_txantfs.fs/Contents/Resources/Support/uninstall-package.sh

  5. SpringData _day01_jpa的入门

    1.orm思想和以及jpa的概述和jpa的基本操作 简单的说:ORM就是建立实体类和数据库表之间的关系,从而达到操作实体类就相当于操作数据库表的目的. orm思想    主要目的:操作实体类就相当于操 ...

  6. MyBatis-Spring(五)--MapperScannerConfigurer实现增删改查

    上一篇文章中已经介绍,MapperScannerConfigurer可以通过扫描的方式获取我们需要的mapper,而不需要我们自己去配置,它的基本配置如下: <bean class=" ...

  7. Maven实战错误笔记:使用mvn archetype:generate报错:Unable to add module to the current project as it is not of packaging type 'pom'

    在使用mvn archetype:generate生成Maven实战03:HelloWorld中的HelloWorld的项目骨架时报了这个错,从字面上分析是可能与pom.xml文件有关,然后我看了一下 ...

  8. pycharm 汉化补丁

    找了很久,找到了这个比较好的pycharm汉化补丁包,就分享出来 1. 将解压包解压出来 2 . 复制对应的汉化补丁包到 x:\xxx\JetBrains\PyCharm Community Edit ...

  9. Hadoop中map数的计算

    转载▼ Hadoop中在计算一个JOB需要的map数之前首先要计算分片的大小.计算分片大小的公式是: goalSize = totalSize / mapred.map.tasks minSize = ...

  10. Codeforces 360A(找性质)

    反思 写一写可以发现上限不断更新 一直在想怎么判断NO,刻板拘泥于错误的模型,想要像往常一样贪心地.读入当前值就能判断会不会NO,实际上只要构造完以后,最后把所有操作重新跑一遍看会不会冲突即可判断NO ...