元素在浮动之后有三个重要的特点:

  1. 脱离文档流。
  2. 向左/向右浮动直到遇到父元素或者别的浮动元素。
  3. 浮动会导致父元素高度坍塌。

 解决父元素高度坍塌的方式就是清除浮动

以下述代码为例:

  1. <style type="text/css">
  2. .div1{
  3. background:#000080;
  4. border:1px solid red;
  5. }
  6. .div2{
  7. background:#800080;
  8. border:1px solid red;
  9. height:100px;
  10. margin-top:10px;
  11. }
  12.  
  13. .left{
  14. float:left;
  15. width:20%;
  16. height:80px;
  17. background:#DDD
  18. }
  19. .right{
  20. float:right;
  21. width:30%;
  22. height:80px;
  23. background:#DDD
  24. }
  25. </style>
  26. <div class="div1">
  27. <div class="left">Left</div>
  28. <div class="right">Right</div>
  29. </div>
  30. <div class="div2">div2</div>

最后的结果是:

一、给父元素定义height

  1. .div1{
  2. /*解决代码*/
  3. height:200px;
    }

结果为:

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

二、父元素也一起浮动

  1. .div1{
  2. margin-top: 10px;
  3. width:98%;
  4. /*解决代码*/
  5. float:left;
  6. }

缺点:会产生新的浮动问题。如图中div2上移了。

三、overflow:hidden,overflow:auto

要点:先找到浮动盒子的父元素,再在父元素中添加一个属性:overflow:hidden,就是清除这个父元素中的子元素浮动对页面的影响,必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度。

  1. .div1{
  2. /*解决代码*/
  3. width:98%;
  4. overflow:hidden;
  5. }

缺点:overflow:hidden有一个特点,离开了这个元素所在的区域以后会被隐藏(overflow:hidden会将超出的部分隐藏起来)。不能和position配合使用,因为超出的尺寸的会被隐藏。

overflow的值也可以设置为auto,要点和设置为hidden是一样的,只是产生的结果不一样,当内部宽高超过父级div时,会出现滚动条。

四、在额外的元素上应用clear

clear属性的值可以是left、right、both、none,表示框的哪边不应该挨着浮动框。其原理解释如下:

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

  1. <style type="text/css">
  2. .div1{
  3. background:#000080;
  4. border:1px solid red;
  5. }
  6. .div2{
  7. background:#800080;
  8. border:1px solid red;
  9. height:100px;
  10. margin-top:10px;
  11. }
  12.  
  13. .left{
  14. float:left;
  15. width:20%;
  16. height:80px;
  17. background:#DDD
  18. }
  19. .right{
  20. float:right;
  21. width:30%;
  22. height:80px;
  23. background:#DDD
  24. }
  25. /*清除浮动代码*/
  26. .clearfloat{
  27. clear:both
  28. }
  29. </style>
  30. <div class="div1">
  31. <div class="left">Left</div>
  32. <div class="right">Right</div>
  33. <div class="clearfloat"></div>
  34. </div>
  35. <div class="div2">div2</div>

缺点: 需要增加很多空的div。还有一个问题,就是margin失效。两个div之间,没有任何的间隙了。

  1. <style type="text/css">
  2. .div1{
  3. background:#000080;
  4. /*border:1px solid red; /*不能加border,border会防止margin collapsing,不会观察到margin不起作用的效果*/ */
  5. }
  6. .div2{
  7. background:#800080;
  8. border:1px solid red;
  9. height:100px;
  10. margin-top:10px;
  11. }
  12.  
  13. .left{
  14. float:left;
  15. width:20%;
  16. height:80px;
  17. background:#DDD
  18. }
  19. .right{
  20. float:right;
  21. width:30%;
  22. height:80px;
  23. background:#DDD
  24. }
  25. /*清除浮动代码*/
  26. .clearfloat1{
  27. clear:both;
  28. /*在此处加上margin,会发现margin不起作用*/
  29. margin: 1000px 0 20px 0;
  30. width: 100px;
  31. height: 100px;
  32. background: #4e97cd;
  33. }
  34. </style>
  35. <div class="div1">
  36. <div class="left">Left</div>
  37. <div class="right">Right</div>
  38. <div class="clearfloat1"></div>
  39. </div>
  40. <div class="div2">div2</div>

发现clearfloat块的margin没有起到任何作用,如果要使其有效,应该给包裹clearfloat的div用防止margin collapsing的方法(比如说设置'overflow: hidden;', 加padding或border, 浮动, 绝对定位等)

五、在父元素上定义伪元素:after和zoom

  1. <style type="text/css">
  2. .div1{
  3. background:#000080;
  4. border:1px solid red;
  5. }
  6. .div2{
  7. background:#800080;
  8. border:1px solid red;
  9. height:100px;
  10. margin-top:10px;
  11. }
  12.  
  13. .left{
  14. float:left;
  15. width:20%;
  16. height:80px;
  17. background:#DDD
  18. }
  19. .right{
  20. float:right;
  21. width:30%;
  22. height:80px;
  23. background:#DDD
  24. }
  25. /*清除浮动代码*/
  26. .clearfloat:after{
  27. content:"";/*设置内容为空*/
  28. height:0;/*高度为0*/
  29. display:block;/*将文本转为块级元素*/
  30. visibility:hidden;/*将元素隐藏*/
  31. clear:both/*清除浮动*/
  32. }
  33. .clearfloat{
  34. zoom:1 /*兼容IE*/
  35. }
  36. </style>
  37. <div class="div1 clearfloat">
  38. <div class="left">Left</div>
  39. <div class="right">Right</div>
  40. </div>
  41. <div class="div2">div2</div>

:after伪元素在元素之后添加内容。这个伪元素允许创作人员在元素内容的最后面插入生成内容。默认地,这个伪元素是行内元素,不过可以使用属性 display 改变这一点。

清除浮动(overflow、clear、:after等方法)的更多相关文章

  1. 【转】css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?

    摘要: css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?     一.抛一块问题砖(display: block)先看现象: 分析HTML代码结构: <div class ...

  2. css清除浮动float的几种方法

    摘要: css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?     一.抛一块问题砖(display: block)先看现象: 这里我没有给最外层的DIV.outer 设置高度, ...

  3. CSS浮动与清除浮动(overflow)例子

    在css中浮动与清除浮动功能是我们开发中常用到的一个功能了,下面小编来为各位分析关于CSS浮动与清除浮动(overflow)例子吧. float脱离文本流,可是为什么文字却会有环绕的效果,这点实在是神 ...

  4. css清除浮动大全共8种方法

    原文链接http://www.jb51.net/css/173023.html 清除浮动是每一个 web前台设计师必须掌握的机能.css清除浮动大全,共8种方法. 浮动会使当前标签产生向上浮的效果,同 ...

  5. css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?一起来$('.float')

    一.抛一块问题砖(display: block)先看现象: 分析HTML代码结构: <div class="outer">     <div class=&quo ...

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

    原文地址: http://my.oschina.net/leipeng/blog/221125 张大神的解析: http://www.zhangxinxu.com/wordpress/2010/01/ ...

  7. 浮动(float)与清除浮动(clear)

    上一篇中我们了解了块级元素与内联元素,今天将自己查阅的资料整理写出来,与大家一起理解什么是浮动,以及怎样清除浮动,本文以div元素为例. 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮 ...

  8. {前端CSS} 语法 Css的几种引入方式 css选择器 选择器的优先级 CSS属性相关 背景属性 边框 CSS盒子模型 清除浮动 overflow溢出属性  定位(position)z-index

    前端CSS CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 当浏览器读到一个样式表,它就会按照这个样式表来对文 ...

  9. CSS清除浮动大全的8种方法

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

  10. BFC之清除浮动篇&clear

    我们在日常代码生活中,或多或少会利用浮动来布局,例如导航布局,如下图所示: 但是,我们在实现的时候,经常会遇到父元素“塌陷”以及清除浮动问题.例如 <!DOCTYPE html> < ...

随机推荐

  1. char **argv 与char *argv[]

    1.char **argv 分析:argv是一个指针变量,argv的指向(*argv)是char *,也就是argv指向的也是一个指针 : *argv的指向(**argv)是char. 2.char ...

  2. :after/::after和:before/::before的异同

    相同点 都可以用来表示伪类对象,用来设置对象前的内容:before和::before写法是等效的; :after和::after写法是等效的不同点 :before/:after是Css2的写法,::b ...

  3. JavaScript 深度遍历对象的两种方式,递归与非递归

    递归遍历: 基本问题: 当前属性值不为对象时,打印键和值 递归过程:当前属性值为对象时,打印键,继续递归 var o = { a: { b: { c: { d: { e: { f: 1, g:{ h: ...

  4. 吴裕雄--天生自然TensorFlow2教程:函数优化实战

    import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def himme ...

  5. 解决github访问慢和下载项目慢的问题

    一.国内访问 GitHub 为什么很慢?  GitHub的CDN域名遭到DNS污染,导致无法连接使用 GitHub 的加速分发服务器,才使得国内访问速度很慢. 二.如何解决 DNS 污染?  通过修改 ...

  6. 解决idea创建maven项目无java

    在idea上创建maven-archetype-webapp项目后发现无法创建java文件然后参考此博客得以解决 https://www.cnblogs.com/mywangpingan/p/9448 ...

  7. 关于ubuntu挂载ntfs无法进行读写的解决方法

    查看挂载信息 df -h 参看要挂载磁盘UUID sudo blkid 编辑/etc/fstab文件: sudo vim /etc/fstab 在最后一行添加如下一行信息: UUID=A248CF46 ...

  8. day4-1深入理解对象之创建对象

    深入理解对象 之创建对象: 工厂模式: 工厂模式虽然解决了创建\多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型) 工厂模式问题:那就是识别问题,因为根本无法 搞清楚他们到底是 ...

  9. spring boot 中的配置文件可以存放的位置

  10. VM player无法联网问题

    情况就是vmplayer不能联网,能联网的话右上角会显示Wired Connected的 在VM里面看了网络设置,是和主机共享IP(常用)没错.那问题就在PC上了,在win+r输入services.m ...