CSS清除浮动是每一位web前端工程师都要掌握的技术,也是让每一位刚入门的前端工程师感到头疼的问题,

下面就来讲一下CSS清除浮动的原理和各种解决方法,大家可以根据实际情况选择最佳的解决方案。

在用DIV+CSS布局时通常都会用到浮动(float)来完成页面布局,浮动(float)会使当前标签产生向上浮的效果,同时会影响到前后标签、父级标签的位置及 width height 属性。如果在布局中使用了浮动(float)而未进行合理的清除浮动,就会使页面产生错误。

这时就需要用到清除浮动的方法来解决页面产生的错误,而且同样的代码,在各种浏览器中显示效果也有可能不相同,这样让清除浮动更难了。解决浮动引起的问题有多种方法,但有些方法在浏览器兼容性方面还有问题。

下面总结整理8种清除浮动的方法供大家学习和参考,不同的方法可以让我们更好的了解清除浮动的原理,使用时选取最合适的一种方法即可:

1.父级div定义height

<style type="text/css">
  .div1{background:#000080;border:1px solid red; /*解决代码*/height:200px; }
  .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
  .left{float:left;width:20%;height:200px;background:#DDD}
  .right{float:right;width:30%;height:80px;background:#DDD}
</style> <div class="div1">
<div class="left">Left</div>
<div class="right">Right</div>
</div>
<div class="div2">
div2
</div>

原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题;

优点:简单、代码少、容易掌握 ;

缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题 ;

建议:不推荐使用,只建议高度固定的布局时使用 。

2.结尾处加div标签 clear:both

<style type="text/css">
  .div1{background:#000080;border:1px solid red}
  .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
  .left{float:left;width:20%;height:200px;background:#DDD}
  .right{float:right;width:30%;height:80px;background:#DDD}
  /*清除浮动代码*/
  .clearfloat{clear:both}
</style> <div class="div1">
<div class="left">Left</div>
<div class="right">Right</div>
<div class="clearfloat"></div>
</div>
<div class="div2">
div2
</div>

原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度 ;

优点:简单、代码少、浏览器支持好、不容易出现怪问题 ;

缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好 ;

建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法 。

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

<style type="text/css">
  .div1{background:#000080;border:1px solid red;}
  .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
  .left{float:left;width:20%;height:200px;background:#DDD}
  .right{float:right;width:30%;height:80px;background:#DDD}
  /*清除浮动代码*/
  .clearfloat::after{display:block;clear:both;content:"";visibility:hidden;height:0}
  .clearfloat{zoom:1}
</style> <div class="div1 clearfloat">
<div class="left">Left</div>
<div class="right">Right</div>
</div>
<div class="div2">
div2
</div>

原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决IE6、IE7浮动问题;

优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾讯、网易、新浪等) ;

缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持;

建议:推荐使用,建议定义公共类,以减少CSS代码。

4.父级div定义 overflow:hidden

<style type="text/css">
  .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:hidden}
  .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%}
  .left{float:left;width:20%;height:200px;background:#DDD}
  .right{float:right;width:30%;height:80px;background:#DDD}
</style> <div class="div1">
<div class="left">Left</div>
<div class="right">Right</div>
</div>
<div class="div2">
div2
</div>

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度 ;

优点:简单、代码少、浏览器支持好 ;

缺点:不能和position配合使用,因为超出的尺寸的会被隐藏;

建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用。

5.父级div定义 overflow:auto

<style type="text/css">
.div1{background:#000080;border:1px solid red;/*解决代码
*/width:98%;overflow:auto}
.div2{background:#800080;border:1px solid red;height:100px;margin- top:10px;width:98%}
.left{float:left;width:20%;height:200px;background:#DDD}
.right{float:right;width:30%;height:80px;background:#DDD}
</style> <div class="div1">
<div class="left">Left</div>
<div class="right">Right</div>
</div>
<div class="div2">
div2
</div>

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度 ;

优点:简单、代码少、浏览器支持好 ;

缺点:内部宽高超过父级div时,会出现滚动条;

建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。

6.父级div也一起浮动

<style type="text/css">
.div1{background:#000080;border:1px solid red;/*解决代码 */width:98%;margin-bottom:10px;float:left}
.div2{background:#800080;border:1px solid red;height:100px;width:98%;/*解决代码*/clear:both}
.left{float:left;width:20%;height:200px;background:#DDD}
.right{float:right;width:30%;height:80px;background:#DDD}
</style> <div class="div1">
<div class="left">Left</div>
<div class="right">Right</div>
</div>
<div class="div2">
div2
</div>

原理:所有代码一起浮动,就变成了一个整体 ;

缺点:会产生新的浮动问题;

建议:不推荐使用,只作了解。

7.父级div定义 display:table

<style type="text/css">
.div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;display:table;margin-bottom:10px;}
.div2{background:#800080;border:1px solid red;height:100px;width:98%;}
.left{float:left;width:20%;height:200px;background:#DDD}
.right{float:right;width:30%;height:80px;background:#DDD}
</style> <div class="div1">
<div class="left">Left</div>
<div class="right">Right</div>
</div>
<div class="div2">
div2
</div>

原理:将div属性变成表格 ;

缺点:会产生新的未知问题;

建议:不推荐使用,只作了解。

8.结尾处加 br标签 clear:both

<style type="text/css">
.div1{background:#000080;border:1px solid red;margin-bottom:10px;zoom:1}
.div2{background:#800080;border:1px solid red;height:100px}
.left{float:left;width:20%;height:200px;background:#DDD}
.right{float:right;width:30%;height:80px;background:#DDD}
.clearfloat{clear:both}
</style> <div class="div1">
<div class="left">Left</div>
<div class="right">Right</div>
<br class="clearfloat" />
</div>
<div class="div2">
div2
</div>

原理:父级div定义zoom:1来解决IE浮动问题,结尾处加 br标签 clear:both ;

建议:不推荐使用,只作了解。

总结:以上8种方法分别从不同的方向去解决浮动带来的问题,不同的代码也会存在不同的问题,在我们实际使用中推荐使用第三种方法来进行清除浮动,其他方法用来了解即可。

CSS清除浮动8大方法的更多相关文章

  1. CSS清除浮动八种方法

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

  2. css清除浮动的八大方法

    清除浮动是每一个 web前台设计师必须掌握的机能.css清除浮动大全,共8种方法. 浮动会使当前标签产生向上浮的效果,同时会影响到前后标签.父级标签的位置及 width height 属性.而且同样的 ...

  3. css清除浮动的处理方法

    根据<精彩绝伦的css> <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  4. css清除浮动的集中方法

    一:浮动产生的副作用 1.父元素的背景不能显示 2.父元素的边框不能撑开 3.padding和margin失效 二:清除浮动的方法 1.给父元素设置高度:这样可以清除浮动,但是子元素内容高度不固定,这 ...

  5. 基础总结(01)--css清除浮动几种方法

    1.父元素添加overflow:auto/hidden; 2.父元素内加空div,添加样式clear:both; 3.父元素添加伪类; .parent:after{ content:''; displ ...

  6. DIV+CSS 清除浮动方法总结

    DIV+CSS 清除浮动是页面布局中常见的问题,相信各位高手也都有自己的方法,今天在这里对常见的几种方法进行总结(PS:谈不上是原创,这里是我自己做的归纳总结,也是我自己内化的过程),希望对您能够有所 ...

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

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

  8. CSS清除浮动各种方法

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

  9. 活学活用,CSS清除浮动的4种方法

    清除浮动这个问题,做前端的应该再熟悉不过了,咱是个新人,所以还是记个笔记,做个积累,努力学习向大神靠近. CSS清除浮动的方法网上一搜,大概有N多种,用过几种,说下个人感受. 1.结尾处加空div标签 ...

随机推荐

  1. python进阶03 继承

    python进阶03 继承 一.继承 课堂练习:假设你正在参与一个魔幻类角色游戏的开发,公司需要腻味这个游戏设计两个角色的类: a.剑士 属性:1.角色名:2.角色等级:3.生命值:4.攻击力 行为: ...

  2. GPU程序缓存(GPU Program Caching)

    GPU程序缓存 翻译文章: GPU Program Caching 总览 / 为什么 因为有一个沙盒, 每一次加载页面, 我们都会转化, 编译和链接它的GPU着色器. 当然不是每一个页面都需要着色器, ...

  3. 事务&数据库连接池&DBUtils

    事务的特性 原子性 指的是 事务中包含的逻辑,不可分割. 一致性 指的是 事务执行前后.数据完整性 隔离性 指的是 事务在执行期间不应该受到其他事务的影响 持久性 指的是 事务执行成功,那么数据应该持 ...

  4. 健康检查NET Core之跨平台的实时性能监控

    ASP.NET Core之跨平台的实时性能监控(2.健康检查)   前言 上篇我们讲了如何使用App Metrics 做一个简单的APM监控,最后提到过健康检查这个东西. 这篇主要就是讲解健康检查的内 ...

  5. DevExpress GridControl 控件二表连动

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. MCS-51单片机的定时器/计数器概念

    一.MCS-51单片机的定时器/计数器概念 单片机中,脉冲计数与时间之间的关系十分密切,每输入一个脉冲,计数器的值就会自动累加1,而花费的时间恰好是1微秒;只要相邻两个计数脉冲之间的时间间隔相等,则计 ...

  7. h5点击区域和实际区域对不上

    点击区域和实际区域对不上 然后点击后触发的其实是上面的区域,会导致事件触发错误

  8. The first step in solving any problem is recognizing there is one.

    The first step in solving any problem is recognizing there is one.解决问题的第一步是要承认确实存在问题.

  9. 3D图形引擎决定三维产业差异化

    从2009年中国3D产业初步兴起开始,短短几年间中国的3D技术得到了飞速的发展,3D打印机.3D投影仪.Web3D.虚拟现实.场景漫游等等产业应用应运而生,设备制造商和内容提供商都开始发挥自主创新的优 ...

  10. 我们为什么要看《超实用的HTML代码段》

    不知道自己HTML水平如何,不知道HTML5如何进化?看这张图 如果一半以上的你都不会,必须看这本书,阿里一线工程师用代码和功能页面来告诉你每一个技术点. 都会一点,但不知道如何检验自己,看看本书提供 ...